Recentemente, ao usar o Codex CLI com um upstream não muito estável, acabei esbarrando num problema bem engraçado — mas também bem prático.
O Codex agora transformou a reconexão em streaming numa lógica de backoff exponencial hardcoded. Nas primeiras tentativas parece normal, mas depois isso infla de um jeito absurdo:
- Na 1ª vez, cerca de 0,2 s
- Na 5ª vez, cerca de 3,2 s
- Na 10ª vez, já passa de 1 minuto
- Depois disso, chega a subir para uma tentativa a cada dezenas de minutos, até dezenas de minutos / horas
O problema é que esse design assume por padrão: “quanto mais tempo falhar, mais devagar deve tentar de novo”. Mas na prática muitos upstreams não funcionam assim:
- gateway dando pane ocasional
- roteamento do backend instável
- alguns proxies intermediários compatíveis com OpenAI retornando 403 por pouco tempo / estado de cota ainda não atualizado
- na prática, tentar mais algumas vezes e logo volta ao normal
Ou seja, o que realmente se precisa é:
- o usuário decidir a frequência de retry
- pelo menos permitir retry em intervalo fixo, por exemplo a cada 500 ms
- e não ficar refém de um backoff exponencial escrito na pedra
Mais absurdo ainda: o Codex hoje dá ao usuário stream_max_retries, mas não dá controle sobre o intervalo de retry e a estratégia de backoff. Isso acaba levando a:
você pode aumentar as tentativas para 100, mas depois da 10ª, cada espera começa a ficar longa demais, totalmente fora do cenário de “tentar mais algumas vezes e funciona”.
Eu já levei esse problema para o upstream:
Tenho a sensação de que, no fundo, o problema não é só um parâmetro mal escolhido, mas um design autoritário demais, que não deixa o usuário escolher.
Se no TOML desse para suportar explicitamente algo como a configuração abaixo, pelo menos aí a escolha voltaria para as mãos do usuário:
[model_providers.custom]
stream_max_retries = 100
stream_retry_delay_ms = 500
stream_retry_backoff = "fixed"
Esse tipo de necessidade é bem comum:
“esse upstream vive dando pane, mas algumas tentativas rápidas em sequência normalmente resolvem — por favor, não puxe automaticamente para uma vez a cada dezenas de minutos.”