Erreurs

Tous les codes de statut renvoyés par la passerelle, leurs causes réelles et les solutions.

Les erreurs renvoient JSON avec un type et un message lisible par un humain message. Les codes de statut suivent les conventions d’Anthropic et d’OpenAI.

{"type": "error", "error": {"type": "authentication_error", "message": "invalid api key"}}

Codes de statut

CodeSignificationCause réelle la plus couranteSolution
400Requête incorrecteAbsence de max_tokens dans Messages, ou un élément mal formé : messages tableauVérifiez le corps de la requête par rapport à Messages
401Non authentifiéClé envoyée dans le mauvais en-tête pour le format utiliséx-api-key pour Messages, Bearer pour Chat Completions
402Paiement requisSolde épuisé ou forfait expiréRecharger ou acheter un forfait
403Accès interditClé révoquée ou modèle non activé pour le compteCréez une nouvelle clé ; vérifiez /v1/models
404IntrouvableErreur d’URL de base — généralement un élément dupliqué ou manquant : /v1Voir URL de base
429Limite de débit atteinteTrop de requêtes simultanéesRéessayez avec un délai exponentiel ; voir Limites de débit
500Erreur de passerelleDéfaillance interne inattendueRéessayez une fois ; si le problème persiste, contactez l’assistance en indiquant l’identifiant de la requête
529Service en amont surchargéCapacité du fournisseur, sans lien avec votre compteRéessayez avec un délai croissant — le problème se résout généralement en quelques secondes

Types d’erreurs

typeSignification
invalid_request_errorLe corps de la requête est mal formé ou un champ obligatoire est manquant
authentication_errorClé manquante, mal formée ou révoquée
permission_errorLa clé est valide, mais n’est pas autorisée à utiliser ce modèle
not_found_errorChemin inconnu ou identifiant de modèle inconnu
rate_limit_errorDébit limité
api_errorDéfaillance interne
overloaded_errorCapacité du service en amont épuisée

Réessayer correctement

Nouvelle tentative 429, 500, 502, 503 et 529. Ne réessayez jamais aveuglément 400, 401, 402 ou 403 — la même requête échouera de la même manière et, pour les réponses partiellement générées, vous risquez de payer deux fois.

import time, httpx

def call(body, key, tries=4):
    for i in range(tries):
        r = httpx.post(class="s">"https://aiprimetech.io/v1/messages", json=body, timeout=120,
                       headers={class="s">"x-api-key": key,
                                class="s">"anthropic-version": class="s">"2023-06-01"})
        if r.status_code in (429, 500, 502, 503, 529):
            time.sleep(2 ** i)          class=class="s">"c"># 1s, 2s, 4s, 8s
            continue
        r.raise_for_status()
        return r.json()
    raise RuntimeError(class="s">"upstream unavailable after retries")
Ajoutez une variation aléatoire au délai d’attente en production. Des tentatives synchronisées provenant de nombreux processus de traitement transforment un incident passager en un afflux massif de requêtes vers le même service en amont.