Guides essentiels
Streaming
Implémenter des réponses en streaming en temps réel
Vue d’ensemble
Le streaming renvoie la sortie progressivement. Utilisez Responses si le modèle déclare openai_responses dans accepted_request_formats ; les clients Chat Completions existants peuvent conserver leur format.
Recommandé : streaming Responses
curl https://api.tokenlab.sh/v1/responses \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-terra",
"input": "Write a short poem.",
"stream": true
}'Limites de streaming Responses et Gemini
Responses SSE conserve les noms, l’ordre et les champs publics des événements. Une coupure après réception de contenu laisse une réponse incomplète, sans redémarrage automatique.
Responses WebSocket utilise response.create et diffuse toujours en streaming ; background et response.cancel ne sont pas pris en charge. Une connexion traite une réponse à la fois et dure jusqu’à 60 minutes. generate: false crée un ID de continuation sans sortie ni coût de modèle.
Gemini SSE renvoie des chunks natifs. Les événements intermédiaires peuvent omettre finishReason et le flux peut se terminer sans le marqueur Chat [DONE].
Streaming Chat Completions
Si votre framework attend encore des chunks SSE provenant de /v1/chat/completions, cela fonctionne également :
import os
from openai import OpenAI
with OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
) as client:
finish_reason = None
with client.chat.completions.create(
model="gpt-5.6-terra",
messages=[{"role": "user", "content": "Write a short poem."}],
stream=True,
stream_options={"include_usage": True},
) as stream:
for chunk in stream:
if not chunk.choices:
continue
choice = chunk.choices[0]
if choice.delta.content:
print(choice.delta.content, end="", flush=True)
if choice.finish_reason:
finish_reason = choice.finish_reason
if finish_reason != "stop":
raise RuntimeError(f"Stream ended without a complete text answer: {finish_reason}")Conditions de fin du stream
Conditions de fin typiques :
response.completedpour les streams de l’API Responsesfinish_reason: "stop"pour les streams Chat Completionsfinish_reason: "length"lorsqu’une limite de token est atteinte- événements d’appel d’outil/de fonction lorsque le modèle souhaite utiliser des outils
Modèle pour application web
Traitez le flux du SDK sur votre serveur. Le navigateur appelle votre propre backend authentifié ; la clé TokenLab reste dans son environnement. Transmettez les fragments de texte et annulez le flux amont si l’utilisateur arrête ou se déconnecte. Confiez le décodage SSE au SDK : un bloc réseau ne correspond pas forcément à un événement complet.