Erreurs

Chaque code d'erreur que cette API peut renvoyer, le statut HTTP qui le porte, et quoi faire à ce sujet. L'enveloppe est de forme OpenAI avec un ajout dans un espace de noms.

L'enveloppe

error.message est rédigé pour une personne qui lit un journal, error.type nomme la classe de défaillance, et error.code est l'identifiant stable sur lequel brancher — le texte du message n'est pas un contrat. Là où l'API a un détail structuré (quelle politique, quel endpoint, quel modèle), il arrive dans error.llmeu et ne remplace jamais les trois champs standard.

{
  "error": {
    "message": "No endpoint satisfies residency eu-owned. Residency is never relaxed silently.",
    "type": "conflict_error",
    "code": "no_endpoint_for_policy",
    "llmeu": { "requested": "llmeu-auto" }
  }
}

le type suit le statut

La correspondance ci-dessous est celle que l'API applique, rendue à partir de la même table qui construit ses réponses.

HTTP type
400invalid_request_error
401authentication_error
402insufficient_quota
403permission_error
404not_found_error
409conflict_error
413invalid_request_error
422invalid_request_error
429rate_limit_error
500api_error
501api_error
502api_error
503api_error

Codes

Chaque code pouvant atteindre un client. Un test parcourt le code source de l'API et échoue lorsque ce tableau et le code divergent dans un sens ou dans l'autre, ainsi un code ne peut être inventé ici ou ajouté là sans être documenté.

HTTP code Ce que cela signifie, et quoi faire
400 invalid_request Le corps de la requête n'a pas passé la validation.
400 invalid_json Le corps n'était pas un JSON valide.
400 invalid_llmeu L'objet llmeu n'était pas un objet, ou contenait un champ inconnu.
400 invalid_residency La résidence demandée n'est pas l'une des quatre classes d'hébergement.
400 invalid_data_class Le data_class demandé n'est pas l'une des quatre classes.
400 invalid_retention La rétention demandée n'est pas zéro, 24h, 7j ou 30j.
400 invalid_max_tokens max_tokens n'était pas un entier positif.
400 invalid_stream stream n'était pas un booléen.
400 invalid_stop stop n'était ni une chaîne ni un tableau de chaînes.
400 invalid_role Un message contenait un rôle en dehors de system, user, assistant et tool.
400 invalid_tools tools ou tool_choice était malformé.
400 missing_model Le champ model est requis.
400 missing_messages messages est requis et ne doit pas être vide.
400 missing_input input est requis pour les embeddings.
400 missing_name name est requis.
401 invalid_api_key La clé est manquante, inconnue, révoquée ou expirée.
402 budget_exceeded Le budget quotidien de l'organisation est épuisé. Augmentez max_usd_per_day ou attendez le renouvellement de la fenêtre.
403 api_key_required La requête a utilisé une session console. Créez une clé API et envoyez-la à la place.
403 insufficient_scope La clé est valide mais ne possède pas la portée requise par cet endpoint.
403 no_organization L'identifiant n'est pas rattaché à une organisation.
403 model_denied La politique de l'organisation refuse ce modèle ou son fournisseur.
403 policy_violation La requête enfreint une règle de la politique de l'organisation.
403 retention_exceeds_policy La rétention demandée est plus longue que ne l'autorise la politique. Ceci est vérifié avant toute autre chose concernant la requête.
403 data_class_not_allowed Le data_class de la requête n'est pas l'un de ceux que la politique autorise.
404 model_not_found Aucun modèle de ce type pour cette organisation.
404 hosted_unavailable Le modèle est dans le catalogue mais n'est pas hébergé sur LLM EU, il ne peut donc pas être appelé.
404 not_found La route existe mais l'objet n'existe pas.
404 unknown_route Aucune route n'est montée à ce chemin. Chaque endpoint OpenAI qui n'est pas listé sous Endpoints répond ceci.
404 policy_not_found Le policy_id dans llmeu n'appartient pas à cette organisation.
409 no_endpoint_for_policy Rien ne satisfait la politique et la résidence ensemble, et ni l'une ni l'autre n'est relâchée silencieusement.
409 not_a_text_model Le modèle nommé ne peut pas générer de texte : c'est un modèle de reconnaissance vocale, d'embedding ou de reranking.
409 conflict La requête entre en conflit avec l'état actuel de l'objet.
413 request_too_large Le corps dépasse la limite de taille de l'endpoint.
429 rate_limit_exceeded Une limite du tableau des limites de débit a été atteinte. Le message indique l'heure de réinitialisation de la fenêtre.
500 internal_error Une défaillance inattendue de notre côté.
501 not_implemented L'endpoint n'est volontairement pas proposé, ou la capacité demandée n'existe pas sur ce déploiement.
501 retention_not_implemented La politique autorise une rétention autre que zéro et seul zéro est implémenté, donc la requête est refusée au lieu d'être stockée.
501 unsupported_n n supérieur à 1 n'est pas pris en charge.
502 upstream_error Aucun endpoint n'a pu servir la requête après bascule. La trace enregistre chaque tentative.
502 stream_failed Le flux a échoué après avoir déjà commencé.

no_endpoint_for_policy est le fonctionnement normal du produit

Un 409 avec ce code signifie que la politique et la requête ensemble n'admettent aucun endpoint, et le routeur a refusé de relâcher silencieusement l'un ou l'autre. Ce n'est pas transitoire : réessayer sans modifier la requête, la politique ou la résidence échoue de la même manière. L'erreur porte la résidence demandée, et la trace enregistre pourquoi chaque endpoint a été rejeté.

Erreurs dans un flux

Une requête en streaming qui échoue après l'envoi des en-têtes écrit l'erreur comme une trame SSE finale puis le terminateur, ainsi un client qui suit le format voit un échec au lieu d'un succès tronqué.

data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}

data: [DONE]