Guides
Streaming
Mettez stream: true et la réponse arrive mot par mot, sous forme de server-sent events d’OpenAI. Demandez l’usage et le dernier morceau indique ce que l’appel a coûté.
Vérifié le 26 octobre 2026
Recevoir une réponse en continu
import os
from openai import OpenAI
client = OpenAI(
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
stream = client.chat.completions.create(
model="deepseek-v4.1-flash-uncensored",
messages=[{"role": "user", "content": "Tell me a story in three lines."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
if chunk.usage:
print("\ncredits:", chunk.usage.model_extra.get("nokeep_credits"))Ce qui arrive
data: {"choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}
data: {"choices":[{"index":0,"delta":{"content":"The"}}]}
data: {"choices":[{"index":0,"delta":{"content":" lighthouse"}}]}
…
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"choices":[],"usage":{"prompt_tokens":18,"completion_tokens":61,"nokeep_credits":0}}
data: [DONE]- Les mots arrivent dans
delta.content. Avec la réflexion activée, la réflexion arrive en premier, dansdelta.reasoning_content. - Les appels d’outils arrivent dans
delta.tool_calls, leurs arguments en morceaux, comme les envoie OpenAI. - Avec
stream_options.include_usage, un dernier morceau à listechoicesvide porteusage, y comprisnokeep_credits, ce que l’appel a coûté. - Le flux se termine par
data: [DONE].
Arrêter une réponse tôt
Fermez la connexion et le modèle cesse d’écrire. Vous payez ce qui a été envoyé avant l’arrêt, et rien après. Dans les SDK, sortez de la boucle et fermez le flux ; dans une application, appuyez sur son bouton Arrêter.
for chunk in stream:
text = chunk.choices[0].delta.content if chunk.choices else ""
if text and "THE END" in text:
stream.close() # the model stops here, and so does the bill
breakQuand le modèle s’arrête en premier
Si le modèle termine un flux avant la fin, le dernier événement avant [DONE] est une erreur au format d’OpenAI, avec le code stream_cut. Ce qu’il a écrit est facturé, rien de plus. Relancez, ou continuez à partir de ce qui est arrivé.
data: {"error":{"type":"api_error","code":"stream_cut","message":"The model stopped before it finished. What it wrote is billed, nothing more."}}
data: [DONE]Questions
Le streaming coûte-t-il plus cher ?
Non. Une réponse en streaming coûte les mêmes jetons qu’une réponse complète.
Pourquoi n’y a-t-il pas d’en-tête x-nokeep-credits sur un flux ?
Les en-têtes partent avant le premier mot, quand le coût n’est pas encore connu. Demandez l’usage et lisez nokeep_credits dans le dernier morceau.