DocumentationLimites et erreurs

Exploiter

Limites et erreurs

Ce que l’API refuse, pourquoi, et ce que votre code doit faire de chaque réponse.

Sur cette page
  1. Les limites
  2. Les erreurs
  3. Réessayer proprement

Les limites

LimiteValeurAu-delà
Requêtes300 par minute et par clé429, avec l’attente dans retry-after
Requêtes simultanéesSelon votre offre429, nouvelle tentative après 5 secondes
Jetons par jour, semaine ou moisSelon votre offre429, sans retry-after
Taille d’une requête50 MoRefusée

Les erreurs

CodeCauseQue faire
400Requête mal formée ou modèle inconnu. Le message nomme le champ en cause.Corriger la requête
401Clé absente, inconnue, révoquée ou expiréeVérifier la clé, sans réessayer en boucle
403Modèle ou fonction absent de votre offreChanger de modèle ou d’offre
429Trop de requêtes, ou plafond de jetons atteintAttendre retry-after s’il est présent, sinon s’arrêter
502Le modèle n’a pas répondu correctementRéessayer un peu plus tard
503Service momentanément indisponibleRéessayer un peu plus tard

Le corps d’une erreur porte toujours un message lisible :

json
{
  "error": {
    "message": "model \"max\" is not part of this plan",
    "type": "router_error"
  }
}

Réessayer proprement

Réessayez seulement quand l’API vous dit combien attendre. Un plafond de jetons atteint ne se règle pas en insistant.

import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    base_url="https://api.learnya.ai/v1",
    api_key=os.environ["LEARNYA_API_KEY"],
    max_retries=0,
)


def complete(**request):
    for attempt in range(5):
        try:
            return client.chat.completions.create(**request)
        except RateLimitError as error:
            # The gateway says how long to wait.
            # A spent token budget says nothing: stop there.
            wait = error.response.headers.get("retry-after")
            if wait is None:
                raise
            time.sleep(int(wait) + attempt)
    raise RuntimeError("still limited after five attempts")