Streaming

Kako streamani dovršetak stiže na žicu, što nosi posljednji okvir i što se događa kada se klijent odspoji.

Transport

Postavite stream: true i odgovor je text/event-stream: jedan JSON objekt po data: retku, svaki popraćen praznim retkom. Međuspremanje je onemogućeno kako proxy ne bi zadržavao okvire.

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

Okviri

Prvi okvir nosi ulogu assistant, zatim jedan okvir po delti, zatim okvir s finish_reason i blokom rutiranja, pa točno jedan terminator. Klijent koji slijedi format čita terminator i zaustavlja se; ne smije smatrati da je odsutni terminator potpun odgovor.

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]

Blok rutiranja putuje s posljednjim okvirom

Posljednji okvir nosi isti llmeu objekt koji vraća i ne-streamani odgovor: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention i procjenu troška. U streaming načinu upotreba je poznata samo na kraju, zbog čega blok putuje s posljednjim okvirom, a ne s prvim.

Odspajanje klijenta

Zatvaranje veze zaustavlja rad i zapisuje trag s onim što je stvarno proizvedeno. Otkazani zahtjev je još uvijek poziv koji se dogodio, pa se pojavljuje u upotrebi; ne bilježi se kao dovršeni dovršetak.

Što se ne može streamati

Embeddings i platform API su pojedinačni JSON odgovori. stream: true na ne-streaming ruti je greška validacije, a ne tihi povratak na jedan okvir.