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

Ошибки Codex 401, 429 и Stream Disconnected: найдите слой отказа

6 мин чтенияAI

Последняя строка ошибки Codex — это симптом. Установите маршрут аккаунта и provider, найдите первый отказ и только после этого меняйте состояние или повторяйте запрос.

Маршрут запроса Codex через проверку авторизации, лимитов, провайдера и потока ответа

Сбой Codex может закончиться разными строками:

text
exceeded retry limit, last status: 429 Too Many Requests stream disconnected before completion exceeded retry limit, last status: 401 Unauthorized

Они не доказывают одну общую причину. 401 означает, что конкретный маршрут отклонил аутентификацию. 429 означает ограничение запросов, баланса, расходов или использования в каком-то сервисе. stream disconnected сообщает лишь о том, что поток ответа не завершился. А exceeded retry limit объясняет, почему клиент прекратил попытки, но не называет виновника.

Поэтому не начинайте с удаления auth-файла, выпуска нового ключа, увеличения timeout или повторного запуска большой задачи. Сначала зафиксируйте маршрут и первую полезную ошибку.

Две команды до любых изменений

Для CLI выполните read-only проверки:

bash
codex --version codex login status

Запишите версию, точное время с часовым поясом, интерфейс Codex, модель, полный текст ошибки и request ID, если он виден. codex login status показывает метод аутентификации, но не доказывает, что все downstream-разрешения действуют. При custom provider зафиксируйте активный provider и base URL без ключей и полного содержимого конфигурации.

Официальная таксономия ошибок Codex App Server разделяет Unauthorized, upstream HTTP failure, ResponseStreamConnectionFailed, ResponseStreamDisconnected и ResponseTooManyFailedAttempts. Если известен upstream HTTP status, он может передаваться отдельно. Даже если интерфейс показывает только итоговую строку, эти классы полезно диагностировать отдельно.

Какой маршрут владеет ошибкой

МаршрутГлавные доказательстваЧто нельзя подменять ими
Codex с ChatGPT loginактивный аккаунт/workspace, Codex usage, результат в новой сессиибаланс и RPM/TPM Platform API
OpenAI API keystructured error, организация/проект, billing и limits, response headersподписка ChatGPT Plus/Pro
Внешний provider/gatewayeffective endpoint, provider account, gateway/upstream logs, trace IDлюбая чужая панель OpenAI

Русская схема владельцев маршрута Codex, признаков 401, 429, обрыва потока и ограниченных действий с критерием восстановления

Сообщение «лимит ещё есть» бесполезно, если открыта панель аккаунта, который не обрабатывал запрос. Сначала свяжите способ входа, provider и проверяемую консоль в одну цепочку.

401: повторять нечего, пока не изменилось auth-состояние

Для OpenAI Platform API официальная таблица ошибок различает invalid authentication, неверный API key, отсутствие членства в организации и несовпадение IP allowlist. Конкретный error.code, организация и проект определяют действие.

При ChatGPT login проверьте, соответствует ли codex login status ожидаемому методу и аккаунту. Повторная аутентификация оправдана, когда сессия действительно недействительна или выбран не тот аккаунт. Но codex logout удаляет сохранённые credentials; это изменение состояния, а не безопасная диагностическая команда. Официальное руководство по auth отдельно отмечает workload identity, которой управляет среда процесса.

При API key убедитесь, что работающий процесс использует ключ того же endpoint, проекта и организации, которые вы проверяете. Не печатайте ключ, весь environment или auth.json. После исправления подтверждённого invalid_api_key, membership или IP policy выполните один короткий запрос. Стабильный 401 без изменения credentials или permissions не лечится backoff.

У внешнего gateway 401 может возникнуть на входе или быть ответом upstream. Сопоставьте request ID с логами. Если gateway принял клиентскую аутентификацию, но не прошёл upstream auth, ротация клиентского ключа исправляет не тот слой.

429: сначала прочитайте конкретный owner

В OpenAI Platform API 429 включает не только request-rate throttling. Документация также перечисляет depleted credits, organization/project spend limit и organization usage limit. Billing, spend и quota не восстанавливаются от повторов.

  • Есть валидный Retry-After или явный request-rate code — снизьте concurrency, выждите указанный минимум и сделайте ограниченное число попыток.
  • Есть credit_balance_exhausted — не повторяйте до изменения баланса нужной организации.
  • Указан spend limit — проверьте тот же проект и организацию, которые отправили запрос.
  • Ограничение отображается в ChatGPT/Codex account — следуйте условию восстановления именно этого аккаунта, не переносите его на API throughput.
  • 429 пришёл от стороннего provider — смотрите его billing, quota, concurrency и logs.
  • Видна только последняя строка Codex — сохраняйте время, route и request ID; фиксированное ожидание пока не обосновано.

Если один короткий последовательный запрос проходит, а параллельная работа падает, снизьте нагрузку и запишите порог. Это доказательство о форме workload, но не окончательный root cause. Если после снижения concurrency результат остаётся хаотичным, остановите тесты и откройте реальные логи gateway/provider.

Stream disconnected: проверьте стадию обрыва

Поток может оборваться в клиенте, proxy/TLS inspection, управляемой сети, gateway, upstream-сервисе или при локальном переключении сети. Текст ошибки не доказывает, что виноват VPN или что OpenAI недоступен.

Сделайте один контролируемый сравнительный тест:

  1. Новая сессия, тот же аккаунт, provider, модель и короткий запрос без секретов.
  2. Отметьте: нет вывода совсем, есть частичный вывод или вернулся явный HTTP status.
  3. Если политика разрешает, повторите тот же запрос один раз через другую доверенную сеть.
  4. Сопоставьте время и request ID с provider/gateway logs.
  5. Если сбой есть только в одной версии или клиенте, зафиксируйте различие и не меняйте ещё несколько переменных одновременно.

Успех в другой сети сужает область поиска, но не разрешает отключать корпоративные средства защиты. Одинаковый отказ в двух сетях усиливает необходимость проверить account, provider и текущие upstream-сигналы.

Не увеличивайте сразу stream_idle_timeout_ms. Timeout меняет время ожидания клиента, но не исправляет неверный base URL, устойчивый 401, исчерпанный баланс или соединение, которое gateway закрывает намеренно.

Retry settings не меняют upstream

В Codex существуют настройки request retries, stream retries и stream idle timeout. Текущий config reference также указывает, что model_providers и provider/auth keys относятся к user-level configuration и игнорируются в project-local .codex/config.toml.

Эти параметры определяют поведение клиента после ошибки. Они не пополняют баланс, не обновляют permission и не меняют политику gateway. Большее число повторов может продлить детерминированный отказ, умножить запросы через многослойный gateway и скрыть первый полезный error.

Меняйте retries только после подтверждения временного rate/transport condition и с границей по числу попыток и общему времени. После изменения выполните один короткий запрос. Если первая ошибка вернулась, остановитесь.

Что передать в поддержку

При устойчивом минимальном воспроизведении соберите:

Доска диагностики слоёв Codex от клиента и авторизации до billing, gateway, upstream, transport и потока ответа с чек-листом поддержки

  • Codex version, CLI/App/IDE и ОС;
  • auth method и provider без credentials;
  • первое и последнее время отказа с time zone;
  • стадия: до первого вывода или после частичного ответа;
  • error category, HTTP status, error.code, request ID;
  • одна сессия или все, одна модель или несколько;
  • результат одного контролируемого сравнения;
  • минимальный обезличенный фрагмент лога с первой ошибкой.

Не отправляйте API keys, tokens, authorization headers, полный auth/config, environment dump, приватный prompt или исходный код. Задача отчёта — связать request ID, время и provider, а не выгрузить состояние компьютера.

Критерий восстановления — короткий успешный запрос по исходному маршруту: тот же аккаунт, provider и клиент, поток завершился, первая ошибка больше не возникает. Успех после смены аккаунта, модели или сети — полезный обход, но не доказательство восстановления исходного пути.

#Codex#401 Unauthorized#429 Too Many Requests#Stream Disconnected
Поделиться: