Streaming ИИ-API: SSE и timeout
Разберите события Chat и Responses, SSE parser, первый полезный результат, timeout по фазам и диагностику отмены 499.
Streaming ИИ-API передаёт события по мере генерации, не дожидаясь полного тела ответа. Это улучшает воспринимаемую скорость, но не обязательно уменьшает задержку модели и требует от клиента правильного разбора протокола.
Chat Completions отправляет фрагменты completion, Responses — типизированные события. Клиент может получить HTTP 200 и ничего не показать, если ожидает другую структуру.
Начните без буферизации
curl -N -sS https://modelflare.dev/v1/responses \
-H "Authorization: Bearer $MODELFLARE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"YOUR_RESPONSES_MODEL","input":"Explain SSE.","stream":true}'
Сначала повторите запрос без streaming, чтобы отделить валидацию от parser. Используйте ID из раздела Модели и цены.
Считайте SSE протоколом
Server-Sent Events — это оформленные записи, а не произвольные куски JSON. Клиент должен отключить буферизацию в HTTP, proxy и UI, собирать частичные чтения, обрабатывать текст, reasoning, инструменты, завершение и ошибки, сохранять отмену и итоговое использование и закрываться после terminal event.
Измеряйте разные фазы
| Метрика | Значение |
|---|---|
| Соединение и аутентификация | Доступ к шлюзу и проверка ключа |
| Заголовки upstream | Выбранный маршрут начал отвечать |
| Первый полезный результат | Первое полезное событие текста, reasoning или tool |
| Первый видимый текст | Первый текст, который видит пользователь |
| Общее время | Завершение, ошибка или отмена |
Вызов инструмента может быть полезным до текста. Для эксплуатации важнее первый полезный результат, для UX — также первый видимый текст.
Timeout по фазам
Разделяйте timeout соединения, заголовков или первого результата, простоя потока и общий deadline. Reasoning и инструменты могут дольше не давать видимый текст. Настраивайте бюджеты по реальным нагрузкам, а не одним коротким глобальным значением.
Если клиент, браузер или proxy закрывается раньше, Modelflare может записать 499. Это доказывает отмену downstream, но не сбой модели или канала. Сравните Abort, proxy timeout, первый результат, модель, группу и время.
Если текста нет
- Повторите с "stream": false.
- Подтвердите поддержку endpoint моделью.
- Сохраните сырые события до UI.
- Ищите tool или reasoning без текста.
- Исключите промежуточную буферизацию.
- Проверьте terminal event в parser.
- Сравните статус, время и отмену.
Если обычный запрос работает и события приходят, ошибка обычно в разборе или отображении. Иначе используйте руководство по ошибкам. Выбор формата: Responses API или Chat Completions.