Streaming

Server-Sent Events, Timeouts und Fallback-Verhalten.

Als Markdown anzeigen

Setzen Sie stream: true bei einer Chat-Completion, um Tokens zu empfangen, während sie generiert werden — über Server-Sent Events (text/event-stream).

Wire-Format

Jedes Event ist eine data:-Zeile mit einem JSON-Chunk, abgeschlossen durch einen Sentinel:

data: {"id":"chatcmpl-…","choices":[{"delta":{"content":"Hal"}}]}
data: {"id":"chatcmpl-…","choices":[{"delta":{"content":"lo!"}}]}
data: {"id":"chatcmpl-…","choices":[],"usage":{"prompt_tokens":3,"completion_tokens":8,"total_tokens":11}}
data: [DONE]

Kontinent injiziert stream_options: {"include_usage": true} upstream, sodass der letzte Chunk vor [DONE] das Feld usage trägt. Lässt ein Anbieter es weg, schätzt das Gateway die Tokens (abgerechnet wird trotzdem).

1const stream = await client.chat.completions.create({
2 model: "mistral/mistral-small-latest",
3 messages: [{ role: "user", content: "Write a haiku about Europe." }],
4 stream: true,
5});
6
7for await (const chunk of stream) {
8 process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
9}

Timeouts

  • Streams haben keine übergreifende Frist.
  • Ein inaktiver Upstream wird nach 90 s Stille abgebrochen. Die Chunks des Anbieters wirken als Keep-Alives.
  • Hinter dem Load Balancer beträgt das Idle-Timeout 120 s.

Fallback und Fehler

Definiert das Modell Fallback-Anbieter, werden Upstream-Fehler (429/5xx/Verbindungsfehler) nur vor dem ersten gestreamten Byte beim nächsten Anbieter erneut versucht. Sobald das erste Byte draußen ist, taucht ein Fehler mitten im Stream als abgebrochene Verbindung auf — behandeln Sie einen abgeschnittenen Stream sauber.

Ein Verbindungsabbruch mitten im Stream berechnet dennoch die bis dahin generierten Tokens. Das Abbrechen einer Anfrage macht sie nicht kostenlos.