mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-31 00:03:01 +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",
|
||||
"connection",
|
||||
"server error",
|
||||
"server_error",
|
||||
"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
|
||||
|
||||
|
||||
@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
|
||||
async def test_codex_provider_passes_proxy_to_oauth_and_response_request(monkeypatch) -> None:
|
||||
proxy = "http://127.0.0.1:23458"
|
||||
|
||||
Reference in New Issue
Block a user