Streaming des réponses avec Velqa — SSE en OpenAI-compatible
Velqa peut renvoyer les réponses de chat en flux (streaming) : les tokens arrivent au fur et à mesure de leur génération, via Server-Sent Events (SSE). C'est le comportement idéal pour une interface de type chat où l'on veut afficher le texte progressivement. Il suffit d'ajouter "stream": true à votre requête /v1/chat/completions.
Activer le streaming (curl)
curl https://api.velqa.dev/v1/chat/completions \
-H "Authorization: Bearer sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k2.6",
"messages": [{"role": "user", "content": "Écris un haïku sur Casablanca."}],
"stream": true
}'Format des chunks SSE
La réponse est un flux de lignes data:. Chaque chunk est un objet JSON dont le texte incrémental se trouve dans choices[0].delta.content. Le flux se termine par une ligne data: [DONE].
data: {"choices":[{"delta":{"content":"Vagues"}}]}
data: {"choices":[{"delta":{"content":" grises"}}]}
data: {"choices":[{"delta":{"content":" au"}}]}
data: [DONE]Streaming en Python (SDK openai)
Avec le SDK OpenAI, passez stream=True et itérez sur les chunks :
from openai import OpenAI
client = OpenAI(base_url="https://api.velqa.dev/v1", api_key="sk-...")
stream = client.chat.completions.create(
model="kimi-k2.6",
messages=[{"role": "user", "content": "Écris un haïku sur Casablanca."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()À savoir
- Certains chunks ont un
deltavide (par exemple le tout premier, qui porte le rôle) — testez toujours quedelta.contentn'est pasNoneavant de l'afficher. - Le streaming est compatible avec le tool calling : les
tool_callsarrivent aussi par fragments dansdelta. - L'usage/facturation reste identique à une requête non-streamée.
Voir aussi : aperçu du chat.
