Скилл: потоковые ответы
Сборка SSE и проверка завершения
Чтение SSE
Событие может занимать несколько строк и приходить частями на уровне HTTP. Не считай каждую сетевую порцию готовым JSON
Обрабатывай пустые строки, комментарии SSE и сообщения без текста. Ошибка может прийти после HTTP 200
Форматы
| Формат | Данные | Завершение |
|---|---|---|
| Chat Completions | choices[].delta | Причина завершения и терминальный маркер потока |
| Messages | content_block_delta и события сообщения | message_stop |
| GenerateContent | Части кандидатов | Причина завершения кандидата и окончание потока |
| Responses | Типизированные события | Терминальное событие ответа либо совместимая схема маршрута |
Пустой choices допустим для события со статистикой. Не обращайся к choices[0] без проверки
Сборка
Объединяй фрагменты текста, а аргументы tools собирай отдельно по индексу и ID вызова. Не выполняй функцию до получения полных аргументов
usage может появиться до последнего события. Сохраняй последний доступный полный счётчик, не суммируй повторяющиеся накопительные значения
Сбой
EOF без ожидаемого завершения считай неполным результатом. Сохрани полученные данные как частичные и не продолжай действия с внешними последствиями
Полные примеры и различия протоколов: потоковые ответы