Streaming

Wie eine gestreamte Completion über die Leitung kommt, was der letzte Frame trägt und was passiert, wenn ein Client die Verbindung schließt.

Der Transport

Mit stream: true ist die Antwort text/event-stream: ein JSON-Objekt pro data:-Zeile, jeweils gefolgt von einer leeren Zeile. Pufferung ist abgeschaltet, damit ein Proxy keine Frames zurückhält.

HTTP/1.1 200 OK
content-type: text/event-stream; charset=utf-8
cache-control: no-cache, no-transform
connection: keep-alive

Die Frames

Der erste Frame trägt die Rolle assistant, dann folgt ein Frame pro Delta, dann ein Frame mit finish_reason und dem Routing-Block, dann genau ein Abschluss. Ein Client, der das Format befolgt, liest den Abschluss und hört auf; ein fehlender Abschluss darf nicht als vollständige Antwort gelten.

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Hallo"},"finish_reason":null}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"llmeu":{…}}

data: [DONE]

Der Routing-Block reist mit dem letzten Frame

Der letzte Frame trägt dasselbe llmeu-Objekt, das die nicht streamende Antwort zurückgibt: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention und die Kostenschätzung. Im Streaming ist der Verbrauch erst am Ende bekannt, deshalb reist der Block mit dem letzten Frame statt mit dem ersten.

Verbindungsabbruch durch den Client

Das Schließen der Verbindung beendet die Arbeit und schreibt den Trace mit dem, was tatsächlich entstanden ist. Eine abgebrochene Anfrage ist trotzdem ein Aufruf, der stattgefunden hat, und erscheint im Verbrauch; als abgeschlossene Completion wird sie nicht erfasst.

Was sich nicht streamen lässt

Embeddings und die Plattform-API sind einzelne JSON-Antworten. stream: true auf einer nicht streamenden Route ist ein Validierungsfehler und kein stiller Rückfall auf einen einzelnen Frame.