Gestion des erreurs
Ce guide présente le format de réponse d’erreur de l’API OfoxAI, les scénarios d’erreur courants et les stratégies de gestion recommandées.
Format de réponse d’erreur
Toutes les réponses d’erreur suivent un format JSON unifié :
{
"error": {
"code": "invalid_api_key",
"message": "La clé API fournie est invalide, veuillez vérifier et réessayer.",
"type": "authentication_error"
}
}Codes de statut HTTP
| Code | Type | Description | Réessayer ? |
|---|---|---|---|
400 | invalid_request_error | Paramètres de requête incorrects | Non, modifiez les paramètres |
401 | authentication_error | Clé API invalide ou manquante | Non, vérifiez la clé API |
403 | permission_error | Permissions insuffisantes | Non, vérifiez les permissions du compte |
404 | not_found_error | Modèle ou ressource introuvable | Non, vérifiez l’ID du modèle |
429 | rate_limit_error | Limite de débit atteinte | Oui, attendez et réessayez |
500 | internal_error | Erreur interne du serveur | Oui, réessayez plus tard |
502 | upstream_error | Erreur du fournisseur en amont | Oui, changez de modèle ou réessayez |
503 | service_unavailable | Service temporairement indisponible | Oui, réessayez plus tard |
Erreurs courantes et solutions
401 — Clé API invalide
{"error": {"code": "invalid_api_key", "message": "The API key provided is invalid."}}Solution :
- Vérifiez que la clé API a été correctement copiée (incluant le préfixe
sk-) - Confirmez que la clé n’a pas expiré ou n’a pas été désactivée
- Vérifiez que les variables d’environnement sont correctement chargées
429 — Limite de débit
{"error": {"code": "rate_limit_exceeded", "message": "Rate limit reached. Please retry after 1s."}}Solution :
- Vérifiez
x-ratelimit-reset-requestsdans les en-têtes de réponse - Implémentez un réessai avec backoff exponentiel
- Si vous avez besoin de quotas plus élevés, contactez le support pour demander un ajustement
502 — Erreur en amont
{"error": {"code": "upstream_error", "message": "The upstream provider returned an error."}}Solution :
- Utilisez le repli automatique pour basculer automatiquement vers un modèle alternatif
- Réessayez plus tard
- Vérifiez la page de statut du fournisseur du modèle
Stratégie de réessai
Il est recommandé d’utiliser une stratégie de backoff exponentiel (Exponential Backoff) :
retry.py
import time
import random
from openai import OpenAI, APIError, RateLimitError, APIConnectionError
client = OpenAI(
base_url="https://api.ofox.ai/v1",
api_key="<votre OFOXAI_API_KEY>"
)
def chat_with_retry(max_retries=5, **kwargs):
"""Wrapper de réessai avec backoff exponentiel"""
for attempt in range(max_retries):
try:
return client.chat.completions.create(**kwargs)
except RateLimitError:
# 429 : attendre et réessayer
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Limite de débit atteinte, réessai dans {wait:.1f}s...")
time.sleep(wait)
except APIConnectionError:
# Erreur réseau : attendre brièvement et réessayer
wait = 2 ** attempt
print(f"Erreur de connexion, réessai dans {wait}s...")
time.sleep(wait)
except APIError as e:
if e.status_code and e.status_code >= 500:
# 5xx : erreur serveur, réessayer
wait = 2 ** attempt
time.sleep(wait)
else:
# 4xx : erreur client, ne pas réessayer
raise
raise Exception(f"Échec après {max_retries} tentatives")
# Utilisation
response = chat_with_retry(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Bonjour"}]
)Configuration du timeout
Il est recommandé de définir un délai d’attente raisonnable pour les appels API :
# Python OpenAI SDK
client = OpenAI(
base_url="https://api.ofox.ai/v1",
api_key="<votre OFOXAI_API_KEY>",
timeout=60.0, # Timeout de 60 secondes
max_retries=3 # Réessai intégré au SDK
)// TypeScript OpenAI SDK
const client = new OpenAI({
baseURL: 'https://api.ofox.ai/v1',
apiKey: '<votre OFOXAI_API_KEY>',
timeout: 60000, // Timeout de 60 secondes
maxRetries: 3 // Réessai intégré au SDK
})Pour les requêtes en streaming, un timeout plus long est recommandé (120-300 secondes), car le modèle peut nécessiter plus de temps pour générer le contenu complet.
Bonnes pratiques
- Distinguez les erreurs réessayables des non réessayables — Les 4xx nécessitent généralement de modifier la requête ; les 5xx peuvent être réessayés
- Utilisez le backoff exponentiel — Évitez les réessais fréquents lors de la limitation de débit
- Définissez un nombre maximum de réessais — Prévenez les réessais infinis
- Enregistrez les erreurs — Facilitez le diagnostic des problèmes
- Configurez le repli automatique — Utilisez le paramètre
provider.fallbackd’OfoxAI pour changer de modèle automatiquement - Surveillez le taux d’erreurs — Observez les tendances d’erreurs dans la console
Last updated on