Перейти к содержимому

Ошибки

Формат ошибок, все коды ответов, ошибки в потоке, повторные запросы и отладка.

Открыть .md

Формат

{
  "error": {
    "code": 400,
    "message": "invalid chat completion request",
    "metadata": { "fields": { "messages": "messages must be a non-empty array" } }
  }
}
  • code совпадает с HTTP-статусом.
  • message — на английском. Когда провайдер отклоняет запрос (4xx), передается его сообщение без частей, которые называют провайдера или ссылаются на него; при лимите частоты (429) или сбое (5xx) провайдера сообщение — роутера.
  • metadata.provider_name называет регион провайдера, который дал сбой: global или ru.
  • metadata.fields для ошибок проверки 400 сопоставляет каждое неверное поле с его проблемой.

Коды ответов

СтатусКогдаПовторять?
400Неверное тело; неизвестная модель (model … is not available); нет маршрута для модели и запроса (no route of …); провайдер отклонил запросНет: исправьте запрос
401API-ключ неверный, отключен, истек или отозванНет
402Не хватает PnP или исчерпан бюджет ключа или пространстваПосле пополнения
403У пространства нет плательщика, оно потеряло к нему доступ или удаленоНет
404GET /generation: такой генерации в этом пространстве нетНет
409Плательщик пространства сменился во время запросаДа, сразу
413Тело больше 4 МиБНет
422Провайдер не смог обработать запросНет
429Лимит частоты роутера или провайдераДа, с задержкой
502Провайдер дал сбой до начала ответаДа, с задержкой
503Роутер не смог подтвердить баланс плательщика, его лимиты недоступны или он перегруженДа, с задержкой
504Провайдер не ответил вовремяДа, или используйте потоковую передачу

Ошибки в потоке

После начала потока статус уже 200, а ошибка приходит событием с error и finish_reason: "error". Подробнее — в разделе Потоковая передача.

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

  • Повторяйте 429, 502, 503, 504 и 409 с экспоненциальной задержкой и случайным разбросом.
  • Не повторяйте 400, 401, 402, 403, 413, 422: тот же запрос снова завершится ошибкой.
  • Ключа идемпотентности нет, повтор — это новый запрос. Ошибка, которую провайдер вернул до начала ответа, не оплачивается; после тайм-аута посреди ответа оплачивается сгенерированная часть. Если сомневаетесь, посмотрите billable у попыток в GET /api/v1/generation.
  • Лучше, чем повторять запрос к той же модели: укажите резервные модели в models, см. Модели и маршрутизация.

Отладка

  • В каждом ответе есть заголовок X-Request-Id. Укажите его, когда обращаетесь в поддержку.
  • У генерации есть ID (id в ответе, X-Generation-Id в потоке). GET /api/v1/generation?id=gen-… показывает ее состояние, токены, стоимость и каждую попытку со статусом, см. GET /generation.
  • Логи кабинета показывают то же самое для каждого вызова, а при включенном логировании содержимого — еще и запрос с ответом.