Google Gemini · HTTP 503 · UNAVAILABLE

Gemini API: ошибка 503 UNAVAILABLE

503 UNAVAILABLE в Gemini API — временная перегрузка или недоступность сервиса на стороне Google, а не ваш лимит. Повторите запрос через несколько секунд с растущей паузой. Если ошибка держится, переключите запрос на другую модель.

Обновлено: · по официальной документации Google Gemini

Что пишет Google

В справочнике ошибок Gemini 503 описан как временная перегрузка или отключение сервиса. Рекомендация — повтор с экспоненциальной паузой и случайной добавкой; официальный SDK сам повторяет ошибки 5xx.

Текст «The model is overloaded. Please try again later.» в официальной документации не приводится — его цитируют пользователи форума разработчиков Google. Ориентируйтесь на статус и код UNAVAILABLE.

Чем 503 отличается от 429

429 RESOURCE_EXHAUSTED — вы превысили свой лимит (запросы, токены или суточную квоту проекта). 503 — перегружен сам сервис, и ваш лимит здесь ни при чём. Для 429 есть отдельный разбор: ошибка 429 в Gemini API.

Что делать

Повторять с паузой 1, 2, 4, 8 секунд и ограничением попыток. Не повторять одновременно сотни запросов — это продлевает перегрузку.

Держать запасную модель: при 503 у одной версии Gemini отправить запрос в другую. Через API429 это делается тем же ключом и тем же base URL — меняется только поле model.

Повтор запроса с Retry-After: пример на Python

import email.utils, os, random, time, requests

URL = "https://gateway.api429.com/v1/chat/completions"
HEADERS = {"Authorization": "Bearer " + os.environ["API429_API_KEY"]}
TRANSIENT = {429, 500, 503, 529}

def retry_after(value):
    if not value:
        return None
    if value.isdigit():
        return int(value)
    return max(0, email.utils.parsedate_to_datetime(value).timestamp() - time.time())

def chat(payload, attempts=5):
    for attempt in range(attempts):
        r = requests.post(URL, headers=HEADERS, json=payload, timeout=120)
        if r.status_code not in TRANSIENT:
            r.raise_for_status()
            return r.json()
        wait = retry_after(r.headers.get("Retry-After"))
        time.sleep(wait if wait is not None else min(60, 2 ** attempt) + random.random())
    r.raise_for_status()

Частые вопросы

Это проблема моего ключа?

Нет. 503 UNAVAILABLE означает перегрузку или недоступность сервиса, а не ошибку ключа или лимита.

Сколько ждать?

Обычно секунды или минуты. Повторяйте с растущей паузой и ограничением попыток.

Засчитываются ли 503 в квоту?

В официальной документации это не описано. Такие утверждения встречаются только на форумах.

Можно ли переключиться на другую модель?

Да. Через API429 тем же ключом достаточно поменять model в запросе.

Источники

Что дальше

Другие ошибки API

Telegram