Streaming

Hoe een gestreamde completion over de lijn aankomt, wat het laatste frame bevat, en wat er gebeurt wanneer een client de verbinding verbreekt.

Het transport

Zet stream: true en het antwoord is text/event-stream: één JSON-object per data:-regel, elk gevolgd door een lege regel. Buffering is uitgeschakeld, zodat een proxy frames niet tegenhoudt.

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

De frames

Het eerste frame bevat de assistant-rol, dan één frame per delta, dan een frame met finish_reason en het routeringsblok, dan precies één terminator. Een client die het formaat volgt, leest de terminator en stopt; een ontbrekende terminator mag niet als een volledig antwoord worden beschouwd.

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]

Het routeringsblok reist mee met het laatste frame

Het laatste frame bevat hetzelfde llmeu-object dat de niet-streamende respons retourneert: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention en de kostenraming. In streamingmodus is het gebruik pas aan het einde bekend, daarom reist het blok mee met het laatste frame en niet met het eerste.

Verbroken clientverbindingen

Het sluiten van de verbinding stopt het werk en schrijft de trace met wat daadwerkelijk is geproduceerd. Een geannuleerd verzoek is nog steeds een aanroep die heeft plaatsgevonden, dus het verschijnt in het gebruik; het wordt niet geregistreerd als een voltooide completion.

Wat niet kan worden gestreamd

Embeddings en de platform-API zijn enkele JSON-responses. stream: true op een niet-streamende route is een validatiefout, geen stille terugval naar één frame.