Erreur 504 : que faire quand gpt-4o-mini échoue

Un 504 signifie que la passerelle a expiré en attendant le modèle amont : la requête a été envoyée, mais l'amont n'a pas répondu dans le délai imparti.

504 Gateway Timeout signifie que la passerelle a cessé d’attendre la réponse de l’upstream. La requête a été transmise, mais aucun résultat n’est revenu dans la limite imposée. Raccourcir la sortie, activer le streaming ou baisser max_tokens règle généralement le problème.

gpt-4o-mini est fourni par OpenAI. Tout sur cette page — causes, correctifs et données mesurées — est établi à partir du comportement réel de ce modèle au niveau de la passerelle.

Sur cette passerelle, le déclencheur le plus courant est : L'amont a mis plus de temps que le délai autorisé par la passerelle. La première action recommandée : Passez à la sortie en streaming.

Causes fréquentes

  • L'amont a mis plus de temps que le délai autorisé par la passerelle
  • Un contexte long a augmenté le temps d'inférence
  • Un nœud amont est bloqué
  • Une requête non diffusée avec une sortie très longue

Comment corriger

  • Passez à la sortie en streaming
  • Raccourcissez le contexte et réduisez max_tokens
  • Réessayez après une courte attente
  • Utilisez un modèle à inférence plus rapide

Nouvelle tentative avec backoff exponentiel

Le code ci-dessous réessaie lorsque gpt-4o-mini renvoie 504 : jusqu’à 5 tentatives, avec une attente croissante et un jitter aléatoire pour éviter que les appels concurrents ne réessaient simultanément. Lisez l’URL de base et la clé API depuis les variables d’environnement, ne les écrivez jamais en dur.

import os, time, random
import requests

BASE  = os.getenv("OPENAI_BASE_URL")   # e.g. https://<your-gateway>/v1
KEY   = os.getenv("OPENAI_API_KEY")
MODEL = 'gpt-4o-mini'


def chat(messages, retries=5):
    """Retry with exponential backoff + jitter."""
    for i in range(retries):
        try:
            r = requests.post(
                BASE + "/chat/completions",
                headers={"Authorization": "Bearer " + KEY},
                json={"model": MODEL, "messages": messages, "stream": True},
                timeout=60,
            )
            if r.status_code == 429 or r.status_code >= 500:
                time.sleep(min(2 ** i + random.uniform(0, 1), 30))
                continue
            r.raise_for_status()
            return r.json()
        except requests.exceptions.Timeout:
            time.sleep(min(2 ** i + random.uniform(0, 1), 30))
    raise RuntimeError("gave up after " + str(retries) + " retries")


print(chat([{"role": "user", "content": "hello"}]))

Données clés de ce modèle

TPS260.87
Latence moyenne1408 ms
Taux de réussite100%
Point de terminaison APIhttps://api.airai.cc/v1
Compatible OpenAIOpenAI-compatible
FournisseurOpenAI
Contexte128K
CapacitésTools, Files, Vision
Formats d’APIopenai, openai-response, openai-response-compact, anthropic, gemini, openai-alpha-search
Formule de facturationp * 0.15 + cr * 0.075 + c * 0.6

Questions fréquentes

504 est-il lié aux capacités du modèle lui-même ?

Cette erreur ne dépend pas de la capacité du modèle, elle est au niveau de la passerelle. C’est généralement passager et se rétablit tout seul. Avec un taux de réussite de 100%, un 504 occasionnel est une variation normale. Déterminez d’abord si c’est au niveau du compte ou du modèle ; les deux demandent un traitement totalement différent.

Serai-je facturé lorsque gpt-4o-mini renvoie 504 ?

Aucune facturation : seule la sortie réellement produite compte dans l’usage. Seule la sortie déjà produite est facturée, pas la partie échouée. La facturation suit p * 0.15 + cr * 0.075 + c * 0.6 : sans sortie, aucun débit. Avec la facturation p * 0.15 + cr * 0.075 + c * 0.6, les requêtes échouées ne sont pas comptées dans l’usage. Vérifiez d’abord le solde et les limites de débit dans la console, ensuite le code. En estimant le coût à partir de p * 0.15 + cr * 0.075 + c * 0.6, incluez aussi le budget de relances.

Faut-il basculer sur un modèle de secours quand 504 apparaît ?

Gardez aussi un modèle de repli prêt. Ce modèle de OpenAI dispose de plusieurs nœuds upstream entre lesquels la passerelle peut basculer. Gardez un modèle de repli plus léger, le flux principal ne sera jamais interrompu. Mettez le nom du modèle en configuration : changer d’amont ne demande alors aucune modification de code.

Les retry doivent-ils ajouter du jitter aléatoire ?

Il n’est généralement pas nécessaire de modifier le code, seulement le rythme des appels. Réessayer est la première étape la plus efficace. Le taux de succès mesuré est de 100% : la première relance apporte donc le plus grand bénéfice. Avec la facturation p * 0.15 + cr * 0.075 + c * 0.6, les requêtes échouées ne sont pas comptées dans l’usage. Utilisez un backoff exponentiel pour les erreurs relançables et renvoyez l’erreur immédiatement pour les autres.

Autres erreurs sur ce modèle

Autres modèles avec la même erreur

Données mises à jour: 2026-10-10 15:45

Support techniqueAssistance en ligne
Haut de page