Streaming

Come arriva una completion in streaming sul filo, cosa contiene l'ultimo frame e cosa succede quando un client si disconnette.

Il trasporto

Imposta stream: true e la risposta è text/event-stream: un oggetto JSON per riga data:, ciascuna seguita da una riga vuota. Il buffering è disabilitato così un proxy non trattiene i frame.

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

I frame

Il primo frame contiene il ruolo assistant, poi un frame per ogni delta, poi un frame con finish_reason e il blocco di routing, infine esattamente un terminatore. Un client che segue il formato legge il terminatore e si ferma; non deve trattare un terminatore mancante come una risposta completa.

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]

Il blocco di routing viaggia con l'ultimo frame

Il frame finale contiene lo stesso oggetto llmeu restituito dalla risposta non in streaming: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention e la stima dei costi. In modalità streaming l'utilizzo è noto solo alla fine, per questo il blocco viaggia con l'ultimo frame invece che con il primo.

Disconnessioni del client

Chiudere la connessione interrompe il lavoro e scrive la traccia con ciò che è stato effettivamente prodotto. Una richiesta annullata è comunque una chiamata avvenuta, quindi appare nell'utilizzo; non viene registrata come completion completata.

Cosa non può essere trasmesso in streaming

Gli embedding e l'API della piattaforma sono risposte JSON singole. stream: true su una route non in streaming è un errore di validazione, non un fallback silenzioso a un frame.