Streaming

Le streaming renvoie la sortie générée progressivement au lieu d’attendre la réponse complète. GetRouter prend en charge les champs de requête de streaming sur les endpoints Chat Completions et Responses lorsque le modèle et le canal sélectionnés le permettent.

Chat Completions avec cURL

Définissez stream sur true et utilisez curl -N pour désactiver la mise en mémoire tampon côté client :

curl -N https://getrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "stream": true,
    "messages": [
      {"role": "user", "content": "Write a four-line poem."}
    ]
  }'

Chat Completions diffuse des événements Server-Sent Events. Les fragments de texte apparaissent sous :

choices[0].delta.content

Le flux se termine normalement par un événement terminal tel que [DONE].

Chat Completions avec Python

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://getrouter.ai/v1",
)

stream = client.chat.completions.create(
    model="MODEL_ID",
    stream=True,
    messages=[{"role": "user", "content": "Write a four-line poem."}],
)

for chunk in stream:
    text = chunk.choices[0].delta.content
    if text:
        print(text, end="", flush=True)

Streaming de l’API Responses

curl -N https://getrouter.ai/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "stream": true,
    "input": "List three benefits of streaming APIs."
  }'

Le streaming de Responses utilise des objets d’événement de l’API Responses plutôt que les fragments choices[].delta de Chat Completions. Analysez les événements selon leur type et ne réutilisez pas un analyseur conçu uniquement pour Chat Completions.

stream_options

Le schéma Chat Completions accepte stream_options, mais sa prise en charge dépend du canal du modèle sélectionné. Si une option compatible avec le service en amont est rejetée, supprimez-la et réessayez uniquement avec stream: true.

Appels d’outils pendant le streaming

Les arguments d’un appel d’outil peuvent arriver dans plusieurs fragments. Accumulez les deltas de l’appel d’outil par index ou par ID d’appel d’outil avant d’analyser et d’exécuter les arguments complets.

Gérer les déconnexions

Une connexion de streaming peut se terminer avant l’événement terminal en raison d’un délai d’expiration du client ou du proxy, d’une interruption réseau ou d’une erreur du service en amont.

Votre client doit :

  • considérer l’absence d’événement terminal comme une réponse incomplète
  • conserver le texte déjà reçu lorsque cela est approprié
  • éviter de relancer aveuglément des actions d’outils non idempotentes
  • définir des délais d’expiration suffisamment longs pour le modèle sélectionné
  • journaliser l’ID de la requête et l’erreur sans journaliser la clé API
Warning

Ne relancez pas automatiquement un flux de travail d’agent ou d’outil partiellement terminé, sauf si votre application peut empêcher les effets de bord en double.

Résolution des problèmes

La sortie arrive en une seule fois

Un client, un proxy inverse ou un middleware met peut-être les données SSE en mémoire tampon. Testez directement avec curl -N avant de déboguer votre interface utilisateur.

La connexion se ferme immédiatement

Vérifiez que le modèle prend en charge le streaming sur l’endpoint sélectionné. Examinez également l’événement d’erreur ou le corps de la réponse HTTP avant de conclure à une défaillance réseau.

Les informations d’utilisation sont absentes des fragments

La communication des informations d’utilisation pendant le streaming dépend du protocole, des options de la requête et du canal du modèle. N’exigez pas leur présence dans chaque fragment.

Étapes suivantes