Skip to Content
DocumentationGuidesGestion des erreurs

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

CodeTypeDescriptionRéessayer ?
400invalid_request_errorParamètres de requête incorrectsNon, modifiez les paramètres
401authentication_errorClé API invalide ou manquanteNon, vérifiez la clé API
403permission_errorPermissions insuffisantesNon, vérifiez les permissions du compte
404not_found_errorModèle ou ressource introuvableNon, vérifiez l’ID du modèle
429rate_limit_errorLimite de débit atteinteOui, attendez et réessayez
500internal_errorErreur interne du serveurOui, réessayez plus tard
502upstream_errorErreur du fournisseur en amontOui, changez de modèle ou réessayez
503service_unavailableService temporairement indisponibleOui, 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-requests dans 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

  1. 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
  2. Utilisez le backoff exponentiel — Évitez les réessais fréquents lors de la limitation de débit
  3. Définissez un nombre maximum de réessais — Prévenez les réessais infinis
  4. Enregistrez les erreurs — Facilitez le diagnostic des problèmes
  5. Configurez le repli automatique — Utilisez le paramètre provider.fallback d’OfoxAI pour changer de modèle automatiquement
  6. Surveillez le taux d’erreurs — Observez les tendances d’erreurs dans la console
Last updated on