Aller au contenu principal
Velqa

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 delta vide (par exemple le tout premier, qui porte le rôle) — testez toujours que delta.content n'est pas None avant de l'afficher.
  • Le streaming est compatible avec le tool calling : les tool_calls arrivent aussi par fragments dans delta.
  • L'usage/facturation reste identique à une requête non-streamée.

Voir aussi : aperçu du chat.