Индекс документации
Получите полный индекс документации по адресу: https://api.vega.chat/docs/llms.txt Используйте этот файл, чтобы узнать все доступные страницы перед дальнейшим исследованием.
Ошибки и отладка
Ошибки API и отладка
Для ошибок API VEGA возвращает JSON-ответ со следующей структурой:
HTTP‑ответ будет иметь тот же код статуса, что и error.code, образуя ошибку запроса, если:
- Ваш исходный запрос некорректен
- Ваш аккаунт VEGA или ключ 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 VEGA может включать стандартный HTTP Retry-After заголовок, указывающий, сколько секунд ждать перед повторной попыткой.
SDK OpenAI, Anthropic SDK, Vercel AI SDK и API VEGA SDK уже учитывают этот заголовок для обратного отката. Если вы используете fetch напрямую, соблюдайте его перед повторной попыткой:
Ошибки модерации
Если ваш ввод был помечен, error.metadata будет содержать информацию о проблеме. Структура метаданных выглядит так:
Ошибки guardrail
На эндпоинтах инференса (/chat/completions, /responses, /messages) запрос может быть заблокирован до того, как он достигнет провайдера — например, фильтром контента или детектором внедрения подсказки, настроенным через guardrails. Когда это происходит, ответ имеет статус 403 с сообщением, описывающим причину блокировки. Тело ответа в формате API VEGA ниже применяется к /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 VEGA нормализует каждую ошибку upstream‑провайдера в стабильный типизированный словарь error_type, описанный в разделе Typed Error Codes. Те же значения error_type описывают, что пошло не так, независимо от того, приходит ли ошибка провайдера в теле не‑стримингового ответа или как событие SSE в середине потока. Нативные коды протокола (Anthropic error.type, Responses error.code) являются приближенными и могут различаться между форматами — error_type является полем, на которое следует опираться во всех случаях.
Для Chat Completions ошибка провайдера, прерывающая генерацию, содержит error_type внутри error.metadata:
То же значение передаётся в ошибках посередине потока и в скинах Anthropic и Responses — см. Skin-Specific Error Formats для точного расположения в каждом формате.
Маскирование и сырые детали провайдера
Когда запрос завершается с кодом 500, message заменяется на общее сообщение, а provider_code и openrouter_metadata опускаются, но error_type остаётся (server).
Для ошибок, не являющихся 500, оригинальный код ошибки провайдера отображается в error.metadata.provider_code, если он доступен. При включённом контексте маршрутизации (какой провайдер был выбран, попытки fallback и т.д.) информация передаётся в объекте openrouter_metadata при установке заголовка X-OpenRouter-Metadata — он имеет ту же структуру, что и в успешных ответах (только поля сводки маршрутизации; см. Pipeline Stages).
Когда контент не генерируется
Иногда модель может не сгенерировать никакого контента. Это обычно происходит, когда:
- Модель прогревается после холодного старта
- Система масштабируется для обработки большего количества запросов
Время прогрева обычно составляет от нескольких секунд до нескольких минут, в зависимости от модели и провайдера.
Если вы сталкиваетесь с постоянными проблемами отсутствия контента, рассмотрите возможность простого механизма повторных попыток или попробуйте другой провайдер или модель с более свежей активностью.
В некоторых случаях вы всё равно можете быть начислены за обработку подсказки upstream‑провайдером, даже если контент не был сгенерирован.
Форматы ошибок при стриминге
При использовании режима стриминга (stream: true) ошибки обрабатываются по‑разному в зависимости от того, когда они происходят:
Ошибки до начала стрима
Ошибки, возникшие до отправки любых токенов, следуют стандартному формату ошибок, описанному выше, с соответствующими HTTP‑кодами. На этом этапе HTTP‑ответ ещё не отправлен, поэтому API VEGA может:
- Вернуть корректный HTTP‑код ошибки (4xx/5xx)
- Тихо повторить запрос к другому провайдеру, если включён fallback routing
- Применить проверки ограничения скорости или аутентификации до начала работы
Вы увидите такие ошибки при некорректных ключах VEGA, неверных запросах или когда все доступные эндпоинты провайдеров исчерпаны до начала стриминга.
Ошибки в середине стрима
Как только первый токен отправлен клиенту, статус 200 OK и заголовки уже зафиксированы — их нельзя изменить. Если провайдер падает в этот момент, API VEGA не может тихо переключиться на другого провайдера, потому что часть контента уже доставлена вашему приложению. Ошибка должна быть передана в‑полосе как событие SSE.
Типичные причины ошибок в середине стрима:
- Отключение провайдера — upstream‑соединение прерывается после частичного вывода (проблема сети, сбой провайдера, таймаут балансировщика)
- Таймаут провайдера — модель перестаёт отвечать посередине генерации, и срок чтения истекает
- Превышение лимита токенов во время генерации — модель достигает
max_tokensили заполняет контекстное окно - Фильтр контента вывода — система модерации помечает сгенерированный текст после того, как часть его уже была передана
- Перегрузка провайдера — upstream возвращает ошибку ограничения скорости или ёмкости после начала стриминга
Если ошибка происходит до отправки любого токена — даже при запросе со стримингом — API VEGA всё ещё может тихо переключиться на резервный провайдер. Ошибки в середине стрима возникают только после того, как часть контента уже зафиксирована в вашем потоке, делая переключение невозможным.
Ошибки в середине стрима отправляются как Server‑Sent Events (SSE) с унифицированной структурой, включающей как детали ошибки, так и завершённый выбор:
Пример данных SSE:
Ключевые характеристики:
- Ошибка появляется на верхнем уровне вместе со стандартными полями ответа
error.metadata.error_typeсодержит типизированный код, который можно программно обрабатывать — см. Typed Error Codes- В массиве
choicesприсутствуетfinish_reason: "error"для корректного завершения потока - HTTP‑статус остаётся
200 OK, так как заголовки уже отправлены - Поток завершается после этого события
- В ошибках класса 500
error.messageзаменяется на общее сообщение, аprovider_codeопускается, чтобы не раскрывать детали upstream‑провайдера
Типизированные коды ошибок
Когда ошибка провайдера достигает вашего приложения, API VEGA помечает её канонической строкой error_type — как в не‑стриминговом теле ответа, так и в событиях SSE посередине потока. Используйте это значение, а не только HTTP‑статус, для программного различения категорий ошибок. Оно стабильно во всех трёх API‑скинах, даже если нативный код протокола потерян.
Где error_type появляется, зависит от скина и пути:
- Chat Completions:
error.metadata.error_type— в ошибочном чанке посередине потока (см. Mid‑Stream Errors) и в не‑стриминговом ответе, когда ошибка провайдера прерывает генерацию. - Anthropic Messages:
error.error_typeв событии SSEerrorи в не‑стриминговом конверте ошибки. - Responses:
error_typeна верхнем уровне в не‑стриминговом JSON‑теле и в событииresponse.failedпри стриминге.
Код HTTP, соответствующий каждому error_type, перечислен в таблицах ниже.
Ограничения токенов и длины
Аутентификация и авторизация
Ограничения скорости и доступность
Проверка запросов
Политика контента
Ошибки изображений
Общие
Ошибки доступности модели
Когда запрошенная модель не может быть обслужена — она не существует, устарела, не имеет маршрутизируемых эндпоинтов согласно вашим предпочтениям, или все её провайдеры находятся в состоянии полной загрузки — ответ об ошибке содержит дополнительный объект error.availability. Он добавочный: error_type, http_status и message сохраняют свои значения, поэтому существующая обработка ошибок продолжает работать. Используйте availability.code — а не HTTP‑статус или текст сообщения — для программного различения условий доступности.
Тот же объект availability включается в чанки ошибок при стриминге для всех трёх API‑скинов (Chat Completions, Responses, Anthropic Messages).
Коды доступности
Каждое событие недоступности модели сопоставляется ровно одному коду. Коды стабильны навсегда; в будущем могут появиться новые, поэтому неизвестный код следует обрабатывать как retryable.
no_endpointsиmodel_unavailable_upstreamсегодня не являются повторяемыми, но роутер может пометить отдельные случаи какretryable: true, если подлежащая причина временная. Всегда проверяйтеavailability.retryable, а не только код.
Объект availability
code, retryable, requested_models и docs_url всегда присутствуют в ошибке доступности. Другие поля опускаются (не сериализуются как пустые строки), если не применимы. Значения excluded_by берутся из фиксированного словаря: geo, data_region, data_policy:zdr, data_policy:training, max_price, context_length, require_parameters, quantization, allowed_providers.
Для отладки error.metadata.previous_errors содержит историю попыток провайдера в компактной, стабильной форме — { "provider": "...", "code": "...", "status": 429 } — и никогда не включает сырые тела ошибок upstream‑провайдера.
Повтор с retry_after
Для capacity_exhausted и temporarily_unavailable availability.retry_after дублирует заголовок Retry-After в теле и заполняется, когда любой из попытанных эндпоинтов предоставил подсказку о повторе (минимум среди попыток). Оба значения выражаются в секундах:
SDK OpenAI, Anthropic, Vercel AI и API VEGA SDK уже учитывают заголовок Retry-After; availability.retry_after предоставляет тот же сигнал клиентам, которые читают тело вместо заголовков.
Использование предложений fallback_models
fallback_models содержит альтернативные slug‑модели, которые роутер может предложить дешево — платный вариант после окончания :free‑промо, преемник устаревшей модели или альтернативы той же семьи. Поле опускается, если предложений нет, и никогда не задерживает ответ об ошибке.
Предложения — лишь подсказки, а не гарантии: fallback‑модель может отличаться по цене, контекстному окну или возможностям, и может быть недоступна при ваших предпочтениях маршрутизации. Проверьте slug относительно ваших требований (или покажите пользователю) перед автоматическим переключением.
Примеры полезных нагрузок ошибок доступности
Все провайдеры на пределе — capacity_exhausted (повторяемо):
Устаревшая stealth‑модель — model_deprecated:
Ограничения конфиденциальности исключили все эндпоинты — privacy_restricted:
Неизвестный идентификатор модели — model_not_found:
Форматы ошибок, специфичные для скинов
API VEGA предоставляет три 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 на верхнем уровне объекта ответа. Например, ошибка аутентификации сводится к нативному коду server_error, но сохраняет error_type: "authentication":
Ошибки в потоке передаются как один из трёх 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.
Не‑стриминговый конверт ошибки (ошибки до роутера, такие как ошибки аутентификации, имеют request_id: null; пост‑роутерные ошибки содержат gen-‑идентификатор):
Ошибки посередине потока отправляются как SSE‑событие error с тем же форматом:
Отладка
API VEGA предоставляет параметр debug, позволяющий вам увидеть точное тело запроса, отправленное upstream‑провайдеру. Это работает как с Chat Completions API (/api/v1/chat/completions), так и с Responses API (/api/v1/responses). Полезно для понимания того, как API VEGA трансформирует ваши параметры запроса для разных провайдеров.
Структура параметра debug
Параметр debug — объект со следующей структурой:
Использование
Чтобы включить вывод отладки, добавьте параметр debug в ваш запрос:
Chat Completions
Responses API
Формат ответа отладки
Chat Completions
Когда debug.echo_upstream_body установлен в true, API VEGA отправляет отладочный чанк первым в стриминговом ответе. Этот чанк имеет пустой массив choices и включает поле debug с трансформированным телом запроса:
Responses API
В Responses API отладочные данные приходят как SSE‑событие response.debug:
Важные замечания
Только стриминг
Параметр
debugработает только в режиме стриминга (stream: true). Запросы без стриминга игнорируют параметр отладки.
Не для продакшна
Флаг отладки не следует использовать в продакшн‑окружениях. Он предназначен исключительно для разработки и отладки, так как может раскрывать чувствительные данные, включённые в запрос, которые не предназначены для публичного доступа.
Сценарии использования
Отладочный вывод особенно полезен для:
- Понимания трансформаций параметров: увидеть, как API VEGA преобразует ваши параметры в формат, специфичный для провайдера (например, как задаётся
max_tokens, как обрабатываетсяtemperature). - Проверки форматирования сообщений: убедиться, как API VEGA объединяет и форматирует ваши сообщения для разных провайдеров (например, как склеиваются system‑сообщения, как объединяются пользовательские сообщения).
- Проверки применённых значений по умолчанию: увидеть, какие значения по умолчанию подставляет API VEGA, если параметры не указаны в запросе.
- Отладки переключения провайдеров: при использовании fallback‑провайдеров отладочный чанк будет отправлен для каждого попытанного провайдера, позволяя увидеть, какие провайдеры были пробованы и какие параметры были отправлены каждому.
Конфиденциальность и редактирование
API VEGA приложит все усилия для автоматического редактирования потенциально чувствительных или шумных данных в отладочном выводе. Помните, что параметр отладки не предназначен для продакшна.