Streaming SSE
En passant stream: true au body de POST /v1/chat/completions, la réponse est délivrée en flux Server-Sent Events au lieu d'un JSON unique. Idéal pour afficher le texte au fil de la génération.
Principe#principe
La gateway proxifie le stream upstream en temps réel, en réécrivant chaque chunk pour normaliser l'identifiant id et le champ model exposé. Aucun buffering intermédiaire — les premiers tokens arrivent en quelques centaines de millisecondes.
Format SSE#format
Chaque chunk suit la convention OpenAI : data: {...JSON...}\n\n. Le flux se termine par data: [DONE]. Le dernier chunk JSON contient le champ usage (compteurs de tokens) et finish_reason.
data: {"id":"3gk-cmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"}}]}
data: {"id":"3gk-cmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Bonjour"}}]}
data: {"id":"3gk-cmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" !"},"finish_reason":"stop"}],"usage":{"prompt_tokens":8,"completion_tokens":2,"total_tokens":10}}
data: [DONE]Headers émis#headers
Content-Type: text/event-streamCache-Control: no-cacheConnection: keep-aliveX-Accel-Buffering: no— désactive le buffering Nginx.
Exemple Python#exemple-python
from openai import OpenAI client = OpenAI( base_url="https://ai.3gks.cloud/v1", api_key="sk-3gk-7XQp4kL8…", ) stream = client.chat.completions.create( model="3gk-llm", messages=[{"role": "user", "content": "Compte de 1 à 10."}], stream=True, ) for chunk in stream: delta = chunk.choices[0].delta.content or "" print(delta, end="", flush=True)
Exemple cURL#exemple-curl
curl -N https://ai.3gks.cloud/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-3gk-7XQp4kL8…" \ -d '{ "model": "3gk-llm", "messages": [{"role": "user", "content": "Bonjour"}], "stream": true }'
Tokens & usage#usage
Le bloc usage (prompt_tokens / completion_tokens / total_tokens) est inclus dans le dernier chunk de données avant data: [DONE]. Si votre code ferme la connexion prématurément, vous perdrez ces compteurs côté client (mais ils restent enregistrés côté gateway pour la facturation).
