Aller au contenu principal

GET et DELETE : gérer les réponses

Au-delà de la création

La Responses API ne se limite pas à la création de réponses. Deux endpoints complémentaires vous permettent de récupérer et de supprimer les réponses stockées. Ces opérations sont essentielles pour construire des applications robustes avec gestion d’historique.

GET /v1/responses/{id}

Récupérer une réponse

curl https://api.x.ai/v1/responses/resp-abc123def456 \
  -H "Authorization: Bearer $XAI_API_KEY"

L’API retourne exactement le même objet JSON que lors de la création :

{
  "id": "resp-abc123def456",
  "object": "response",
  "created_at": 1712000000,
  "status": "completed",
  "model": "grok-4.20-reasoning",
  "output": [...],
  "usage": {...}
}

Cas d’usage pratiques

Reprise de conversation : votre application stocke le dernier response_id dans la session utilisateur. À la reconnexion, récupérez la réponse pour afficher le contexte précédent.

# L'utilisateur revient après une pause
last_response_id = get_from_session(user_id)
previous = client.responses.retrieve(last_response_id)

# Afficher le dernier échange
print(f"Dernière réponse : {previous.output[0].content[0].text[:200]}...")

# Continuer la conversation
new_response = client.responses.create(
    model="grok-4.20-reasoning",
    input="On en était où ?",
    previous_response_id=last_response_id
)

Audit des coûts : parcourez vos réponses stockées pour analyser la consommation par utilisateur ou par fonctionnalité.

response = client.responses.retrieve("resp-abc123")
cost_usd = response.usage.cost_in_nano_usd / 1e9
input_tokens = response.usage.input_tokens
output_tokens = response.usage.output_tokens
print(f"Coût : ${cost_usd:.6f} | In: {input_tokens} | Out: {output_tokens}")

Gestion des erreurs

Si la réponse n’existe pas (supprimée ou expirée), l’API retourne une erreur 404 :

{
  "error": {
    "message": "Response not found",
    "type": "not_found_error"
  }
}

Gérez ce cas dans votre code :

try:
    response = client.responses.retrieve("resp-expired123")
except Exception as e:
    print(f"Réponse introuvable : {e}")
    # Démarrer une nouvelle conversation

DELETE /v1/responses/{id}

Supprimer une réponse

curl -X DELETE https://api.x.ai/v1/responses/resp-abc123def456 \
  -H "Authorization: Bearer $XAI_API_KEY"

La suppression retourne un statut 200 en cas de succès. L’opération est irréversible.

Impact sur les conversations chaînées

Quand vous supprimez une réponse qui est référencée par d’autres via previous_response_id, le contexte de cette réponse disparaît de la chaîne. Les réponses suivantes ne sont pas supprimées, mais elles perdent l’accès au contexte antérieur.

resp-1 → resp-2 → resp-3 → resp-4
         ↑ supprimé

Si vous supprimez resp-2, resp-3 et resp-4 existent toujours mais le contexte de resp-1 et resp-2 n’est plus accessible pour de nouvelles requêtes chaînées.

Nettoyage automatisé

Pour les applications en production, implémentez un nettoyage périodique :

import datetime

def cleanup_old_responses(response_ids, max_age_days=7):
    for rid in response_ids:
        try:
            resp = client.responses.retrieve(rid)
            age = datetime.datetime.now().timestamp() - resp.created_at
            if age > max_age_days * 86400:
                client.responses.delete(rid)
                print(f"Supprimé : {rid}")
        except Exception:
            pass  # Déjà supprimé ou expiré

Bonnes pratiques

  • Stockez les IDs : conservez les response_id dans votre base de données avec les métadonnées de la conversation
  • Nettoyez régulièrement : n’attendez pas l’expiration automatique à 30 jours pour les données sensibles
  • Gérez les 404 : une réponse peut disparaître entre deux requêtes (expiration, suppression manuelle)
  • Documentez vos chaînes : pour le débogage, tracez les liens previous_response_id entre vos réponses

Points clés à retenir

  • GET /v1/responses/{id} récupère une réponse avec tout son contenu et ses métadonnées
  • DELETE /v1/responses/{id} supprime définitivement une réponse — opération irréversible
  • La suppression d’une réponse intermédiaire casse le contexte de la chaîne de conversation
  • Gérez les erreurs 404 : les réponses expirent automatiquement après 30 jours
  • Conservez les response_id dans votre propre base pour la traçabilité