API LLMSTORE позволяет осуществлять потоковую передачу ответов от любой модели. Это полезно для создания интерфейсов чата или других приложений, где пользовательский интерфейс должен обновляться по мере того, как модель генерирует ответ. Чтобы включить потоковую передачу, вы можете установить stream параметр для true в вашем запросе. Затем модель будет передавать ответ клиенту частями, а не возвращать весь ответ сразу. Вот пример того, как передать ответ и обработать его:

Дополнительная информация

Для потоков SSE (события, отправленные сервером) LLMSTORE иногда отправляет комментарии, чтобы предотвратить таймауты соединения. Эти комментарии выглядят так:
Полезную нагрузку комментариев можно безопасно игнорировать в соответствии с спецификациями SSE. Однако вы можете использовать его для улучшения UX по мере необходимости, например. показывая индикатор динамической загрузки.
Если вы разбираете поток вручную, пропускайте строки, начинающиеся с :, до вызова JSON.parse. Передача строки комментария (например : PROCESSING) в JSON.parse выбрасывает исключение, и без обработки оно сломает цикл чтения потока. Примеры выше уже учитывают это.
Парсер, соответствующий спецификации, например eventsource-parser обрабатывает многострочные комментарии data: полей и буферизация для вас:
eventsource-parser
Синтаксический анализатор обрабатывает только кадрирование SSE — ошибки, возникающие в середине поколения, по-прежнему поступают как обычно. data: мероприятия с error поле. См. раздел «Обработка ошибок во время потоковой передачи».](#handling-errors-during-streaming) ниже. Идентификатор поколения возвращается в X-Generation-Id заголовок ответа для всех эндпоинтов (завершения чата, завершения, ответы и сообщения), который может быть полезен для отладки и корреляции запросов. Некоторые реализации клиента SSE могут не анализировать полезную нагрузку в соответствии со спецификацией, что приводит к необнаруженной ошибке при JSON.stringify полезные данные, отличные от JSON. Мы рекомендуем следующих клиентов:

Отмена трансляции

Запросы потоковой передачи можно отменить, прервав соединение. Для поддерживаемых поставщиков это немедленно прекращает обработку модели и выставление счетов.
Поддерживается
  • OpenAI, Azure, Anthropic
  • Фейерверк, Мансер, Рекурсия
  • AnyScale, Lepton, OctoAI
  • Новита, ДипИнфра, Вместе
  • Когерентный, Гиперболический, Инферматический
  • Птичий, XAI, Cloudflare
  • SFCompute, Девятнадцать, Liquid
  • Friendli, Chutes, DeepSeek
В настоящее время не поддерживается
  • AWS Bedrock, Groq, Modal
  • Google, Google AI Studio, Minimax
  • HuggingFace, Копирование, Недоумение
  • Мистраль, АИ21, Бесперый
  • Линн, Лямбда, Отражение
  • SambaNova, Перегиб, ZeroOneAI
  • AionLabs, Alibaba, Nebius
  • Кластер, Таргон, InferenceNet
Чтобы реализовать отмену потока:
Отмена работает только для запросов потоковой передачи от поддерживаемых поставщиков. Для запросы, не связанные с потоковой передачей, или неподдерживаемые провайдеры, модель продолжит действовать. обработку, и вам будет выставлен счет за полный ответ.

Обработка ошибок во время потоковой передачи

LLMSTORE обрабатывает ошибки по-разному в зависимости от того, когда они возникают в процессе потоковой передачи:

Ошибки перед отправкой токенов

Если ошибка возникает до того, как токены были переданы клиенту, LLMSTORE возвращает стандартный ответ об ошибке JSON с соответствующим кодом состояния HTTP. Это соответствует стандартному формату ошибок:
Общие коды состояния HTTP включают:
  • 400: неверный запрос (неверные параметры)
  • 401: Несанкционировано (неверный ключ API)
  • 402: Требуется оплата (недостаточно кредитов)
  • 429: слишком много запросов (скорость ограничена)
  • 502: Неверный шлюз (ошибка провайдера)
  • 503: услуга недоступна (нет доступных поставщиков)

Ошибки после отправки токенов (в середине потока)

Если ошибка возникает после того, как некоторые токены уже были переданы клиенту, LLMSTORE не может изменить код состояния HTTP (который уже равен 200 OK). Вместо этого ошибка отправляется как событие, отправленное сервером (SSE) с унифицированной структурой:
Ключевые характеристики ошибок среднего потока:
  • Ошибка появляется на верхнем уровне рядом со стандартными полями ответа (идентификатор, объект, созданный и т. д.).
  • А Массив choices включен в состав finish_reason: "error" , чтобы правильно завершить поток
  • Статус HTTP остается 200 OK, поскольку заголовки уже отправлены. — поток прекращается после этого события единой ошибки.

Примеры кода

Вот как правильно обрабатывать оба типа ошибок в реализации потоковой передачи:

Поведение, специфичное для API

Различные эндпоинты API могут обрабатывать ошибки потоковой передачи немного по-разному:
  • API завершения чата OpenAI: возвращает ErrorResponse напрямую, если ни один фрагмент не был обработан, или включает информацию об ошибке в ответ, если некоторые фрагменты были обработаны
  • Responses API OpenAI: может преобразовывать определенные коды ошибок (например, context_length_exceeded) в успешный ответ с помощью finish_reason: "length" вместо того, чтобы рассматривать их как ошибки