Перейти к основному содержанию

Ошибка 503 Nano Banana Pro: что делать при перегрузке и Deadline expired

Если Nano Banana Pro вернул 503, сначала выясните, какой сервис ответил, и проверьте код ошибки. Повторяйте запрос с паузами и установленным пределом, а восстановление подтверждайте готовым изображением. Сообщение Deadline expired само по себе не делает ошибку 504.

LaoZhang AI TeamОпубликованоОбновлено 9 мин чтения
Содержание
Проверка источника и полей ошибки Pro: отдельные действия для подтверждённого 503, 504, неизвестного сетевого исхода и нового кода

При ошибке 503 у Nano Banana Pro сначала проверьте адрес сервиса, HTTP-статус и структурированные поля ошибки. Если подтверждён временный сбой, оставьте модель, входные данные и настройки изображения прежними, выдержите паузу и выполните ограниченное число повторов. Остановитесь, когда получено нужное изображение, исчерпан срок ожидания или изменился тип ошибки. Увеличивать тайм-аут только из-за слов Deadline expired не нужно.

Это особенно важно для сообщения Deadline expired before operation could complete.: на форуме Google зафиксирован ответ с этой фразой, целочисленным кодом 503 и статусом UNAVAILABLE. Он относится к периоду с декабря 2025 года по январь 2026 года и старой preview-модели, а не доказывает текущий сбой. Историческое обсуждение Google помогает распознать сочетание полей, но не устанавливает срок восстановления.

Что значит 503 и кто его вернул

HTTP 503 означает, что ответивший сервис временно не может обработать запрос; перегрузка и обслуживание — возможные причины. Это определение HTTP 503 в стандарте. Один такой ответ не позволяет установить внутреннюю причину или объявить недоступным весь Google.

Сначала сохраните небольшую запись: время, адрес API, ID модели, HTTP-статус, код и статус из тела ответа, длительность попытки, Retry-After и идентификатор запроса, если он есть. Ключи, приватные изображения и полный промпт в общий журнал не помещайте.

Дальше выясните, откуда пришёл ответ:

  • Прямой Google API. Сопоставьте тело с форматом того API, который вызываете.
  • Посредник или API-шлюз. Посмотрите его диагностические поля и журнал обращения к Google. Шлюз может сформировать собственный 503.
  • Ваше приложение. Если 503 выдал ваш сервер, проверьте его очередь и журнал исходящего запроса. Ошибка страницы приложения ещё не доказывает 503 у модели.

Если на месте JSON пришла HTML-страница прокси или HTTP-статус противоречит полям тела, сначала установите источник ошибки. Автоматическое повторение «ошибки Google» в таком случае может чинить совсем другой сервис.

Не смешивайте форматы generateContent и Interactions

В историческом примере generateContent тело выглядело так:

json
{
  "error": {
    "code": 503,
    "message": "Deadline expired before operation could complete.",
    "status": "UNAVAILABLE"
  }
}

У Python SDK поле APIError.code в изученном исходном коде Google также целочисленное. Читайте типизированные поля исключения; поиск строки «503» во всём сообщении ненадёжен — число может находиться в промпте или постороннем тексте.

У Interactions другой формат: error.code — строка. В документации ошибок Interactions service_unavailable соответствует HTTP 503, а deadline_exceeded — HTTP 504. Не подставляйте эти строки в обработчик целочисленного кода generateContent.

Полученный результатЧто проверять дальше
HTTP 503 и UNAVAILABLE в generateContent либо service_unavailable в InteractionsОграниченное восстановление после временного сбоя
HTTP 504; для Interactions — deadline_exceededКто не дождался вышестоящего сервиса и где установлен срок ожидания
Клиент прервал ожидание, HTTP-ответа нетНеизвестный результат первоначального запроса
HTTP 429Какой лимит или квота проекта сработали
HTTP 400, 401, 402, 403 или 404Параметры, ключ, оплата, разрешения или ID модели — по точному коду
HTTP 200 без нужного изображенияФормат ответа, состояние задания, отказ или настройки вывода

Deadline expired сверяется с типом кода generateContent или Interactions; 503, 504, новый 4xx и отсутствие HTTP ведут к разным действиям

Как восстановить генерацию после подтверждённого 503

Рабочая процедура состоит из короткой проверки, пауз между попытками и явного выхода. Google рекомендует для временных ошибок увеличивать задержку, добавлять случайный разброс и ограничивать число повторов. Руководство по устранению неполадок Gemini не задаёт универсальный срок, за который любой запрос Pro обязан восстановиться.

  1. Зафиксируйте исходную задачу. Оставьте прежними сервис, API, проект, модель, промпт, референсы, размер и соотношение сторон. Для официального Pro текущий ID — gemini-3-pro-image; старый gemini-3-pro-image-preview указан среди отключённых моделей в списке Google. Исправление устаревшего ID — отдельная необходимая правка, а не доказательство восстановления 503.
  2. Назначьте одного ответственного за повторы. Это может быть приложение или настроенный клиент. Узнайте, повторяет ли запрос SDK и шлюз, иначе три попытки приложения способны превратиться в гораздо большее число обращений.
  3. Установите два предела. Максимальное число отправок, включая первую, и общий срок задания, включающий ожидание ответов и паузы. Тайм-аут одной отправки должен укладываться в оставшееся время.
  4. Выдержите паузу. Если пришёл корректный Retry-After, не отправляйте раньше указанного срока. Без него используйте растущую задержку со случайным разбросом. Слишком длинная пауза для интерактивного запроса означает перенос в очередь или остановку, а не сокращение серверного ожидания.
  5. Проверьте результат следующей попытки. При очередном 503 продолжайте только в пределах политики. При другой ошибке завершите процедуру 503 и выберите действие по новому коду. При успехе проверьте само изображение.

Повторы POST требуют отдельного решения о допустимости повторной генерации. Правило HTTP об идемпотентности не делает произвольный POST безопасным для автоматического повтора. Если неизвестно, применён ли первый запрос, возможны дополнительный результат и расходы. Внутренний ID задания помогает вашему приложению вести учёт, но не создаёт у Google неописанную поддержку Idempotency-Key.

Пример ограничений без обращения к API

Ниже — функция принятия решения, а не готовый сетевой клиент. Она получает HTTP-статус и словарь error из уже разобранного ответа известного сервиса; для успешного ответа можно передать пустой словарь. Числа выбраны для примера интерфейса: не более трёх отправок, общий срок 110 секунд и резерв 25 секунд на следующую попытку. Для вашей задачи резерв должен отражать настроенный срок одной отправки; сами числа не являются лимитами Google или измеренной скоростью Pro.

replay_allowed=True выставляет приложение после решения о допустимости повторной генерации. По умолчанию повтор запрещён. Время elapsed считайте монотонными часами с начала задания, включая все ожидания; now_utc требуется только для даты в Retry-After. Для каждой паузы передавайте новое случайное число от 0 до 1 в random_fraction; значение 0,5 в примере фиксировано, чтобы результат можно было воспроизвести.

python
import math
from datetime import datetime, timezone
from email.utils import parsedate_to_datetime


def next_action(http_status, error, protocol, elapsed, sent_attempts,
                retry_after=None, now_utc=None, random_fraction=0.5,
                replay_allowed=False, issuer_known=False):
    if http_status is None:
        return ("check_original_result", 0)
    if not issuer_known:
        return ("inspect_issuer", 0)
    if http_status == 200:
        return ("validate_image", 0)
    if protocol == "generateContent":
        consistent = (
            type(error.get("code")) is int
            and error["code"] == http_status
        )
        transient = consistent and error.get("status") == "UNAVAILABLE"
    elif protocol == "interactions":
        transient = error.get("code") == "service_unavailable"
        consistent = transient if http_status == 503 else True
    else:
        return ("inspect_protocol", 0)
    if not consistent:
        return ("inspect_error_fields", 0)
    if http_status != 503:
        return ("diagnose_other_error", 0)
    if not transient:
        return ("inspect_error_fields", 0)
    if not replay_allowed:
        return ("stop_duplicate_risk", 0)
    if sent_attempts >= 3:
        return ("queue_or_stop", 0)
    if not (0 <= random_fraction <= 1) or sent_attempts < 1:
        raise ValueError("Invalid attempt count or random fraction")
    delay = None
    if retry_after is not None:
        value = str(retry_after).strip()
        if value.isascii() and value.isdecimal():
            delay = int(value)
        else:
            try:
                deadline = parsedate_to_datetime(value)
                if (deadline.tzinfo is None or now_utc is None
                        or now_utc.utcoffset() is None):
                    return ("inspect_retry_after_clock", 0)
                delay = max(0, math.ceil(
                    (deadline - now_utc).total_seconds()
                ))
            except (ValueError, TypeError, OverflowError):
                pass
    if delay is None:
        delay = min(12, 3 * 2 ** (sent_attempts - 1)) * random_fraction
    if elapsed + delay + 25 > 110:
        return ("queue_or_stop", delay)
    return ("wait_then_send", delay)


print(next_action(
    503, {"code": 503, "status": "UNAVAILABLE"},
    "generateContent", elapsed=30, sent_attempts=1,
    replay_allowed=True, issuer_known=True,
))  # ('wait_then_send', 1.5)

Перед выполнением wait_then_send выдержите возвращённую задержку и снова проверьте оставшееся время, затем задайте сетевому клиенту срок не больше оставшегося бюджета. Отключите независимые повторы на других уровнях либо включите их в общий счётчик. Функция не отменяет сетевой запрос и не гарантирует завершение за 110 секунд.

Например, при elapsed=30 и Retry-After: 120 она предлагает очередь или остановку: новая попытка уже не помещается в общий срок. Заголовок допускает секунды или HTTP-дату — оба варианта определены в стандарте Retry-After. Если дата читается неверно или часы расходятся, проверьте заголовок и время, а не объявляйте сервис восстановленным.

Синтаксис и решения функции проверены локально на искусственных ответах и времени. Реальных запросов к Pro, замеров задержки и проверки списаний для этого примера не выполнялось.

Когда очередь полезнее новых повторов

Если несколько заданий подряд исчерпали свой предел, приостановите немедленные отправки этому сервису. Оставьте задания в очереди только там, где допустим поздний результат; поставьте им срок годности и разрешайте небольшое число пробных обращений после паузы. Для интерактивного продукта верните понятное состояние «генерация временно недоступна» с возможностью повторить позже.

Снижение параллелизма и ограничение очереди — способы не усиливать сбой собственным трафиком. Это инженерные меры, а не обещание зарезервированной мощности Pro. Конкретный размер очереди и число параллельных запросов выбирают по своему приложению.

Как убедиться, что исходный запрос восстановился

Повтор прежнего запроса, проверка результата и переход к диагностике другого кода

Восстановление подтверждено, когда тот же сервис и модель с прежними входными данными и требуемыми настройками вернули пригодное изображение. Одного HTTP 200, текста «готово» или постановки в очередь недостаточно.

Для generateContent прочитайте целевые части candidates[].content.parts[] с inlineData; для Interactions — блоки изображений в steps типа model_output, внутри content. Эти структуры различаются, поэтому переключение API без изменения обработчика ответа легко выглядит как «изображение пропало». Форматы описаны в документации генерации изображений.

Проверьте MIME-тип и непустые данные, декодируйте изображение, сохраните файл с подходящим расширением и откройте его. Затем сверьте нужный размер, соотношение сторон и содержание. Сохраните все необходимые изображения; сокращение SDK output_image возвращает только последнее. Полный пример сохранения файлов для обоих форматов есть в руководстве Nano Banana Pro API.

Если пришёл 200, но изображения нет, остановите автоматический повтор по правилу 503. Прочитайте ответ: это может быть текст, незавершённое задание, отказ по содержимому или неправильные настройки вывода. Проверка формата и причин отказа должна предшествовать новой оплачиваемой генерации; ограничения безопасности не следует обходить ради получения картинки.

Если это 504 или клиент не получил ответа

HTTP 504 означает, что шлюз или прокси не получил своевременный ответ от вышестоящего сервера. Так определяет его стандарт HTTP. Установите, какой компонент вернул 504, и сравните сроки ожидания приложения, прокси и API. Увеличение срока ожидания клиента не отменяет уже полученный серверный deadline_exceeded.

Если HTTP-ответа нет, а клиент сообщил об истечении времени или разрыве соединения, результат первоначального запроса неизвестен. Сервер мог ещё обрабатывать его или уже закончить. Сначала проверьте существующий ID задания и доступный механизм получения результата, если выбранный сервис действительно их предоставляет. Не придумывайте для произвольного шлюза метод получения задания и не отправляйте автоматически дубликат.

Когда видно, что именно клиент прекращает ожидание раньше допустимого срока задачи, можно увеличить его тайм-аут в пределах общего бюджета. Если срок задаёт прокси, меняйте соответствующее ограничение в своей инфраструктуре. После такой правки проверяйте одну переменную за раз. Уменьшение размера или числа референсов может помочь диагностировать более лёгкий запрос, но уже не доказывает восстановление исходного варианта.

Когда нужно перейти к другой ошибке или варианту генерации

При 429 выясните измерение лимита и окно сброса. Квота проекта, особенно суточная или нулевая, не исправляется короткими повторами или новым ключом того же проекта. Начните с диагностики лимита 429 при генерации изображений; эта ссылка нужна для определения квоты, а не для выбора актуальной модели замены. Общие правила подтверждает страница лимитов Google.

При 400 исправьте конкретное поле или предварительное условие; при 401/403 проверьте принадлежность ключа и доступ; при 402 разберите оплату у ответившего сервиса; при 404 — адрес и ID модели. Слепые повторы эти причины не исправляют. Для Interactions точные строковые коды перечислены в документации ошибок. Другие 5xx тоже требуют своего диагноза: например, 501 не означает тот же временный сбой, что 503.

Если исходная задача может ждать, очередь сохраняет её требования. Если важнее быстро получить любой допустимый результат, можно отдельно согласовать замену: иной размер, другую модель или другого поставщика. Перед заменой проверьте поддерживаемые параметры, цену, обращение с данными и обработчик ответа. Успех этой новой задачи записывайте отдельно от восстановления Pro.

В частности, 4K и 2K — разные требования. Текущая карточка Pro поддерживает 1K, 2K и 4K, но отдельные исторические сообщения о неудачных 4K-запросах не доказывают общего запрета 4K. Увеличенное после генерации изображение тоже не подтверждает, что восстановился исходный запрос на 4K.

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

Нужно ли повышать тайм-аут при Deadline expired и коде 503?

Само сообщение этого не требует. При подтверждённых 503 и UNAVAILABLE сначала применяют ограниченные повторы временного сбоя. Тайм-аут разбирают отдельно, когда есть 504 либо известно, что клиент прекратил ожидание. Историческое сочетание 503 и Deadline описано в обсуждении Google.

Сколько ждать, пока исчезнет ошибка 503 Gemini?

Гарантированного срока для конкретного запроса нет. Выберите общий срок задания, учитывайте Retry-After и завершайте интерактивное ожидание, когда следующая попытка не помещается в этот срок. Три отправки и 110 секунд в примере — политика приложения, а не норматив Google.

Почему платный аккаунт тоже получает 503?

Оплата не исключает временную недоступность сервиса. На форуме есть исторический случай платного Tier 1, где 503 впоследствии исчез. Он не доказывает, что повышение уровня снимет ваш сбой, и не устанавливает срок восстановления.

SDK уже повторяет запросы — нужна ли своя петля?

Только если вы учли все отправки. В текущем руководстве Gemini описаны четыре автоматических повтора Python SDK. В исходном коде ветки main, прочитанном 6 октября 2026 года и повторно изученном локально 7 октября, путь без retry_options даёт одну попытку, а явно заданные стандартные опции — пять, включая первую. Это разные области описания; установленная у вас версия здесь не проверялась. Проверьте её поведение и оставьте одного ответственного за повторы, чтобы не перемножать попытки приложения, SDK и шлюза. Исходный код клиента Google может меняться.

Ответ 200 без изображения означает, что всё исправлено?

Нет. Он подтверждает успешный HTTP-ответ, но не выполнение задачи генерации. Найдите целевой блок изображения, проверьте данные и откройте сохранённый файл. Если результат отсутствует, разбирайте ответ и настройки, а не продолжайте повторы 503.

Повтор после тайм-аута обязательно бесплатный?

Нет оснований так считать. Если ответ потерян, неизвестно, завершилась ли генерация. Условия списаний определяет конкретный сервис; статус 503 или локальный тайм-аут сами по себе не обещают возврата денег. Перед повтором учитывайте риск дополнительного результата и расходов.

Источники11

Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 7 окт. 2026 г..

  1. 1.Историческое обсуждение Googlediscuss.ai.google.dev/t/servererror-503-unavailable-error-code-503-message-deadline-expired-before-operation-could-complete-status-unavailable/110949
  2. 2.HTTP 503 в стандартеrfc-editor.org/rfc/rfc9110.html
  3. 3.изученном исходном коде Googlegithub.com/googleapis/python-genai/blob/main/google/genai/errors.py
  4. 4.документации ошибок Interactionsai.google.dev/gemini-api/docs/api-errors
  5. 5.Руководство по устранению неполадок Geminiai.google.dev/gemini-api/docs/troubleshooting
  6. 6.списке Googleai.google.dev/gemini-api/docs/deprecations
  7. 7.документации генерации изображенийai.google.dev/gemini-api/docs/image-generation
  8. 8.страница лимитов Googleai.google.dev/gemini-api/docs/rate-limits
  9. 9.Текущая карточка Proai.google.dev/gemini-api/docs/models/gemini-3-pro-image
  10. 10.исторический случай платного Tier 1discuss.ai.google.dev/t/503-error-while-generate-content-model-gemini-3-pro-image-preview-tire1-paid/112180
  11. 11.Исходный код клиента Googlegithub.com/googleapis/python-genai/blob/main/google/genai/_api_client.py
Ошибка RESOURCE_EXHAUSTED: остановка, отложенный повтор и сохранённые задания изображения
Руководства по API

Nano Banana Pro: ошибка RESOURCE_EXHAUSTED и восстановление генерации

При RESOURCE_EXHAUSTED остановите повторы для нулевой или исчерпанной суточной квоты. Для временного отказа соблюдайте задержку сервера, ограничивайте время и число попыток, а при продолжении очереди пропускайте уже сохранённые изображения.

9 мин
Схема выбора между Artlist, кредитами, Nano Banana 2 и Gemini API для Nano Banana Pro
Генерация изображений

Artlist Nano Banana Pro: когда использовать Artlist, кредиты 400/700 и когда нужен Gemini API

Artlist стоит рассматривать как творческий интерфейс с собственной системой кредитов, а не как замену Gemini API. Сначала проверьте 400/700 кредитов, роль Nano Banana 2 и свои права на коммерческое использование.

12 мин