Ошибки
Формат ошибок, все коды ответов, ошибки в потоке, повторные запросы и отладка.
Формат
{
"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 …); провайдер отклонил запрос | Нет: исправьте запрос |
401 | API-ключ неверный, отключен, истек или отозван | Нет |
402 | Не хватает PnP или исчерпан бюджет ключа или пространства | После пополнения |
403 | У пространства нет плательщика, оно потеряло к нему доступ или удалено | Нет |
404 | GET /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. - Логи кабинета показывают то же самое для каждого вызова, а при включенном логировании содержимого — еще и запрос с ответом.