Скилл: потоковые ответы
Сборка 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 без ожидаемого завершения считай неполным результатом. Сохрани полученные данные как частичные и не продолжай действия с внешними последствиями
Полные примеры и различия протоколов: потоковые ответы