Streaming
Hvordan en streamet completion ankommer over nettet, hvad den sidste frame bærer, og hvad der sker, når en klient afbryder forbindelsen.
Transporten
Sæt stream: true, og svaret er text/event-stream: ét JSON-objekt pr. data:-linje, hver efterfulgt af en tom linje. Buffering er deaktiveret, så en proxy ikke tilbageholder frames.
HTTP/1.1 200 OK
content-type: text/event-stream; charset=utf-8
cache-control: no-cache, no-transform
connection: keep-alive
Frames
Den første frame bærer assistentrollen, derefter én frame pr. delta, derefter en frame med finish_reason og routingblokken, derefter præcis én terminator. En klient, der følger formatet, læser terminatoren og stopper; den må ikke behandle en manglende terminator som et komplet svar.
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]
Routingblokken følger med den sidste frame
Den sidste frame bærer det samme llmeu-objekt, som det ikke-streamende svar returnerer: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention og omkostningsestimatet. I streamingtilstand kendes forbruget først til sidst, og derfor følger blokken med den sidste frame i stedet for den første.
Klientafbrydelser
Lukning af forbindelsen stopper arbejdet og skriver sporet med det, der faktisk blev produceret. En annulleret anmodning er stadig et kald, der skete, så den vises i forbruget; den registreres ikke som en fuldført completion.
Hvad der ikke kan streames
Embeddings og platform-API'en er enkelte JSON-svar. stream: true på en ikke-streamende rute er en valideringsfejl, ikke et lydløst fald tilbage til én frame.