GoRouter

Ошибки

Причины ошибок, ограничения моделей и правила повторных запросов.

Формат ответа

{
  "error": {
    "message": "Alibaba: Превышен лимит запросов. Попробуйте чуть позже или выберите другого провайдера.",
    "type": "rate_limit_exceeded",
    "code": 502,
    "metadata": {
      "error_type": "rate_limit_exceeded",
      "provider_name": "Alibaba"
    }
  }
}

Для обработки ошибок сервиса модели используйте error.type: это категория причины, а не только HTTP-статус. Например, общий 502 может сопровождаться более точной причиной — превышением лимита запросов.

  • error.message — описание причины с подробностями сервиса модели, если они доступны. Эти подробности могут быть на английском. Не сравнивайте текст в коде.
  • error.type — стабильная категория ошибки из справочника ниже или локальный код GoRouter.
  • error.code — исходный строковый или числовой код сервиса модели. Для локальных ошибок совпадает с error.type.
  • error.metadata.error_type — нормализованная категория ошибки сервиса модели.
  • error.metadata.provider_name и provider_code — имя провайдера и его код ошибки, если они доступны.
  • Retry-After — минимальная задержка перед повтором, если её передал сервис.

Сообщения сохраняют полезные подробности: неподдерживаемый параметр, запрошенный и допустимый лимиты. Секреты и содержимое запросов не возвращаются. Если причина недоступна, ответ содержит общее сообщение.

HTTP-статусы

HTTP-статус сохраняется от сервиса модели. Исключение — распознанный отказ по приватности: он возвращается как 403 с кодом no_allowed_providers.

HTTPЗначениеДействие
400Неверный запросИсправить параметры или содержимое.
401Ошибка авторизацииПроверить error.type: свой ключ или доступ сервиса модели.
402Ограничение средствПроверить error.type: баланс GoRouter или ограничение сервиса модели.
403Нет разрешенияПроверить доступ, правила модели и приватность по конкретному коду.
404Модель или маршрут недоступныПроверить идентификатор модели. Если сообщение указывает несовместимый provider.only, выберите провайдера из указанного списка или измените модель.
408Истекло время ожиданияПовторить позже, учитывая возможное выполнение запроса.
412Не выполнены предварительные условияОбновить данные перед повтором.
413Слишком большой запросУменьшить текст или вложения.
422Запрос невозможно обработатьПроверить формат и совместимость параметров.
429Превышен лимитИспользовать Retry-After и ограниченное число повторов.
500Внутренняя ошибкаПовторить позже; подробности могут быть скрыты.
502Некорректный ответ провайдераУточнить причину по error.type.
503Провайдер недоступен или проверка приватности не завершенаПовторить позже по Retry-After, если он есть.
504, 524Тайм-аут сервисаПовторить позже, учитывая возможное выполнение запроса.
529Провайдер перегруженПодождать или выбрать другой маршрут.

Другие статусы также возможны. Неизвестная причина получает error.type: "unmapped"; исходный статус сохраняется.

Ошибки и inference-авторизации

Если провайдер явно отклонил параметры до генерации и нет данных о выполнении или расходе, GoRouter освобождает авторизацию: X-GoRouter-Billing-Status: released. Один HTTP-статус 400 без подтверждённой причины недостаточен для освобождения. При таймауте или обрыве соединения запрос мог уже выполняться: запрос остаётся на сверке (pending) до получения стоимости. Через 35 минут авторизация перестаёт уменьшать доступный баланс, но поздний подтверждённый счёт всё равно списывается и может создать долг. Не отправляйте повторные запросы подряд только из-за ошибки таймаута в клиенте.

Категории ошибок сервиса модели

Контекст и токены

error.typeЗначение и действие
context_length_exceededПревышен размер контекста. Сократите историю или начните новый чат.
max_tokens_exceededДостигнут лимит ответа. Увеличьте max_tokens / max_output_tokens в пределах возможностей модели.
token_limit_exceededПревышен лимит токенов. Уменьшите запрос или лимит ответа.
string_too_longОдин из текстовых фрагментов слишком длинный. Сократите его.

Доступ и средства

error.typeЗначение и действие
authenticationАвторизация отклонена на стороне сервиса модели. Повторите позже или выберите другую модель. Это не означает, что ваш ключ GoRouter неверен.
permission_deniedСервис модели запретил запрос. Проверьте доступ к модели и ограничения запроса.
payment_requiredСервис модели отклонил запрос по ограничению средств. Если сообщение указывает слишком большой лимит ответа и доступное число токенов, уменьшите max_tokens, max_completion_tokens или max_output_tokens. Иначе повторите позже или выберите другую модель.

Лимиты и доступность

error.typeЗначение и действие
rate_limit_exceededПревышен лимит запросов или токенов в единицу времени. Подождите или выберите другого провайдера.
provider_overloadedПровайдер перегружен. Повторите позже или смените маршрут.
provider_unavailableПровайдер не смог вернуть корректный ответ. Повторите позже или выберите другую модель.
timeoutПровайдер не успел ответить. Повторяйте с задержкой, учитывая возможное выполнение предыдущего запроса.
serverВнутренняя ошибка сервиса модели. Повторите позже.

Запрос и содержимое

error.typeЗначение и действие
invalid_requestПараметры не подходят модели. Проверьте запрос и поддерживаемые настройки.
invalid_promptНедопустимое содержимое или формат сообщения. Проверьте текст и вложения.
not_foundМодель или ресурс недоступны. Проверьте идентификатор.
precondition_failedНе выполнены условия запроса. Обновите данные перед повтором.
payload_too_largeЗапрос слишком большой. Уменьшите текст или вложения.
unprocessableЗапрос невозможно обработать. Проверьте формат данных.
content_policy_violationЗапрос или ответ отклонён правилами безопасности. Измените содержимое.
refusalМодель отказалась отвечать. Попробуйте другую формулировку.

Изображения

error.typeЗначение и действие
invalid_imageФайл повреждён или не читается. Прикрепите другое изображение.
image_too_largeПревышен размер файла или разрешение. Уменьшите изображение.
image_too_smallСлишком маленькое разрешение. Используйте более крупное изображение.
unsupported_image_formatФормат не поддерживается моделью. Преобразуйте файл в доступный формат.
image_not_foundИзображение не найдено. Проверьте ссылку или прикрепите файл повторно.
image_download_failedНе удалось скачать изображение. Проверьте доступность ссылки или прикрепите файл напрямую.

Неизвестная причина

unmapped — причина не относится к известным категориям или не раскрыта сервисом. Учитывайте HTTP-статус и не повторяйте запрос бесконечно.

Локальные ошибки GoRouter

Для этих ошибок error.code и error.type совпадают.

КодЗначение и действие
invalid_api_keyКлюч GoRouter отсутствует, неверен или недоступен. Проверьте заголовок Authorization.
management_key_not_allowedManagement key нельзя использовать для генерации. Используйте inference key.
insufficient_balanceНедостаточно средств для начала запроса. Пополните баланс или уменьшите объём запроса.
balance_exhaustedДоступных средств для продолжения генерации недостаточно. Сохраните полученную часть ответа; пополните баланс или уменьшите лимит следующего ответа.
outstanding_debtHTTP 402: задолженность аккаунта блокирует все новые генерации, включая бесплатные. Погасите задолженность пополнением баланса; уже отправленные провайдеру запросы и готовые результаты остаются доступны.
media_generation_in_progressВ аккаунте уже выполняется генерация изображения, аудио или видео. Дождитесь её завершения.
billing_unboundedДля выбранного маршрута и параметров нет достоверной оценки стоимости. Запрос не отправлен.
billing_upstream_key_suspendedФинальные счета по затронутому upstream-ключу противоречат друг другу. Ключ отключён до ручной сверки; другие ключи и модели не блокируются.
legal_acceptance_requiredПеред следующим платным запросом примите новую редакцию пользовательского соглашения.
key_limit_exceededПревышен лимит ключа GoRouter. Измените лимит в кабинете.
workspace_budget_exceeded, member_budget_exceededДостигнут расходный лимит рабочего пространства или участника. Обратитесь к администратору организации.
authorization_inactiveСрок авторизации запроса истёк. Повторите запрос.
generation_timeoutГенерация остановлена по таймауту.
response_too_largeГотовый JSON-ответ превысил допустимый размер. Используйте streaming.
invalid_request_error, unsupported_parameterНекорректный запрос или неподдерживаемый параметр. Исправьте запрос.
model_not_foundМодель не найдена или отключена. Выберите доступную модель.
upstream_unreachable, upstream_errorНе удалось связаться с сервисом модели или получить ответ. Повторите позже.
usage_unavailableНе удалось определить стоимость результата. Повторите позже; не запускайте бесконечные повторы.
video_job_not_foundЗадача видео не найдена или принадлежит другому пользователю. Проверьте идентификатор.
video_not_settledРезультат видео пока нельзя скачать. Повторно проверьте состояние задачи.
internal_errorВнутренняя ошибка GoRouter. Повторите позже.

Приватность

HTTPКодЗначение
403privacy_policy_violationЯвный выбор в provider.only или provider.order противоречит профилю.
403no_allowed_providersДля запроса не осталось разрешённых провайдеров.
503privacy_policy_unavailableНе удалось проверить или применить правила. Запрос не отправлен; возможен повтор с задержкой.
400invalid_privacy_settingsНекорректные настройки в кабинете; не относится к публичному inference API.
409privacy_settings_conflictНастройки изменены в другой вкладке кабинета. Загрузите актуальную версию.

При privacy_policy_violation и no_allowed_providers проверьте настройки приватности. Не каждый 403 связан с приватностью. При распознанном отказе по политике приватности резерв освобождается без списания. Подробнее: Приватность и провайдеры.

Защита чувствительных данных

HTTPКодЗначение
400sensitive_data_rejectedКлюч настроен отклонять запросы с найденными категориями.
413sensitive_data_too_largeАнализируемый текст превышает 1 МиБ.
503sensitive_data_unavailableЛокальная проверка недоступна; исходный запрос не отправлен провайдеру.

Ошибки не содержат найденные значения. Подробнее: Защита чувствительных данных.

Ошибки при HTTP 200 и в потоке

Успешный HTTP-статус не гарантирует успешную генерацию. Проверяйте содержимое ответа:

  • Chat Completions: error в корне или choices[].error, в том числе при finish_reason: "error".
  • Responses: error в ответе или response.error в событиях response.failed / response.error.
  • SSE: ошибка может прийти после нескольких токенов при уже открытом HTTP 200.

GoRouter сохраняет оболочку ответа и уже полученный текст. Категория доступна в соответствующем объекте error.type. Обычный finish_reason: "length" сам по себе не преобразуется в ошибку.

data: {"choices":[{"index":0,"delta":{"content":"Начало ответа"}}]}

data: {"error":{"code":429,"type":"rate_limit_exceeded","message":"Превышен лимит запросов. Попробуйте чуть позже или выберите другого провайдера.","metadata":{"error_type":"rate_limit_exceeded"}},"choices":[{"index":0,"delta":{},"finish_reason":"error"}]}

data: [DONE]

Не перезапускайте генерацию автоматически после частичного ответа: повтор создаёт новый запрос и может привести к дополнительной оплате. Разрыв соединения или тайм-аут не гарантирует остановку работы провайдера. См. Streaming.

Повторные запросы

Для временных лимитов и сбоев используйте ограниченное число попыток с увеличивающейся задержкой. Учитывайте Retry-After: он может содержать число секунд или HTTP-дату. Для 400, 401, 402, 403 сначала устраните причину. Если 502 содержит более точную категорию, решение о повторе принимайте по ней.

function retryDelayMs(response: Response): number | null {
  const value = response.headers.get("retry-after");
  if (!value) return null;
  if (/^\d+$/.test(value)) return Number(value) * 1000;
  const until = Date.parse(value);
  return Number.isNaN(until) ? null : Math.max(0, until - Date.now());
}

// Для обычного JSON-ответа. SSE разбирайте по событиям.
const payload = await response.json();
const error = payload.error ?? payload.response?.error
  ?? payload.choices?.find((choice: { error?: unknown }) => choice.error)?.error;

if (!response.ok || error) {
  console.error(error?.type ?? "unknown", error?.message ?? "Ошибка запроса");
  const delayMs = retryDelayMs(response);
  // Решение о повторе зависит от причины и наличия частичного результата.
}

На этой странице