Недавно, когда я использовал Codex CLI с не слишком стабильным апстримом, наткнулся на очень забавную, но при этом вполне практичную проблему.
Codex сейчас сделал стриминговые переподключения жёстко зашитым экспоненциальным backoff’ом. Первые несколько раз это выглядит нормально, но дальше раздувается крайне неадекватно:
- 1-й раз около 0,2 секунды
- 5-й раз около 3,2 секунды
- 10-й раз уже больше минуты
- дальше вообще может вырасти до одного раза в десять минут, в десятки минут
Проблема в том, что такой дизайн по умолчанию предполагает: «чем дольше продолжаются сбои, тем реже нужно ретраить». Но в реальности многие апстримы устроены не так:
- у шлюза иногда случаются кратковременные глюки
- нестабильная маршрутизация на бэкенде
- некоторые OpenAI-совместимые прокси/ретрансляторы могут кратковременно возвращать 403 / состояние квоты ещё не обновилось
- на практике достаточно попробовать ещё несколько раз — и всё быстро восстанавливается
То есть на самом деле нужно:
- чтобы пользователь сам решал частоту повторных попыток
- как минимум — разрешить ретраи с фиксированным интервалом, например раз в 500 мс
- а не быть «похищенным» жёстко прописанным экспоненциальным backoff’ом
Ещё более абсурдно то, что Codex сейчас даёт пользователю stream_max_retries, но не даёт права на настройку интервала повторных попыток и стратегии backoff. Это приводит к тому, что:
вы можете поставить 100 попыток, но после 10-й ожидание перед каждой попыткой становится неразумно длинным, полностью расходясь со сценарием «несколько раз быстро попробовал — и заработало».
Я уже поднял этот вопрос в апстриме:
Мне кажется, проблема по сути не только в неудачно выбранных параметрах, а в том, что дизайн слишком самоуверенный и не оставляет пользователю свободы выбора.
Если бы в TOML явно поддерживалась конфигурация вроде такой, это хотя бы возвращало бы право выбора пользователю:
[model_providers.custom]
stream_max_retries = 100
stream_retry_delay_ms = 500
stream_retry_backoff = "fixed"
Такая потребность на самом деле очень распространена:
«Этот апстрим часто глючит, но несколько быстрых попыток подряд обычно всё чинят — пожалуйста, не растягивай мне автоматом повторы до одного раза в десятки минут».