API Timeout : diagnostiquer les coupures et configurer des retries fiables pour les LLM
Guide technique pour surmonter les erreurs de timeout d'API LLM : délais personnalisés connect/read/pool, streaming SSE fluide et retries exponentiels.
Les erreurs API Timeout (dépassement du délai de connexion ou de lecture) sont fréquentes lors de l'intégration des modèles de raisonnement (comme OpenAI o3-mini ou Claude 3.7 Sonnet avec pensée étendue). Lors de l'exécution de chaînes de réflexion complexes, le délai avant le premier jeton (TTFT) ou la génération complète peut nécessiter de 30 à 90 secondes, ce qui provoque des interruptions sur les clients HTTP classiques.
Afin de garantir un transfert stable sur les longues générations, les développeurs s'appuient sur BetterToken, qui assure un routage optimisé des Server-Sent Events (SSE) sans mise en mémoire tampon intermédiaire. Les paramètres complets sont décrits dans la documentation de référence de BetterToken API.
Localisation des coupures : les phases du cycle de requête HTTP
Une requête vers une API de modèle de langage se compose de quatre phases techniques distinctes :
- Connect Timeout : Délai alloué pour établir la connexion TCP et finaliser le protocole TLS (5 à 10 secondes recommandées).
- Write Timeout : Temps nécessaire pour téléverser la charge utile (essentiel pour les contextes de plus de 100k jetons).
- Read Timeout : Temps d'attente avant la réponse initiale ou entre les fragments successifs du flux SSE.
- Pool Timeout : Temps d'attente pour acquérir un socket disponible dans le pool sous forte charge concurrente.
Matrice de diagnostic des erreurs de timeout
Configuration des timeouts granulaires en Python (HTTPX)
La valeur par défaut timeout=10.0 des bibliothèques standard entraîne systématiquement des coupures avec les modèles de raisonnement. Voici une configuration robuste :
Stabilisation des flux SSE et retries sécurisés
Pour éviter les coûts superflus lors des pannes, les tentatives de rejeu doivent respecter trois règles :
- Ne pas retenter si le streaming a déjà débuté : Si des jetons ont déjà été reçus, relancer la requête intégrale générera une double facturation.
- Backoff exponentiel avec Full Jitter : Les nouvelles tentatives doivent être espacées par des délais progressifs et aléatoires.
- Clés d'idempotence : Utilisez des identifiants uniques dans vos traitements par lots pour éviter les doublons.
Validation finale
- Statut HTTP
200 OK. - Transmission fluide de tous les fragments SSE sans coupure.
- Libération immédiate des sockets une fois le flux terminé.
Pour en savoir plus, consultez la référence d'API BetterToken.