В случае ошибок LLMSTORE возвращает ответ JSON следующей формы:
HTTP-ответ будет иметь тот же код состояния, что и error.code, формирующая ошибку запроса, если:
  • Ваш первоначальный запрос недействителен.
  • У вашего API-ключа/учетной записи закончились кредиты
В противном случае возвращаемый статус ответа HTTP будет , и любая ошибка, возникшая во время выдачи выходных данных LLM, будет выдана в теле ответа или как событие данных SSE. Пример кода для вывода ошибок печати в JavaScript:

Коды ошибок

  • : неверный запрос (неверные или отсутствующие параметры, CORS)
  • : неверные учетные данные (истёк срок сеанса OAuth, отключен/недействителен ключ API)
  • : в вашей учетной записи или ключе API недостаточно средств. Добавьте больше кредитов и повторите запрос.
  • : запрещено (недостаточно разрешений, блокировка ограждения или флаг модерации)
  • : время ожидания вашего запроса истекло.
  • : ваша скорость ограничена.
  • : выбранная вами модель не работает или мы получили от нее неверный ответ.
  • : нет доступного поставщика модели, соответствующего вашим требованиям маршрутизации.

Заголовок Retry-After

Вкл. и Параметры ответов, LLMSTORE может включать стандартный HTTP-ответ. Retry-After заголовок ответа, указывающий, сколько секунд нужно подождать перед повторной попыткой.
OpenAI SDK, Anthropic SDK, Vercel AI SDK и LLMSTORE SDK уже учитывают этот заголовок для отсрочки. Если вы используете fetch напрямую, соблюдайте его перед повторной попыткой:

Ошибки модерации

Если ваш ввод был помечен, error.metadata будет содержать информацию о проблеме. Форма метаданных следующая:

Ошибки ограждения

По эндпоинтам вывода (/chat/completions, /responses, /messages), запрос может быть заблокирован до того, как он достигнет провайдера — например, фильтром контента или детектором промпт-инъекций. Когда это происходит, ответом является 403 с сообщением о причине блокировки:

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

LLMSTORE нормализует каждую ошибку восходящего провайдера в стабильный, типизированный error_type словарь, описанный в разделе Типизированные коды ошибок. То же самое Значения error_type описывают, что пошло не так, если провайдер Ошибка поступает в тело ответа, не связанное с потоковой передачей, или как событие SSE в середине потока. Коды нативных протоколов (Anthropic error.type, Responses error.code) предоставляются по принципу best effort и могут различаться в зависимости от формата — поле error_type — то, на которое стоит полагаться во всех форматах. Для chat completions ошибка провайдера, прерывающая генерацию, переносит error_type внутри error.metadata:
То же значение переносится в ошибках в середине потока, а также в форматах Anthropic и Responses — см. Форматы ошибок для каждой формы API для точного расположения полей в каждом формате.

Маскирование и необработанные сведения о поставщике

Когда запрос завершается неудачей с 500, message заменяется общей строкой, а provider_code опускается, но error_type все еще присутствует (server). Для ошибок, отличных от 500, собственный код ошибки вышестоящего провайдера отображается в error.metadata.provider_code, когда доступно.

Когда контент не генерируется

Иногда модель может не генерировать контент. Обычно это происходит, когда:
  • Модель прогревается с холодного старта
  • Система масштабируется для обработки большего количества запросов.
Время прогрева обычно составляет от нескольких секунд до нескольких минут, в зависимости от модели и поставщика. Если вы столкнулись с постоянными проблемами отсутствия контента, рассмотрите возможность реализации простого механизма повторной попытки или повторите попытку с другим поставщиком или моделью, которая имела более позднюю активность. Кроме того, имейте в виду, что в некоторых случаях вышестоящий поставщик может по-прежнему взимать с вас плату за быструю обработку, даже если контент не создается.

Форматы ошибок потоковой передачи

При использовании режима потоковой передачи (stream: true), ошибки обрабатываются по-разному в зависимости от того, когда они возникли:

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

Ошибки, возникающие перед отправкой токенов, соответствуют стандартному формату ошибок, указанному выше, с соответствующими кодами состояния HTTP. На этом этапе HTTP-ответ еще не зафиксирован, поэтому LLMSTORE может:
  • Возвращает правильный статус ошибки HTTP (4xx/5xx). — повторная попытка с использованием эндпоинта другого поставщика в автоматическом режиме, если резервная маршрутизация включено
  • Применяйте ограничение скорости или проверку подлинности перед началом любой работы.
Вы увидите ошибки перед потоковой передачей из-за таких проблем, как неверные ключи API, неверные запросы или когда все доступные эндпоинты поставщика исчерпаны до начала потоковой передачи.

Ошибки среднего потока

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

Введённые коды ошибок

Когда ошибка провайдера достигает вашего приложения, LLMSTORE помечает ее тегом канонический Строка error_type — как в теле ответа, не связанного с потоковой передачей, так и в о промежуточных мероприятиях SSE. Используйте это значение, а не только код состояния HTTP, чтобы программно различать категории ошибок. Он стабилен во всех трех Оболочки API, даже если код собственного протокола содержит потери. Где появляется error_type, зависит от формы API и пути:
  • Chat Completions: error.metadata.error_type — об ошибке в середине потока чанк (см. Ошибки в середине потока) и на непотоковом режиме ответ, когда ошибка провайдера прерывает генерацию.
  • Anthropic Messages: error.error_type на SSE Событие error и конверт ошибки отсутствия потоковой передачи.
  • Ответы: верхний уровень error_type в случае неудачного ответа, как для потоковая передача Событие response.failed и непотоковое тело JSON.
Статус HTTP каждого error_type соответствует указан в таблицах ниже.

Токен и ограничения на длину

Аутентификация и авторизация

Ограничение скорости и доступность

Запросить проверку

Политика в отношении контента

Ошибки изображения

Общий

Форматы ошибок для каждой формы API

LLMSTORE предоставляет три оболочки API. Каждый из них преобразует одни и те же типы ошибок внутреннего поставщика в свой собственный формат передачи, как для непотоковых ответов, так и для внутрипотоковых ошибок. В каждом случае error_type – стабильное поле; Расположение проволоки зависит от кожи.

Chat Completions (/v1/chat/completions)

Ошибки Mid-stream отображаются в виде chat.completion.chunk с высшим уровнем error объект (форма показана выше). Поле error.metadata.error_type содержит введенный код. Для непотоковых запросов, в которых возникает ошибка поставщика, ошибка встраивается в окончательный ответ вместе с любым частичным содержимым:

Responses API (/v1/responses)

API Responses сопоставляет внутренние типы ошибок с набором кодов ошибок OpenAI Responses. Отображение более узкое — многие отдельные внутренние типы схлопываются в server_error — поэтому точная причина сохраняется в файле верхнего уровня. Поле error_type в ответе, за пределами родного error объект: И событие потокового терминала, и тело непотокового JSON несут канонический error_type на верхнем уровне объекта ответа. Например, ошибка аутентификации сворачивается в собственный server_error код, но сохраняется error_type: "authentication":
Ошибки потоковой передачи отображаются как один из трех типов событий SSE, каждый из которых оборачивает один и тот же объект ответа:
  1. response.failed — терминальное событие, когда ответ не может быть завершен:
  2. response.error — ошибка при формировании ответа:
  3. error — событие простой ошибки (соответствует поведению исходного OpenAI):

Преобразования кодов ошибок

Определенные ошибки токена/длины преобразуются в успешные завершения, а не в неудачи: Это позволяет корректно обрабатывать ошибки, связанные с ограничениями, не рассматривая их как сбои.

Anthropic Messages (/v1/messages)

Оболочка Anthropic Messages сопоставляет внутренние типы со строками типов ошибок Anthropic: Потому что родной error.type имеет потери (многие внутренние типы сворачиваются в api_error), канонический error_type добавляется внутри error объект рядом с ним. Это справедливо как для конверта непотоковой ошибки, так и для SSE в промежуточном потоке. error событий. Конверт ошибки отсутствия потоковой передачи:
Ошибки Mid-stream выдаются как SSE error событие такой же формы:

Отладка

LLMSTORE предоставляет Опция debug , которая позволяет вам проверить точное тело запроса, отправленное вышестоящему поставщику. Это работает как с API завершения чата (/v1/chat/completions) и Responses API (/v1/responses). Полезно для понимания того, как LLMSTORE преобразует параметры вашего запроса для разных поставщиков.

Форма опции отладки

Параметр отладки представляет собой объект следующей формы:

Использование

Чтобы включить отладочный вывод, включите Параметр debug в вашем запросе:

Chat Completions

Responses API

Формат ответа отладчика

Chat Completions

Когда debug.echo_upstream_body установлено на true, LLMSTORE отправляет фрагмент отладки в качестве первого фрагмента в потоковом ответе. Этот чанк имеет пустой массив choices и включает в себя Поле debug с преобразованным телом запроса:

Responses API

В Responses API отладочные данные поступают в виде response.debug Мероприятие SSE:

Важные примечания

Только потоковая передачаОпция отладки работает только в потоковом режиме (stream: true). Непотоковые запросы будут игнорировать параметр отладки.
Не для производстваФлаг отладки не следует использовать в производственных средах. Он предназначен только для целей разработки и отладки, поскольку потенциально может возвращать конфиденциальную информацию, включенную в запрос, которая не должна была быть видна где-либо еще.

Варианты использования

Отладочный вывод особенно полезен для:
  1. Понимание преобразований параметров. Узнайте, как LLMSTORE сопоставляет ваши параметры с форматами, специфичными для поставщика (например, как max_tokens установлен, как temperature обрабатывается).
  2. Проверка форматирования сообщений: проверьте, как LLMSTORE объединяет и форматирует ваши сообщения для разных поставщиков (например, как объединяются системные сообщения, как объединяются пользовательские сообщения).
  3. Проверка примененных значений по умолчанию: посмотрите, какие значения по умолчанию применяются LLMSTORE, когда параметры не указаны в вашем запросе.
  4. Отладка резервных провайдеров: при использовании резервных провайдеров блок отладки будет отправлен для каждого провайдера, который пытался использовать, что позволит вам увидеть, какие провайдеры были опробованы и какие параметры были отправлены каждому.

Конфиденциальность и редактирование

LLMSTORE приложит все усилия, чтобы автоматически удалять потенциально конфиденциальные или зашумленные данные из выходных данных отладки. Помните, что опция отладки не предназначена для рабочей среды.