Индекс документации
Получите полный индекс документации по адресу: https://api.vega.chat/docs/llms.txt
Используйте этот файл, чтобы узнать обо всех доступных страницах перед дальнейшим изучением.
Ошибки API ВЕГА и отладка
Для ошибок API ВЕГА возвращает JSON‑ответ со следующей структурой:
HTTP‑ответ будет иметь тот же статус‑код, что и error.code, образуя ошибку запроса, если:
- Ваш исходный запрос недействителен
- Ваш ключ/аккаунт VEGA исчерпал кредиты VEGA
Во всех остальных случаях возвращённый HTTP‑статус будет <code>{HTTPStatus.S200_OK}</code>, а любые ошибки, возникшие во время генерации LLM, будут переданы в теле ответа или как событие SSE.
Пример кода для вывода ошибок в JavaScript:
Коды ошибок
- {HTTPStatus.S400_Bad_Request}: Bad Request (неверные или отсутствующие параметры, CORS)
- {HTTPStatus.S401_Unauthorized}: Неверные учётные данные (сессия OAuth просрочена, отключён/неверный ключ VEGA)
- {HTTPStatus.S402_Payment_Required}: Ваш аккаунт или ключ VEGA имеет недостаточно кредитов VEGA. Добавьте кредиты VEGA и повторите запрос.
- {HTTPStatus.S403_Forbidden}: Запрещено (недостаточные права, блокировка guardrail или флаг модерации)
- {HTTPStatus.S408_Request_Timeout}: Время вашего запроса истекло
- {HTTPStatus.S429_Too_Many_Requests}: Вы попали под ограничение частоты запросов
- {HTTPStatus.S502_Bad_Gateway}: Выбранная модель недоступна или вернула неверный ответ
- {HTTPStatus.S503_Service_Unavailable}: Нет доступного провайдера моделей, удовлетворяющего вашим требованиям маршрутизации
Заголовок Retry-After
В ответах с <code>{HTTPStatus.S429_Too_Many_Requests}</code> и <code>{HTTPStatus.S503_Service_Unavailable}</code> API ВЕГА может включать стандартный заголовок HTTP Retry-After, указывающий количество секунд, которое следует подождать перед повторной попыткой.
SDK OpenAI, SDK Anthropic, Vercel AI SDK и SDK API ВЕГА уже учитывают этот заголовок при выполнении backoff. Если вы используете fetch напрямую, соблюдайте его перед повтором:
Ошибки модерации
Если ваш ввод был помечен, error.metadata будет содержать информацию о проблеме. Структура метаданных выглядит так:
Ошибки guardrail
На эндпоинтах инференса (/chat/completions, /responses, /messages) запрос может быть заблокирован до того, как достигнет провайдера — например, фильтром контента или детектором внедрения подсказки, настроенным через guardrails. В таком случае ответ имеет статус 403 с сообщением о причине блокировки. Тело ответа в формате API ВЕГА ниже применяется к /chat/completions и /responses; для /messages блок возвращается как оболочка Anthropic permission_error (см. раздел Anthropic Messages ниже), при этом openrouter_metadata сохраняется на верхнем уровне, если включён:
Если вы включаете router metadata через заголовок X-OpenRouter-Experimental-Metadata: enabled, в ответе 403 также присутствует полностью заполненный объект openrouter_metadata с контекстом маршрутизации и массивом pipeline, описывающим пройденные стадии guardrail:
Объект openrouter_metadata имеет ту же структуру, что и в успешных ответах — см. Pipeline Stages для полного списка типов стадий и полей.
Ошибки провайдера
API ВЕГА нормализует каждую ошибку upstream‑провайдера в стабильный типизированный словарь error_type, описанный в разделе Typed Error Codes. Те же значения error_type описывают, что пошло не так, независимо от того, приходит ли ошибка в теле не‑стримингового ответа или как SSE‑событие в середине потока. Нативные коды протокола (например, error.type Anthropic, error.code Responses) являются приближенными и могут различаться между форматами — error_type остаётся единственным надёжным полем.
Для Chat Completions ошибка провайдера, прерывающая генерацию, передаётся в error.metadata:
То же самое значение присутствует в ошибках середины потока и в «кожах» Anthropic и Responses — см. Skin-Specific Error Formats для точного расположения поля в каждом формате.
Маскирование и сырые детали провайдера
При ошибке 500 сообщение заменяется на общее, а provider_code и openrouter_metadata опускаются, однако error_type остаётся (server).
Для не‑500‑ошибок оригинальный код провайдера отображается в error.metadata.provider_code, если он доступен. При включённом контексте маршрутизации (какой провайдер был выбран, попытки fallback и т.д.) информация сохраняется в объекте openrouter_metadata — структура соответствует успешным ответам (только поля сводки маршрутизации; см. Pipeline Stages).
Когда не генерируется контент
Иногда модель может не сгенерировать ни одного токена. Это обычно происходит, когда:
- Модель «разогревается» после холодного старта
- Система масштабируется для обработки большего количества запросов
Время разогрева обычно составляет от нескольких секунд до нескольких минут, в зависимости от модели и провайдера.
Если вы постоянно сталкиваетесь с отсутствием контента, рассмотрите простую стратегию повторных попыток или попробуйте другой провайдер/модель с более активной историей.
В некоторых случаях провайдер всё равно списывает плату за обработку подсказки, даже если контент не был сгенерирован.
Форматы ошибок потоковой передачи
При использовании потокового режима (stream: true) ошибки обрабатываются по‑разному в зависимости от того, когда они происходят:
Ошибки до начала потока
Ошибки, возникшие до отправки первых токенов, следуют стандартному формату ошибки, описанному выше, с соответствующими HTTP‑статусами. На этом этапе HTTP‑ответ ещё не отправлен, поэтому API ВЕГА может:
- Вернуть корректный HTTP‑код ошибки (4xx/5xx)
- Тихо переключиться на другой endpoint провайдера, если включён fallback routing
- Применить проверки ограничения частоты или авторизации до начала работы
Вы увидите такие ошибки при неверных ключах API ВЕГА, некорректных запросах или когда все доступные endpoint провайдеров исчерпаны до начала потока.
Ошибки посередине потока
После отправки первого токена клиенту HTTP‑статус 200 OK и заголовки уже зафиксированы — изменить их нельзя. Если провайдер падает в этот момент, API ВЕГА не может тихо переключиться на другой провайдер, потому что часть контента уже доставлена. Ошибка должна быть передана в виде SSE‑события.
Распространённые причины ошибок посередине потока:
- Разрыв соединения с провайдером — соединение падает после частичной выдачи (проблемы сети, падение провайдера, таймаут балансировщика)
- Таймаут провайдера — модель перестаёт отвечать посередине генерации, истекает дедлайн чтения
- Превышение лимита токенов во время генерации — модель достигает
max_tokensили заполняет контекстное окно - Фильтр контента вывода — система модерации помечает сгенерированный текст после частичной передачи
- Перегрузка провайдера — upstream возвращает ошибку ограничения частоты или емкости после начала потока
Если ошибка происходит до отправки любого токена — даже при запросе с потоковой передачой — API ВЕГА всё ещё может автоматически переключиться на резервного провайдера. Ошибки посередине потока возникают только после того, как часть контента уже зафиксирована в вашем потоке, что делает переключение невозможным.
Ошибки посередине потока отправляются как Server‑Sent Events (SSE) с единой структурой, включающей как детали ошибки, так и завершение выбора:
Пример данных SSE:
Ключевые характеристики:
- Ошибка появляется на верхнем уровне вместе со стандартными полями ответа
error.metadata.error_typeсодержит типизированный код, который удобно использовать вswitch‑блоках — см. Typed Error Codes для полного списка- В массиве
choicesприсутствует объект сfinish_reason: "error"для корректного завершения потока - HTTP‑статус остаётся
200 OK, поскольку заголовки уже отданы - После этого события поток завершается
- Для ошибок 500‑го класса
error.messageзаменяется на общее сообщение, аprovider_codeопускается, чтобы не раскрывать детали upstream
Типизированные коды ошибок
Когда ошибка провайдера попадает в ваше приложение, API ВЕГА маркирует её каноническим строковым значением error_type — как в теле не‑стримингового ответа, так и в SSE‑событиях посередине потока. Используйте это значение, а не только HTTP‑статус, для программного различения категорий ошибок. Оно стабильно во всех трёх «кожах» API, даже когда нативный код протокола теряется.
Где появляется error_type, зависит от «кожи» и пути:
- Chat Completions:
error.metadata.error_type— в чанке ошибки посередине потока (см. Mid-Stream Errors) и в не‑стриминговом ответе, когда ошибка провайдера прерывает генерацию. - Anthropic Messages:
error.error_typeв SSE‑событииerrorи в не‑стриминговом конверте ошибки. - Responses: верхнеуровневое
error_typeв неудачном ответе, как в событииresponse.failed, так и в не‑стриминговом JSON‑теле.
Таблицы ниже показывают соответствие error_type и HTTP‑статусов.
Лимиты токенов и длины
Аутентификация и авторизация
Ограничения частоты и доступность
Проверка запросов
Политика контента
Ошибки изображений
Общие
Форматы ошибок, специфичные для «кожи»
API ВЕГА предоставляет три «кожи» API. Каждая переводит одинаковые внутренние типы ошибок провайдера в собственный формат передачи, как для не‑стриминговых ответов, так и для ошибок в потоке. Во всех случаях стабильным полем остаётся error_type; место его расположения зависит от «кожи».
Chat Completions (/api/v1/chat/completions)
Ошибки посередине потока появляются как chat.completion.chunk с объектом error верхнего уровня (см. выше). Поле error.metadata.error_type несёт типизированный код.
Для не‑стриминговых запросов, когда возникает ошибка провайдера, она включается в окончательный ответ рядом с любой частичной выдачей:
Responses API (/api/v1/responses)
Responses API отображает внутренние типы ошибок в набор кодов ошибок OpenAI Responses. Отображение более узкое — многие внутренние типы сводятся к server_error — поэтому точная причина сохраняется в верхнем уровне поля error_type ответа, за пределами собственного объекта error:
Как потоковое событие, так и не‑стриминговый JSON‑тело несут канонический error_type на верхнем уровне. Пример коллапса аутентификации:
Потоковые ошибки представлены одним из трёх типов SSE‑событий, каждый из которых оборачивает тот же объект ответа:
-
response.failed— терминальное событие, когда ответ не удалось завершить:json{ "type": "response.failed", "response": { "id": "resp_abc123", "status": "failed", "error": { "code": "server_error", "message": "Internal server error" }, "error_type": "server" } } -
response.error— ошибка во время генерации ответа:json{ "type": "response.error", "error": { "code": "rate_limit_exceeded", "message": "Rate limit exceeded" } } -
error— обычное событие ошибки (соответствует поведению OpenAI):json{ "type": "error", "error": { "code": "invalid_api_key", "message": "Invalid API key provided" } }
Преобразования кодов ошибок
Некоторые ошибки, связанные с токенами/длинами, преобразуются в успешные завершения вместо провалов:
Это позволяет мягко обрабатывать ошибки лимитов без пометки их как провалов.
Anthropic Messages (/api/v1/messages)
«Кожа» Anthropic Messages отображает внутренние типы в нативные строки ошибок Anthropic:
Поскольку error.type является потерянным (многие внутренние типы сводятся к api_error), канонический error_type добавляется внутри объекта error. Это применимо как к не‑стриминговому конверту ошибки, так и к SSE‑событию error.
Не‑стриминговый конверт ошибки (ошибки до Router, такие как аутентификация, имеют null request_id; пост‑Router ошибки несут ID генерации gen-…):
Ошибки посередине потока отправляются как SSE‑событие error той же структуры:
Отладка
API ВЕГА предоставляет параметр debug, позволяющий исследовать точное тело запроса, отправленное upstream‑провайдеру. Это работает как с Chat Completions API (/api/v1/chat/completions), так и с Responses API (/api/v1/responses). Полезно для понимания, как API ВЕГА трансформирует ваши параметры для разных провайдеров.
Структура параметра debug
Параметр debug — объект следующей структуры:
Использование
Чтобы включить вывод отладки, добавьте параметр debug в запрос:
Chat Completions
Responses API
Формат ответа отладки
Chat Completions
Когда debug.echo_upstream_body установлен в true, API ВЕГА отправляет отладочный чанк в качестве первого чанка в потоковом ответе. Этот чанк имеет пустой массив choices и включает поле debug с преобразованным телом запроса:
Responses API
В Responses API отладочные данные приходят как SSE‑событие response.debug:
Важные замечания
Только потоковая передача
Параметр
debugработает только в режиме потоковой передачи (stream: true). Для запросов без потока параметр игнорируется.
Не использовать в продакшене
Флаг отладки не следует применять в продуктивных окружениях. Он предназначен только для разработки и отладки, так как может раскрывать чувствительные данные, включённые в запрос, которые не должны быть видимы в иной части системы.
Сценарии использования
Отладочный вывод особенно полезен для:
- Понимания трансформаций параметров: увидеть, как API ВЕГА преобразует ваши параметры в формат, специфичный для провайдера (например, как задаётся
max_tokens, как обрабатываетсяtemperature). - Проверки форматирования сообщений: убедиться, как API ВЕГА объединяет и формирует сообщения для разных провайдеров (например, как склеиваются system‑сообщения, как объединяются пользовательские сообщения).
- Проверки применённых значений по умолчанию: увидеть, какие значения по умолчанию добавляет API ВЕГА, если они не указаны в запросе.
- Отладки fallback‑провайдеров: при использовании fallback‑маршрутизации отладочный чанк будет отправлен для каждого попытного провайдера, позволяя отследить, какие провайдеры были задействованы и какие параметры к ним отправлялись.
Конфиденциальность и редактирование
API ВЕГА прилагает усилия для автоматического редактирования потенциально конфиденциальных или шумных данных в отладочном выводе. Помните, что параметр отладки не предназначен для использования в продакшене.