Обработка ошибок
ЦАРЬ ROUTER использует стандартные HTTP-коды. OpenAI SDK корректно перехватывает их через свои exception-классы.
Коды ошибок
| Код | Название | Описание | Решение |
|---|---|---|---|
400 | Bad Request | Неизвестная модель или некорректные параметры | Проверьте имя модели и формат запроса |
401 | Unauthorized | Неверный или отсутствующий API-ключ | Проверьте заголовок Authorization: Bearer sk-tsar-... |
402 | Payment Required | Бюджет ключа исчерпан или баланс = 0 | Пополните баланс или увеличьте бюджет ключа |
403 | Forbidden | Нет прав на действие | Проверьте роль/права пользователя |
422 | Unprocessable Entity | Ошибка валидации | Проверьте типы и форматы полей |
429 | Too Many Requests | Превышен RPM лимит ключа | Уменьшите частоту запросов |
502 | Bad Gateway | Все провайдеры модели недоступны | Попробуйте другую модель или повторите позже |
Формат ошибок
{
"detail": "Model 'unknown-model' not found. Available: yandex/yandexgpt, sber/gigachat-2-max, ..."
}Для ошибок валидации (422):
{
"detail": [
{"loc": ["body", "model"], "msg": "field required", "type": "value_error.missing"}
]
}Пример обработки
from openai import OpenAI, APIError, RateLimitError, AuthenticationError
client = OpenAI(base_url="https://api.tsarrouter.ru/v1", api_key="sk-tsar-ваш-ключ")
try:
response = client.chat.completions.create(
model="yandex/yandexgpt",
messages=[{"role": "user", "content": "Привет"}],
)
except AuthenticationError:
print("Неверный API-ключ")
except RateLimitError:
print("Превышен лимит запросов")
except APIError as e:
if e.status_code == 402:
print("Пополните баланс")
elif e.status_code == 502:
print("Провайдеры недоступны, попробуйте позже")
else:
print(f"Ошибка API: {e}")502 и retry-логика
При получении 502 — ЦАРЬ ROUTER уже попробовал всех доступных провайдеров модели (с автоматическими retry). Это означает полный отказ. Рекомендации:
- Используйте
models(fallback-цепочка) для критичных запросов - Повторите запрос через 5-10 секунд — провайдер может восстановиться