fix: log primary model error before fallback

This commit is contained in:
chengyongru
2026-06-18 00:02:49 +08:00
committed by Xubin Ren
parent 0d4af68e63
commit 8ecc2d69c4
2 changed files with 32 additions and 3 deletions
+25
View File
@@ -6,6 +6,7 @@ from typing import Any
from unittest.mock import MagicMock, patch
import pytest
from loguru import logger
from nanobot.config.schema import ModelPresetConfig
from nanobot.providers.base import LLMProvider, LLMResponse
@@ -284,6 +285,30 @@ class TestFallbackOnPrimaryError:
assert primary.chat_calls[0]["model"] == "primary-model"
assert fallback.chat_calls[0]["model"] == "fallback-a"
@pytest.mark.asyncio
async def test_logs_primary_error_before_fallback(self) -> None:
primary = _FakeProvider("primary", _error_response("primary overloaded"))
fallback = _FakeProvider("fallback", _make_response("fallback ok"))
factory = MagicMock(return_value=fallback)
logs: list[str] = []
sink_id = logger.add(lambda message: logs.append(str(message)), format="{message}")
try:
fb = FallbackProvider(
primary=primary,
fallback_presets=[_fallback("fallback-a")],
provider_factory=factory,
)
await fb.chat(messages=[{"role": "user", "content": "hi"}], model="primary-model")
finally:
logger.remove(sink_id)
assert any(
"Primary model 'primary-model' failed: primary overloaded; trying fallback 'fallback-a'"
in line
for line in logs
)
class TestNoFallbackWhenContentStreamed:
@pytest.mark.asyncio