fix(llm): timeout esplicito 60s sul client OpenAI (no più hang infinito)

Run phase2-6-flat-wfa-001 è andato in hang per 4h+ a gen 3/10 su una
chiamata OpenRouter (process stuck in do_poll syscall, 0% CPU). Il SDK
OpenAI ha default timeout 600s ma evidentemente il TLS/socket handshake
può bloccarsi senza interrompere; senza timeout esplicito i retry tenacity
non scattano mai e il run resta pending.

Fix: OpenAI(timeout=60.0). Se una chiamata supera 60s, raise
APITimeoutError (già in _RETRYABLE_EXCEPTIONS) e tenacity ritenta fino a 5
volte con backoff esponenziale fino a 30s. Worst case totale: ~5×60s =
5min per call (vs 4h+ hang precedente).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-12 22:15:31 +02:00
parent 242724ba05
commit 3fcad79f8d
+7 -1
View File
@@ -79,7 +79,13 @@ class LLMClient:
ModelTier.C: model_tier_c, ModelTier.C: model_tier_c,
ModelTier.D: model_tier_d, ModelTier.D: model_tier_d,
} }
self._client = OpenAI(api_key=openrouter_api_key, base_url=openrouter_base_url) # Timeout esplicito (60s) per prevenire hang infinito su connessioni
# stallate. Tenacity retry su APITimeoutError gestisce il recovery.
self._client = OpenAI(
api_key=openrouter_api_key,
base_url=openrouter_base_url,
timeout=60.0,
)
@retry( @retry(
stop=stop_after_attempt(5), stop=stop_after_attempt(5),