Стриминг (Server-Sent Events)
Token-by-token ответ для чатов и длинных генераций
Стриминг включается полем stream: true. Вместо одного JSON вы получаете поток событий data:в формате Server-Sent Events с Content-Type: text/event-stream.
Как включить
python
Формат чанка
Каждое событие начинается с data: и содержит JSON-delta:
json
- Первый чанк обычно содержит
delta.role, далее — толькоdelta.content. - Финальный чанк имеет
finish_reason(stop,length,tool_calls,content_filter). - Поток завершается специальной строкой
data: [DONE]. - Ошибки в середине потока приходят как
data: {"error": ...}.
usage в стриминге
Чтобы получить финальную статистику по токенам в стриме, добавьте stream_options: { "include_usage": true }. KodikRouter дошлёт последний чанк с полем usage.
json
Отмена стрима
Просто закройте HTTP-соединение / abort-контроллер. Счётчик токенов продолжится только до последнего отданного чанка.
typescript
CDN-прокси и буферизация
Если вы проксируете ответ шлюза через свой backend, убедитесь, что промежуточный слой (nginx, Cloudflare, API Gateway) не буферизует SSE. Нужны заголовки
X-Accel-Buffering: no и отключенная сжимающая буферизация.