mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-31 08:13:11 +03:00
fix(provider): retry Codex server_error
Mid-stream response.failed events from OpenAI carry 'server_error' (underscore), but the transient-error marker list only had 'server error' (space). is_transient_response missed it, so the retry loop gave up on the first attempt instead of using its normal 1s/2s/4s backoff.
This commit is contained in:
@@ -326,6 +326,7 @@ class LLMProvider(ABC):
|
|||||||
"timed out",
|
"timed out",
|
||||||
"connection",
|
"connection",
|
||||||
"server error",
|
"server error",
|
||||||
|
"server_error",
|
||||||
"temporarily unavailable",
|
"temporarily unavailable",
|
||||||
"速率限制",
|
"速率限制",
|
||||||
"访问量过大",
|
"访问量过大",
|
||||||
|
|||||||
@@ -319,6 +319,25 @@ async def test_codex_timeout_error_is_typed_and_retryable(monkeypatch) -> None:
|
|||||||
assert response.error_should_retry is True
|
assert response.error_should_retry is True
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_codex_mid_stream_server_error_is_treated_as_transient(monkeypatch) -> None:
|
||||||
|
_mock_codex_token(monkeypatch)
|
||||||
|
|
||||||
|
async def fake_request(*args, **kwargs):
|
||||||
|
raise RuntimeError(
|
||||||
|
"Response failed: {'type': 'server_error', 'code': 'server_error', "
|
||||||
|
"'message': 'An error occurred while processing your request.'}"
|
||||||
|
)
|
||||||
|
|
||||||
|
monkeypatch.setattr("nanobot.providers.openai_codex_provider._request_codex", fake_request)
|
||||||
|
|
||||||
|
provider = OpenAICodexProvider()
|
||||||
|
response = await provider.chat([{"role": "user", "content": "hello"}])
|
||||||
|
|
||||||
|
assert response.finish_reason == "error"
|
||||||
|
assert provider_base.LLMProvider.is_transient_response(response) is True
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_codex_provider_passes_proxy_to_oauth_and_response_request(monkeypatch) -> None:
|
async def test_codex_provider_passes_proxy_to_oauth_and_response_request(monkeypatch) -> None:
|
||||||
proxy = "http://127.0.0.1:23458"
|
proxy = "http://127.0.0.1:23458"
|
||||||
|
|||||||
Reference in New Issue
Block a user