Por que sua assinatura esgotou em horas: padrões de context window do Codex, explicados


Numa terça-feira de manhã, você abre a página de uso do ChatGPT e o medidor marca 87% — mesmo sem ter encostado no seu agente na semana: nenhuma sessão noturna maratona, nenhum upload gigante, apenas uma tarde comum de conversas. Se você usa o Hermes com o ChatGPT via Codex OAuth (a família gpt-5.4 / gpt-5.6), o culpado provavelmente era uma context window configurada silenciosamente para um tamanho muito maior do que o provedor anuncia. Quanto maior a janela, mais input tokens cada requisição carrega — e, numa assinatura, o medidor escoa de acordo. A boa notícia: o Hermes corrigiu o comportamento padrão em 23 de agosto — os slugs base do Codex voltaram aos 272K anunciados, e a janela verificada de 900K agora é um opt-in explícito de -900k. Este post explica os mecanismos e os controles que você pode ajustar.

Por que uma context window maior pode custar dinheiro de verdade

Primeiro, uma definição rápida: a context window é quantos tokens um modelo consegue ler numa única requisição — prompt de sistema, histórico da conversa e saída de ferramentas combinados. Uma janela grande significa que o agente consegue “lembrar” mais, mas o detalhe é que cada turn reenvia a janela inteira, e todos esses input tokens contam contra o seu uso.

Em APIs pay-per-token isso é simplesmente uma conta; numa assinatura do ChatGPT (Plus / Pro) acessada via Codex OAuth, é uma cota mensal. Aumentar a janela de 272K para 900K infla a entrada de cada requisição em até 3x+ — e, se você ainda mantém sessões longas, esgotar a cota em horas é totalmente realista. Foi exatamente o que a comunidade relatou no Discord em meados de agosto: uso sumindo com quase nenhuma atividade.

O Hermes havia elevado automaticamente o contexto do Codex para 900K em 16 de agosto (a lógica era “se foi verificado, use”), o que colocou silenciosamente todas as sessões de Codex OAuth na janela grande. O PR #92797, mesclado em 23 de agosto, corrigiu o rumo: os slugs base voltam ao padrão de 272K anunciado, e o 900K é estritamente opt-in.

As variantes -900k no picker: opte explicitamente

No picker /model, os modelos base do Codex agora vêm com variantes com sufixo -900k:

  • gpt-5.6-sol-900k
  • gpt-5.6-terra-900k
  • gpt-5.6-luna-900k
  • gpt-5.4-900k

São aliases do lado do Hermes: escolha gpt-5.6-sol-900k e o sufixo é removido antes de o id do modelo chegar à rede (o backend continua vendo gpt-5.6-sol), e o preço do uso conta como o modelo base. Você está simplesmente declarando “quero a janela grande” — o que é seguro porque o Hermes verificou ao vivo em agosto que o backend do Codex, embora anuncie 272K, na verdade aceita ~911K de input tokens para contas de assinatura.

Um alerta: nem todo modelo do Codex ganha uma variante -900k. Os slugs que realmente impõem 272K — gpt-5.5 e gpt-5.4-mini — não têm variante alguma. Se um slug é elegível é decidido pela lista verificada ao vivo em agent/model_metadata.py (_CODEX_900K_ELIGIBLE_BASES); somente esses modelos ganham variantes sintetizadas no picker.

A compaction acompanha a janela

A context window faz mais do que limitar o quanto você consegue empilhar numa sessão — ela também decide quando o Hermes compacta (resume o histórico antigo para liberar espaço). O gatilho é o compression.threshold, por padrão 50% da janela.

Aqui está a interação sutil: a 50%, uma janela de 272K compactaria em ~136K, desperdiçando metade do espaço. Por isso, para rotas de Codex OAuth nos slugs base gpt-5.4 / 5.5 / 5.6, o Hermes eleva automaticamente o gatilho para 85% (~231K) — o chamado autoraise.

As variantes -900k funcionam ao contrário: a 50% de 900K (~450K) a compaction já acontece tarde o suficiente, então não é preciso autoraise. O PR #92848, mesclado no mesmo dia, garante exatamente isso: as variantes -900k sempre usam o compression.threshold global, e os slugs base mantêm o autoraise de 85%. A regra de ouro: o threshold de compaction sempre segue a janela que você selecionou.

Assuma o controle com estas chaves de config

Se os padrões não se encaixam no seu fluxo de trabalho, tudo isso é configurável:

# Turn off the 85% autoraise for 272K Codex base slugs (back to the global threshold)
hermes config set compression.codex_gpt55_autoraise false

# Keep the autoraise but hide the one-time banner
hermes config set compression.codex_gpt55_autoraise_notice false

Nota: codex_gpt55_autoraise é um nome de chave legado — na verdade, ele governa toda a família gpt-5.4 / 5.5 / 5.6, não apenas o gpt-5.5.

Outros controles que vale a pena conhecer:

  • compression.threshold: a proporção global de compaction (padrão 0.50).
  • compression.model_thresholds: overrides por modelo — as chaves são casadas por substring, e a correspondência mais longa vence. Compacte um modelo de janela 1M mais tarde ("glm-5.2-1M": 0.25) e um de 128K mais cedo ("claude-sonnet": 0.35).
  • Piso para janelas pequenas: modelos com contexto abaixo de 512K têm piso de 0.75 (apenas para cima), então a compaction nunca dispara com metade da janela ainda livre.
  • compression.proactive_prune_tokens: em modelos de janela grande, o gatilho de 50% raramente dispara, então a saída antiga de ferramentas fica no histórico e é reenviada a cada turn. Definir um valor (ex.: 48000) recupera esse espaço cedo e economiza tokens.
  • Para controle manual total sobre a janela de um modelo, use o campo context_window em model_overrides — abordamos isso num guia de configuração completo.

A conclusão

Uma context window maior não é de graça — é uma conta que você paga a cada turn. A lição deste episódio do Codex é que os padrões devem ser conservadores e que a janela grande deve ficar reservada para quem realmente precisa de documentos e históricos longos. Na prática: mantenha os slugs base (272K) para as sessões do dia a dia, recorra a uma variante -900k no /model apenas quando estiver de fato trabalhando com documentos longos e ajuste as chaves de compaction acima ao seu próprio ritmo. Um aviso: essas mudanças estão no main (mescladas em 23 de agosto, após a tag v0.20.5), então atualize com hermes update — e o filtro fuzzy do picker /model faz parte da recente onda de polimento da CLI, que torna encontrar variantes -900k muito mais rápido. Para mais hábitos de economia de tokens no dia a dia, veja nosso compilado de dicas de produtividade.