Streaming

Kako streamana dovršenost stiže na žicu, što nosi posljednji okvir i što se događa kada se klijent prekine.

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 tako da proxy ne zadržava 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 asistenta, zatim jedan okvir po delti, zatim okvir s finish_reason i blokom rutiranja, zatim točno jedan terminator. Klijent koji slijedi format čita terminator i zaustavlja se; ne smije tretirati nedostajući terminator kao 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 ne-streaming 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, korištenje je poznato samo na kraju, zbog čega blok putuje s posljednjim okvirom, a ne s prvim.

Klijent se prekida

Zatvaranje veze zaustavlja rad i zapisuje trag s onim što je stvarno proizvedeno. Otkazani zahtjev je i dalje poziv koji se dogodio, pa se pojavljuje u korištenju; 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 tiho vraćanje na jedan okvir.