fix(llm): RateLimitError retryable + retry tenacity 3→5 + backoff fino a 30s
Run phase2-5-qwen25-prompt-mut-003 fallito a gen 5 (76 evals done, $0.061 spesi) per HTTP 429 RateLimit upstream da DeepInfra su qwen-2.5-72b. RateLimitError NON era in _RETRYABLE_EXCEPTIONS quindi tenacity falliva subito, propagando il 429 a propose() e all'orchestrator (run failed). Tre fix: 1) Aggiunto openai.RateLimitError a _RETRYABLE_EXCEPTIONS. 2) Bumpato stop_after_attempt(3) → 5 e wait_exponential max 10s → 30s. Più tempo per il rate limit upstream di sbloccare prima di rinunciare. 3) hypothesis.py: try/except RateLimitError in propose() come per EmptyCompletionError — anche se tenacity esaurisce i 5 retry, il genome viene marcato fitness=0 e il loop esterno continua senza crash totale. Test: aggiornato test_completion_retries_on_connection_error per assert call_count == 5 (era 3). Tutti 182 verdi. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -75,7 +75,7 @@ def test_completion_retries_on_connection_error(mocker):
|
||||
with pytest.raises(openai.APIConnectionError):
|
||||
client.complete(g, system="sys", user="usr")
|
||||
|
||||
assert fake_openai.chat.completions.create.call_count == 3
|
||||
assert fake_openai.chat.completions.create.call_count == 5
|
||||
|
||||
|
||||
def test_completion_uses_custom_model_tier_c(mocker):
|
||||
|
||||
Reference in New Issue
Block a user