Elevata

Artigo

Um bug de cache do Codex: 2,5 vezes o custo no replay

Bruno Machado Valerio
Ver perfilPublicado 27 de julho de 2026Atualizado 10 de setembro de 20268 min de leitura

Em 23 de julho de 2026, nosso Governance Gateway bloqueou as requisições de Codex de uma pessoa da engenharia após atingir o limite de gasto. O bloqueio era esperado; chegar ao limite tão rápido, não. As gravações em cache representavam 90% dos custos de GPT-5.6 dessa pessoa. Rastreamos as requisições para entender o motivo.

Os dados de cobrança deixavam duas possibilidades: ou o preço das gravações no cache do GPT-5.6 havia tornado o tráfego normal do Codex inesperadamente caro, ou o Codex enviava as requisições de uma forma que impedia a reutilização. Rastreamos o tráfego afetado desde o registro do Governance Gateway até o JSON exato enviado ao Bedrock e então reproduzimos essas requisições em condições controladas.

A versão curta

  • Para essa pessoa, gravações no cache representavam 90% dos custos do GPT-5.6. Uma gravação custa 1,25× a entrada comum; uma leitura custa 0,10×.
  • O replay mostrou falha na reutilização de um prefixo estável de inicialização entre sessões independentes. O Codex não conseguia marcar esse limite e usava uma chave de cache diferente por sessão. No teste relatado, turnos comuns que apenas acrescentavam conteúdo à mesma sessão já usavam o cache com sucesso.
  • Com um breakpoint e uma chave estável, os acertos nas requisições quentes chegaram a 96–97%, os tokens de gravação caíram 65% e o custo total do replay caiu 59%.
  • O Governance Gateway pode inserir esses campos antes de assinar a requisição para o Bedrock sem perder o cache dentro de cada conversa. O tráfego direto ainda depende da mudança no Codex acompanhada na #35300.
O Codex envia uma requisição JSON pelo Governance Gateway, o proxy HTTP entre o Codex e o Amazon Bedrock. A resposta do modelo volta pelo gateway, que lê políticas e limites nos dados de governança e grava ali os registros de uso.
O Governance Gateway é o proxy HTTP entre o Codex e o Bedrock. Ele lê políticas e limites, reescreve os campos de cache, assina requisições, registra o uso das respostas e devolve as respostas do modelo ao Codex. Requisições diretas não mudam.

Gravações no cache representaram 90% dos custos de uma pessoa com GPT-5.6

Como o Governance Gateway registra o uso de tokens por requisição, conseguimos isolar o tráfego dessa pessoa. Conciliamos esses dados com o AWS Cost Explorer para OpenAI GPT-5.6 Sol (Amazon Bedrock Edition). Nos dias completos de 1 a 23 de julho de 2026, filtrados por RECORD_TYPE = Usage, os custos se dividiam assim:

tipo de usotokenscustoparticipação
gravação no cache258,8MUS$ 1.780,3390,0%
saída3,9MUS$ 127,566,5%
entrada9,8MUS$ 53,982,7%
leitura de cache28,6MUS$ 15,710,8%
totalUS$ 1.977,58

Os tokens de gravação superavam os de leitura em 9,1 para 1. Incluindo a entrada sem cache, apenas 9,6% dos tokens de entrada vieram do cache. No mesmo período, o mesmo caminho do Codex registrou 9,17M tokens de entrada no GPT-5.5 sem uma cobrança separada por gravação.

Nas tarifas do Bedrock aplicáveis ao GPT-5.5, gravações no cache não tinham cobrança separada. O GPT-5.6 cobra uma gravação a 1,25× a entrada comum e uma leitura a 0,10×. Regravar um prefixo reutilizável custa, portanto, 12,5 vezes o valor de lê-lo. Esses preços explicam por que as falhas ficaram caras, mas não por que o Codex continuava falhando.

O Codex omite o breakpoint e muda a chave de cache

Um cache de prompts reutiliza um prefixo exato, portanto precisa saber onde termina o conteúdo estável. Cada requisição codex exec começa com instruções, ferramentas e contexto do ambiente; a entrada específica da tarefa vem depois. O GPT-5.6 aceita este marcador no último bloco estável:

"prompt_cache_breakpoint": {"mode": "explicit"}

O Codex não consegue construir esse campo no bloco de conteúdo. Seu tipo de requisição relevante contém apenas:

pub enum ContentItem {
    InputText { text: String },
    ...
}

Não há um mapa para campos adicionais, e as estruturas da Responses API expõem prompt_cache_key, mas não prompt_cache_options. A configuração do provedor altera a conexão, não o conteúdo aninhado em input. Além disso, o Codex gera a chave de cache a partir de um novo UUID de sessão, portanto execuções independentes apresentam o mesmo prefixo sob identidades diferentes.

O guia de migração da OpenAI para o GPT-5.6 está incluído no Codex. Ele descreve o mesmo padrão: um prefixo estável grande seguido de um sufixo que muda pode perder o cache quando o único breakpoint gerenciado fica perto da mensagem mais recente. O guia recomenda acrescentar o marcador acima.

O breakpoint e a chave estável foram necessários

Como o Governance Gateway interpreta o corpo de cada requisição antes de assiná-la para o Bedrock, pudemos reproduzir os corpos realmente enviados pelo Codex. Um teste inicial de seis requisições aplicou as duas mudanças juntas. Os acertos subiram de 0% para 98,6%, e as gravações nas requisições quentes caíram de cerca de 9.060 tokens para 123–128. Isso mostrou que a correção conjunta funcionava; faltava saber se as duas mudanças eram necessárias.

Para descobrir, variamos o breakpoint e a chave de forma independente em três requisições capturadas:

configuraçãoacerto por requisiçãotokens de gravação
Codex sem modificação0%, 0%, 0%16.873
Só breakpoint explícito0%, 0%, 0%16.873
Só chave de cache estável0%, 0%, 0%16.873
Breakpoint e chave estável0%, 96%, 97%5.973 (-65%)

Somente a última combinação reutilizou o prefixo. Os tokens de gravação caíram 65%, e o custo do replay caiu de US$ 0,1161 para US$ 0,0471 nas tarifas Bedrock usadas no replay de julho de 2026. As requisições sem modificação custaram cerca de 2,5 vezes mais.

Esse resultado é específico do que observamos no Bedrock Mantle. A OpenAI descreve prompt_cache_key como uma dica de roteamento usada com o hash do prefixo, portanto outros backends podem se comportar de outra forma.

Ler um prefixo em cache custa 0,10×; regravá-lo custa 1,25×

Para N requisições com o mesmo prefixo, gravá-lo sempre custa 1,25 × N. Gravar uma vez e depois ler custa 1,25 + 0,10 × (N − 1).

requisições com o mesmo prefixogravar sempreuma gravação, depois leiturasredução
11,251,250%
22,501,3546,0%
33,751,4561,3%
56,251,6573,6%
1012,502,1582,8%

Se o prefixo não será reutilizado, uma gravação custa 1,25 sem gerar economia posterior. O modo explícito sem breakpoints mantém essa requisição como entrada comum a 1,00.

As cotas variam entre provedores. O Bedrock exclui leituras de cache das cotas aplicáveis do Mantle, enquanto o guia da API da OpenAI diz que prompts em cache continuam contando. Não observamos throttling no incidente Mantle de julho. Não generalize essa observação para Runtime: a AWS documenta sistemas de cotas diferentes nesses endpoints. Confira os limites atuais do modelo e endpoint.

O Governance Gateway insere o breakpoint e substitui a chave da sessão

Nas requisições da Responses API do GPT-5.6 vindas do Codex, o Governance Gateway lê o corpo JSON, marca o último bloco estável, substitui o UUID da sessão por uma chave com escopo definido, serializa o corpo novamente e assina a requisição para o Bedrock. Ele mantém os breakpoints do cliente e ignora blocos de conteúdo que não podem receber um marcador.

Mantemos prompt_cache_options.mode no valor padrão. Assim, o GPT-5.6 pode usar nosso marcador de inicialização e ainda gerenciar outro breakpoint perto da mensagem mais recente. O primeiro permite reutilização entre sessões; o segundo atende aos turnos posteriores de uma conversa. Forçar o modo exclusivamente explícito apenas com o marcador inicial eliminaria esse segundo benefício.

Para impedir que usuários ou prompts sem relação compartilhem uma identidade de cache, a chave deriva do principal autenticado, modelo, versão do prompt e das ferramentas, schema das ferramentas e fingerprint do prefixo. O resultado é opaco e não contém PII nem texto do prompt. A OpenAI recomenda manter o tráfego perto de 15 requisições por minuto por chave; shards determinísticos podem distribuir volumes maiores, ao custo de uma gravação fria por shard.

Gasto diário e composição de tokens de 2026-07-21 a 2026-07-27 em todos os modelos. O gasto atinge 2.000,98 dólares em 23-07 para 368,2 mi de tokens, quando as gravações no cache são maiores. Em 25-07 o gasto é de 625,64 dólares para 599,3 mi de tokens e as leituras de cache predominam.
Totais da conta em todos os modelos. A injeção do breakpoint começou em 24 de julho; depois, leituras substituíram boa parte das gravações e o custo por milhão de tokens caiu. O replay controlado acima foi medido separadamente.

O campo breakpoint continua ausente no Codex 0.154.0

A definição ContentItem do Codex 0.154.0 ainda representa InputText apenas com text, sem prompt_cache_breakpoint. A issue #35300 permanece aberta. A solução no gateway trata essa lacuna de serialização; as medições de custo e acerto de cache acima vêm do nosso replay de julho.

O PR #33454, já incorporado, leva cache_write_tokens aos eventos de uso e à telemetria, mas não altera a requisição.

Uma correção nativa precisa de um breakpoint opcional nos tipos de conteúdo compatíveis, enviado apenas aos backends que o aceitam. Até lá, nosso Governance Gateway precisa acrescentar o campo antes do Bedrock. O tráfego direto entre Codex e Bedrock continua sem ele.

Leituras e gravações de cache fazem parte de input_tokens

Nas respostas do Bedrock Mantle, leituras e gravações de cache já estão incluídas em input_tokens; não são tokens adicionais. Nossas chamadas fria e quente mostraram:

requisiçãoinput_tokenscache_write_tokenscached_tokens
fria5.3335.3310
quente5.33305.331
entrada_sem_cache = input_tokens - cached_tokens - cache_write_tokens

Para requisições de contexto curto de até 272 mil tokens de entrada, o model card AWS do Sol lista estas tarifas Standard de inferência na Região:

custo = entrada_sem_cache × US$ 4,40/M
      + cache_write_tokens × US$ 5,50/M
      + cached_tokens × US$ 0,44/M
      + output_tokens × US$ 22,00/M

Acima de 272 mil tokens de entrada, as tarifas de contexto longo na Região são US$ 8,80 de entrada, US$ 11 de gravação, US$ 0,88 de leitura e US$ 33 de saída por milhão de tokens. Roteamento global tem tarifas diferentes. Os multiplicadores de 1,25× para gravação e 0,10× para leitura continuam válidos dentro de cada faixa. A página de preços OpenAI informa que a promoção Sol vale pelo menos até 21 de novembro de 2026.

Use a subtração acima para os dados da resposta. No Cost Explorer e no CUR, entrada comum, gravações e leituras já aparecem em linhas separadas, portanto some essas linhas.

  • Use RECORD_TYPE = Usage e dias fechados no Cost Explorer; períodos atuais são estimados.
  • Interprete 30m no tipo de uso como a vida útil mínima documentada de 30 minutos, não como expiração exata. Um teste frio exige prefixo ou chave únicos.
  • As métricas publicadas do AWS/BedrockMantle não expõem campo específico de cache. Persista os detalhes de leitura e gravação de cada resposta.

Gravações repetidas em cache elevaram o replay a 2,5 vezes o custo

Quando conseguimos ver os corpos das requisições, a causa ficou clara: o Codex repetia o mesmo conteúdo de inicialização, mas não dava ao Bedrock nem um limite estável nem uma identidade de cache estável. O Bedrock continuava gravando um prefixo que poderia ter lido.

O Governance Gateway agora fornece ambos no tráfego roteado, reduzindo o custo do replay em 59% sem sacrificar o cache dos turnos posteriores da conversa. Requisições diretas entre Codex e Bedrock não passam por essa correção, portanto o Codex ainda precisa oferecer suporte nativo ao breakpoint.

Leitura relacionada: Codex e OpenAI Agents no Amazon Bedrock, governança de Claude Code, Desktop e Codex atrás de um único Governance Gateway e Claude Code na AWS.

Relacionados

Continue lendo

Leituras relacionadas a este tema.