Skip to main content
Suivez ces bonnes pratiques pour gérer efficacement les erreurs de W&B Serverless Inference et garantir la fiabilité de vos applications.

Implémentez toujours une gestion des erreurs

Encapsulez les appels d’API dans des blocs try-except :
import openai

try:
    response = client.chat.completions.create(
        model="meta-llama/Llama-3.1-8B-Instruct",
        messages=messages
    )
except Exception as e:
    print(f"Error: {e}")
    # Gérer l'erreur de manière appropriée

Utilisez une logique de nouvelle tentative avec backoff exponentiel

Réessayez en cas d’échecs transitoires, avec des délais croissants entre les tentatives :
import time
from typing import Optional

def call_inference_with_retry(
    client, 
    messages, 
    model: str,
    max_retries: int = 3,
    base_delay: float = 1.0
) -> Optional[str]:
    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model=model,
                messages=messages
            )
            return response.choices[0].message.content
        except Exception as e:
            if attempt == max_retries - 1:
                raise
            
            # Calculer le délai avec un backoff exponentiel
            delay = base_delay * (2 ** attempt)
            print(f"Attempt {attempt + 1} failed, retrying in {delay}s...")
            time.sleep(delay)
    
    return None

Surveillez votre utilisation

  • Suivez l’utilisation des crédits sur la page Billing de W&B.
  • Configurez des alertes avant d’atteindre les limites.
  • Enregistrez l’utilisation de l’API dans votre application.

Gérer les codes d’erreur spécifiques

def handle_inference_error(error):
    error_str = str(error)
    
    if "401" in error_str:
        # Authentification invalide
        raise ValueError("Check your API key and project configuration")
    elif "402" in error_str:
        # Crédits insuffisants
        raise ValueError("Insufficient credits")
    elif "429" in error_str:
        # Limite de débit atteinte
        return "retry"
    elif "500" in error_str or "503" in error_str:
        # Erreur serveur
        return "retry"
    else:
        # Erreur inconnue
        raise

Définissez des délais d’expiration adaptés

Configurez des délais d’expiration raisonnables pour votre cas d’utilisation :
# Pour les réponses plus longues
client = openai.OpenAI(
    base_url='https://api.inference.wandb.ai/v1',
    api_key="your-api-key",
    timeout=60.0  # délai d'expiration de 60 secondes
)

Conseils supplémentaires

  • Journalisez les erreurs avec un horodatage pour faciliter le débogage.
  • Utilisez des opérations asynchrones pour mieux gérer la concurrence.
  • Implémentez des disjoncteurs pour les systèmes de production.
  • Mettez les réponses en cache lorsque c’est pertinent afin de réduire les appels à l’API.

Inférence