Essa janela de contexto de 128K pode ser um chute — e agora o Hermes avisa

Você testa um modelo novo no Bedrock e o Hermes mostra ctx 128K na barra de status. Você age com base nisso: uma pergunta que cruza arquivos em um repositório de trinta mil tokens. No meio da resposta, ele começa a comprimir o histórico. Depois você confere o cartão do modelo do fornecedor e a janela é de 1.050.000 tokens — oito vezes o que lhe foi dito.
Pior: o rótulo ao lado daquele número dizia “detected”. Parecia um fato. Era um valor padrão.
Um número decide três coisas
Uma janela de contexto não é enfeite. Ela decide quando o histórico é comprimido, quanto material cabe em um prompt e como a recuperação de overflow se comporta. Subestime e a compressão dispara cedo demais, fazendo tarefas longas perderem a memória no meio do voo. Superestime e o provedor rejeita a requisição de imediato.
Então “esse número foi detectado ou foi chutado” não é questão acadêmica. Ela explica dois sintomas completamente diferentes.
De onde vem o número
O resolvedor tenta as fontes em ordem e para no primeiro acerto:
- Sondar o provedor e pegar o valor exato.
- A tabela estática do provedor — no Bedrock, a tabela de modelos.
- A janela do catálogo para a mesma família — o que o catálogo de modelos do Hermes diz sobre aquela família.
- Um padrão estático — 128K no Bedrock, 256K na rota genérica.
A etapa 3 é o que esta mudança adiciona. Antes dela, um modelo do Bedrock ausente da tabela estática caía direto da etapa 2 para o padrão de 128K da etapa 4, mesmo quando o catálogo de modelos já conhecia a janela da família.
Essa etapa só se aplica a modelos Anthropic, OpenAI e xAI: IDs puros, IDs com prefixo geográfico ou global e IDs dentro de um ARN de modelo base ou de inference profile. A próxima seção explica por que ela para aí.
O que “fallback” realmente afirma
O marcador faz exatamente uma afirmação: nenhuma fonte local informou esse número; ele é o valor de fallback.
Você vai vê-lo na linha de sessão do gateway (com o texto “fallback, not a detected limit”), em /usage, na barra de status larga, no banner de boas-vindas e no resumo da troca de /model; correções posteriores estenderam o mesmo rótulo para /status e /context. Na barra de status ele aparece como um sufixo curto.
Não confunda com o outro sufixo: pinned significa que você mesmo definiu o valor, fallback significa que o sistema aplicou o padrão. Nenhum dos dois significa que o provedor disse isso.
O marcador só faz leituras locais, falha aberto e nunca sonda, então não consegue deixar a barra de status lenta. Ele registra por profile home, modelo e base URL — e isso foi uma das correções posteriores: a primeira implementação usava um memo de 60 segundos cuja chave omitia o profile home, então o veredito de um profile podia rotular a janela de outro.
Um caso real: nove dias de GPT-6.1 Terra como 128K
No dia do lançamento do Terra (26 de outubro), o catálogo de modelos aprendeu a janela dele: 1.050.000. A tabela do Bedrock não mudou, e o resolvedor do Bedrock nunca consulta o catálogo. Assim, v0.22.6, v0.22.7 e a main resolviam o Terra no Bedrock como 128K — e a compressão começa em 75% da janela, o que significa 96K.
Depois da correção, um modelo do Bedrock da Anthropic, OpenAI ou xAI que a tabela estática ainda não lista pega a janela da família no catálogo antes de o padrão de 128K valer. O Terra volta a 1.050.000, e o GPT-5.4 também. O ID puro do Terra também ganhou roteamento: o cartão do modelo lista o Mantle como único endpoint para essa forma.
Por que só esses três fornecedores? Porque as linhas de catálogo deles batem de perto com os cartões no Bedrock: de 34 cartões, 27 são iguais, 6 estão abaixo e 1 está acima. A única linha acima é o GPT-6.1 Sol (1.050.000 no catálogo contra um cartão de 1M), e ele tem linha própria na tabela, que ganha.
Outros fornecedores não podem ser emprestados assim. As linhas de catálogo deles são janelas vendor-direct que podem exceder o que o Bedrock serve: o Llama 3 8B tem cartão de 8K enquanto a linha llama diz 131.072; o Qwen3 32B tem cartão de 32K enquanto a linha qwen diz 131.072. Emprestar esses valores trocaria uma compressão antecipada por uma requisição que o provedor rejeita.
Por que o padrão não sobe para um milhão
A sugestão sempre aparece: modelos novos são enormes, então aumente o piso para 1M. A resposta está em cem cartões de modelos de texto do Bedrock: 32 têm 1M ou mais, mas 36 têm 128K ou menos e 8 ficam abaixo disso (Llama 3 8B/70B com 8K; Mistral 7B, Mixtral, Small e Large 2402 com 32K; Qwen3 32B com 32K; Palmyra Vision com 4K).
Um piso de 1M mandaria para esses modelos requisições de 8 a 250 vezes maiores. A resposta do Bedrock a um payload grande demais não ajuda: um InternalServerException opaco, ou “Input is too long for requested model.” A recuperação de overflow só adota um limite que o erro realmente cita, então, sem número na mensagem, não há nada a corrigir — o turno comprime e falha de novo em cada requisição.
Por isso o padrão continua em 128K e a janela da família cuida dos modelos novos: os modelos que de fato batem no padrão são lançamentos de fronteira recentes, e esses chegam primeiro ao catálogo.
Aqui está o conjunto completo de cartões, verificado antes e depois:
| igual ao cartão | abaixo do cartão | acima do cartão | |
|---|---|---|---|
| antes | 55 | 37 | 8 |
| depois | 77 | 15 | 8 |
Todas as 8 linhas “acima” são cartões abaixo de 128K que batem no padrão; esta mudança não mexe nelas.
Definindo você mesmo
Não há chave de configuração nova — os overrides são os mesmos de antes. Fixe um valor globalmente:
model:
context_length: 200000
Ou sobrescreva por provedor e modelo:
model_overrides:
bedrock:
us.openai.gpt-6.1-terra:
context_window: 1050000
A forma genérica tem o mesmo desenho: em model_overrides, primeiro o provedor, depois o modelo, depois context_window.
Um valor fixado tem precedência sobre um fallback e aparece como pinned em vez de fallback. Se você trocar de modelo ou de rota no gateway, o pin configurado é descartado primeiro, para que o número de uma janela antiga nunca fique ao lado do nome de um modelo novo.
Como saber se seu número é confiável
Uma checagem em quatro passos:
- Procure
fallbackdepois do número em/usage,/statusou/context. - Se estiver lá, confira o cartão do modelo ou a documentação do provedor para saber a janela real.
- Fixe com
model_overridesquando souber. - Confirme a direção pelos sintomas: compressão muito antes do esperado significa que o número é pequeno demais; requisições rejeitadas que mencionam comprimento de entrada significam que ele é grande demais.
Isso entrou na main em 4 de novembro, depois do ponto da release v0.22.7, então ainda não está em uma release até a data deste texto — a próxima versão o incorpora.
Para ir uma camada mais fundo, o post sobre uso de contexto e âncoras cobre como manter a informação certa durante a compressão, o guia de compressão lean-tail cobre como tornar o histórico mais barato de manter, e o post sobre padrões de janela de contexto no Codex é o mesmo mecanismo visto de outro ponto de entrada.