Skip to content

Your Agent Is Overthinking

Pass rate and cost per task
GPT-6 Astra on Terminal-Bench 4.0

Pass rate and cost per task, GPT-6 Astra on Terminal-Bench 4.0Scatter plot of pass rate against cost per task. low: 50.61% · $4.72; medium: 54.24% · $5.80; high: 57.88% · $6.88; extra high: 57.88% · $7.12; max: 58.18% · $9.90; Learned routing: 57.88% · $5.87. The vertical axis runs from 48 to 60 percent, rather than zero.05055606810Cost per task (USD)15% lower costlowmediumhighextra highmaxLearned routing

The world will spend over a hundred billion dollars on AI agents this year alone. A big portion of that will be wasted on excessive reasoning chains. To curb this, we trained a decision model as a proof of concept for precise, automatic effort selection.

The router reads the task before an agent starts and sets the reasoning effort. Trained on DeepSWE and tested on Terminal-Bench 4.0, it matches the pass rate of high effort at 15% lower cost. Picking max effort is even worse. It costs 69% more than our router for a 0.3% better score.

This router was trained specifically for GPT-6 Astra. However, the recipe we developed applies to any model. It requires under a thousand agentic trajectories and trains within a single hour.

Results

In the chart below, each point on the line is GPT-6 Astra running every task at one effort level. The highlighted point is the router, which picks the effort for each task. Its score, cost and time come from the same recorded runs, using each task’s results at the effort the router picked.

Terminal-Bench 4.0

Router trained on DeepSWE
Fixed effortLearned routing
Terminal-Bench 4.0: pass rate versus cost per taskThe pass-rate axis runs from 48 to 60%, rather than zero. low: 50.61% · $4.72; medium: 54.24% · $5.80; high: 57.88% · $6.88; extra high: 57.88% · $7.12; max: 58.18% · $9.90; Learned routing: 57.88% · $5.87485256600Pass rate (%)$4$6$8$10Cost per task (USD)lowmediumhighextra highmaxLearned routing

On Terminal-Bench 4.0, the router sent about two-thirds of the tasks to high effort. It also finished tasks about 7% faster than high effort. Medium effort costs about the same as the router, but solves fewer tasks.

The result holds in the other direction. Trained on Terminal-Bench 4.0 and tested on DeepSWE, the router scored slightly above high effort at 13% lower cost and in 9% less time.

Hard is the wrong question

The obvious approach is to estimate how hard a task is and spend more on the hard ones. But a hard task can fail at any effort: it may depend on a fact the agent can’t find, a service that isn’t available or a requirement it misread. More reasoning just buys a longer attempt at the same mistake. Meanwhile, a short request can hide a detail that only a careful pass will catch.

What matters is how the outcome changes with effort. Some tasks succeed no matter the effort, and some fail no matter the effort. Extra reasoning only pays off on the tasks in between, and those are what the router learns to find.

To learn them, we use recorded runs of GPT-6 Astra on DeepSWE, where every task was attempted several times at different efforts. A single attempt is a noisy label, so we estimate each task’s success rate at each effort, smoothing the counts with a uniform prior so that a handful of attempts never looks like certainty. Attempts that returned no grade are left out. The training target weighs the gain in success against the extra cost:

value of more effort = gain in success rate − price weight × extra cost

The price weight sets how much one point of success is worth in extra spending. It comes from the training data, not from what users pay. The router learns to rank tasks by this value, and a threshold turns the ranking into a decision.

The model

The router is built on Laya, an open-source decision model that pairs the ModernBERT-large text encoder with a small decision head. We freeze the first 22 encoder blocks and the decision head and train low-rank (LoRA) adapters in the last six: about 770,000 parameters.

It reads only the task prompt and turns it into two kinds of features: a pooled representation of the text, and the decision head’s answers to a few fixed questions about whether the task needs more effort. Each question is asked with its options in both orders and the answers are combined, so option order can’t sway the result.

During training, the model also learns to predict 80 properties of each task, rated in advance by a hosted decision model. The ratings teach the encoder what to pay attention to. The router never calls that model at inference, and it never waits for the agent to try the task.

Small kernel ridge regressors map the features to two estimates of the value of more effort: one through the task properties and one directly from the prompt. Each is averaged over 16 regularization settings, so neither hinges on a single tuned value. The router blends the two and compares the result with a threshold to set the task’s effort.

One decision, made before the agent starts. Only the selected effort runs.

The score ranks tasks. It is not a calibrated probability of success. Each task is decided on its own, so other tasks in a batch never change its effort. The router doesn’t rewrite the request, propose a solution or retry a failure. It sets the starting effort and leaves the rest to the agent.

Training for transfer

A router is only useful on tasks unlike the ones it learned from, so we train on one benchmark and test on the other. Nothing from the test benchmark enters training, neither its outcomes nor its property ratings.

Within the training set, we split tasks into three folds, keeping related tasks together. A small predictor is fitted on two folds and scored on the third, and we backpropagate through it into the adapters. Rotating the held-out fold rewards features that carry over between groups of tasks, not features that only fit one split.

The loss combines the error in predicting the value of more effort with an error on the task properties, plus a penalty that keeps the features close to where they started. We stop after a set number of updates, fixed before training, and fit the final regressors on the full training set.

Long prompts are split into windows of up to 4,096 tokens and combined in proportion to their length, so the end of a request is never cut off. Training took no new agent runs: it reuses the trajectories we had already recorded.

Training recipe

Base model
Laya (ModernBERT-large encoder), pinned revision
Trainable weights
Rank-8 LoRA in the final 6 encoder blocks · 771,072 parameters
Frozen weights
First 22 encoder blocks and the decision head
Training signal
Outcomes and attempt costs at different efforts, and 80 property ratings, from the training benchmark only
Optimization
AdamW · learning rate 0.003 · weight decay 0.01
Stability
Gradient norm clipped to 1 · features anchored to their initial values
Context
4,096-token windows · every prompt token kept
Readout
Kernel ridge · 4 × 4 regularization settings
Decision
One effort per task · threshold 0.45

What we learned

Keeping the decision narrow is what made it learnable. Two runs of the same agent at different efforts differ only in the reasoning budget, so each task’s label measures exactly what the router has to predict.

More elaborate designs didn’t help. We tried routing directly with the hosted model, readouts on a frozen encoder, other semantic views, separate cost models and longer adapter training. None consistently beat this simple design on both cost and pass rate.

Moving to a new model changes only the data. A router learns how one model responds to more reasoning, so each model needs its own, trained on its own trajectories. The architecture, objective and training procedure stay the same, and the property ratings can be reused, since they describe tasks rather than models. The cost mostly comes from the new data, and the threshold has to be chosen again.

Prompt caching

Until recently, changing a model’s reasoning effort in the middle of a conversation invalidated the prompt cache. The whole context had to be processed again at full price, which made switching effort expensive after the first request.

OpenAI now lets developers change GPT-6’s reasoning effort mid-conversation while keeping the prompt cache. See OpenAI’s documentation

Codex and ChatGPT Work also keep the cache when reasoning changes mid-conversation, as OpenAI’s Tibo announced on October 23. Read the announcement

That matters for the router today. In a real session, each new request can be routed on its own: a quick follow-up gets less effort and a demanding one gets more, without paying to reread the conversation. We urge other labs to follow suit.

What’s next

In a critique of a related product from another company, developer and YouTuber Theo Browne raised an objection: a prompt alone rarely shows how complex a task is. That depends on the codebase, the tools the agent can use and the system around it. Read Theo’s post

We agree. This router decides from the first prompt. It has learned which kinds of tasks tend to reward extra effort, but it can’t see what the agent will find in the repository.

The next step is to let the agent look first and adjust its effort as tool output and test results come in. With the cache preserved, each adjustment is cheap.

We’ll compare that approach with the current router and with fixed effort, counting the cost of inspection and retries alongside pass rate and time, to see when gathering more information pays for itself.

This is research, not a shipped feature. We’ll keep developing the method, train routers for more models and later bring it to Rogue’s products.

Seu agente está pensando demais

Aprovação e custo por tarefa
GPT-6 Astra no Terminal-Bench 4.0

Aprovação e custo por tarefa, GPT-6 Astra no Terminal-Bench 4.0Gráfico de dispersão da aprovação pelo custo por tarefa. baixo: 50,61% · US$ 4,72; médio: 54,24% · US$ 5,80; alto: 57,88% · US$ 6,88; muito alto: 57,88% · US$ 7,12; máximo: 58,18% · US$ 9,90; Roteamento aprendido: 57,88% · US$ 5,87. O eixo vertical vai de 48 a 60 por cento, e não de zero.05055606810Custo por tarefa (US$)custo 15% menorbaixomédioaltomuito altomáximoRoteamento aprendido

O mundo vai gastar mais de cem bilhões de dólares com agentes de IA só neste ano. Boa parte disso será desperdiçada com cadeias de raciocínio excessivas. Para conter isso, treinamos um modelo de decisão como prova de conceito para a seleção precisa e automática de esforço.

O roteador lê a tarefa antes de um agente começar e define o esforço de raciocínio. Treinado no DeepSWE e testado no Terminal-Bench 4.0, ele iguala a taxa de aprovação do esforço alto com custo 15% menor. Escolher o esforço máximo é ainda pior. Ele custa 69% mais que o nosso roteador por uma pontuação só 0,3% maior.

Este roteador foi treinado especificamente para o GPT-6 Astra. No entanto, a receita que desenvolvemos vale para qualquer modelo. Ela exige menos de mil trajetórias agênticas e treina em menos de uma hora.

Resultados

No gráfico abaixo, cada ponto da linha é o GPT-6 Astra rodando todas as tarefas em um único nível de esforço. O ponto destacado é o roteador, que escolhe o esforço de cada tarefa. Sua pontuação, seu custo e seu tempo vêm das mesmas execuções registradas, usando os resultados de cada tarefa no esforço que o roteador escolheu.

Terminal-Bench 4.0

Roteador treinado no DeepSWE
Esforço fixoRoteamento aprendido
Terminal-Bench 4.0: aprovação versus custo por tarefaO eixo da aprovação vai de 48 a 60%, e não de zero. baixo: 50,61% · US$ 4,72; médio: 54,24% · US$ 5,80; alto: 57,88% · US$ 6,88; muito alto: 57,88% · US$ 7,12; máximo: 58,18% · US$ 9,90; Roteamento aprendido: 57,88% · US$ 5,87485256600Aprovação (%)US$ 4US$ 6US$ 8US$ 10Custo por tarefa (US$)baixomédioaltomuito altomáximoRoteamento aprendido

No Terminal-Bench 4.0, o roteador enviou cerca de dois terços das tarefas para esforço alto. Ele também terminou as tarefas cerca de 7% mais rápido que o esforço alto. O esforço médio custa quase o mesmo que o roteador, mas resolve menos tarefas.

O resultado se mantém no sentido inverso. Treinado no Terminal-Bench 4.0 e testado no DeepSWE, o roteador ficou um pouco acima do esforço alto, com custo 13% menor e 9% menos tempo.

A dificuldade é a pergunta errada

A abordagem óbvia é estimar quão difícil é uma tarefa e gastar mais nas difíceis. Mas uma tarefa difícil pode falhar com qualquer esforço: ela pode depender de uma informação que o agente não encontra, de um serviço indisponível ou de um requisito que ele entendeu errado. Mais raciocínio só compra uma tentativa mais longa do mesmo erro. Enquanto isso, um pedido curto pode esconder um detalhe que só uma análise cuidadosa encontra.

O que importa é como o resultado muda com o esforço. Algumas tarefas dão certo com qualquer esforço, e outras falham com qualquer esforço. O raciocínio extra só compensa nas tarefas do meio, e são elas que o roteador aprende a encontrar.

Para aprender isso, usamos execuções registradas do GPT-6 Astra no DeepSWE, em que cada tarefa foi tentada várias vezes em diferentes esforços. Uma única tentativa é um rótulo ruidoso, então estimamos a taxa de sucesso de cada tarefa em cada esforço, suavizando as contagens com uma distribuição a priori uniforme para que poucas tentativas nunca pareçam certeza. Tentativas sem nota ficam de fora. O alvo do treinamento pesa o ganho de sucesso contra o custo extra:

valor de mais esforço = ganho na taxa de sucesso − peso de preço × custo extra

O peso de preço define quanto um ponto de sucesso vale em gasto extra. Ele vem dos dados de treinamento, não do que os usuários pagam. O roteador aprende a ordenar as tarefas por esse valor, e um limiar transforma a ordenação em decisão.

O modelo

O roteador é construído sobre o Laya, um modelo de decisão de código aberto que combina o encoder de texto ModernBERT-large com uma pequena cabeça de decisão. Congelamos os 22 primeiros blocos do encoder e a cabeça de decisão e treinamos adaptadores de baixo posto (LoRA) nos seis últimos: cerca de 770 mil parâmetros.

Ele lê apenas o prompt da tarefa e o transforma em dois tipos de característica: uma representação agregada do texto e as respostas da cabeça de decisão a algumas perguntas fixas sobre se a tarefa precisa de mais esforço. Cada pergunta é feita com as opções nas duas ordens e as respostas são combinadas, para que a ordem das opções não influencie o resultado.

Durante o treinamento, o modelo também aprende a prever 80 propriedades de cada tarefa, avaliadas antes por um modelo de decisão hospedado. Essas avaliações ensinam ao encoder no que prestar atenção. O roteador nunca consulta esse modelo na inferência e nunca espera o agente tentar a tarefa.

Pequenos regressores ridge com kernel transformam as características em duas estimativas do valor de mais esforço: uma pelas propriedades da tarefa e outra direto do prompt. Cada uma é a média de 16 configurações de regularização, para que nenhuma dependa de um único valor ajustado. O roteador combina as duas e compara o resultado com um limiar para definir o esforço da tarefa.

Uma decisão, tomada antes de o agente começar. Só o esforço escolhido é executado.

A pontuação ordena as tarefas e não é uma probabilidade calibrada de sucesso. Cada tarefa é decidida isoladamente, então as outras tarefas de um lote nunca mudam o seu esforço. O roteador não reescreve o pedido, não propõe uma solução e não repete tentativas que falharam. Ele define o esforço inicial e deixa o resto com o agente.

Treinando para transferir

Um roteador só é útil em tarefas diferentes das que viu no treinamento, por isso treinamos em um benchmark e testamos no outro. Nada do benchmark de teste entra no treinamento, nem os resultados, nem as avaliações de propriedades.

Dentro do conjunto de treinamento, dividimos as tarefas em três partes, mantendo juntas as tarefas relacionadas. Um pequeno preditor é ajustado em duas partes e avaliado na terceira, e propagamos o gradiente através dele até os adaptadores. Alternar a parte reservada favorece características que se transferem entre grupos de tarefas, e não as que só se ajustam a uma divisão.

A função de perda combina o erro na previsão do valor de mais esforço com um erro nas propriedades da tarefa, mais uma penalidade que mantém as características próximas do ponto de partida. Paramos depois de um número fixo de atualizações, definido antes do treinamento, e ajustamos os regressores finais com todo o conjunto de treinamento.

Prompts longos são divididos em janelas de até 4.096 tokens e combinados em proporção ao tamanho de cada uma, para que o final de um pedido nunca seja cortado. O treinamento não exigiu novas execuções do agente: ele reaproveita as trajetórias que já tínhamos registrado.

Receita de treinamento

Modelo-base
Laya (encoder ModernBERT-large), revisão fixada
Pesos treináveis
LoRA de posto 8 nos 6 últimos blocos do encoder · 771.072 parâmetros
Pesos congelados
22 primeiros blocos do encoder e a cabeça de decisão
Sinal de treinamento
Resultados e custos por tentativa em diferentes esforços, e 80 avaliações de propriedades, só do benchmark de treinamento
Otimização
AdamW · taxa de aprendizado 0,003 · weight decay 0,01
Estabilidade
Norma do gradiente limitada a 1 · características ancoradas nos valores iniciais
Contexto
Janelas de 4.096 tokens · todos os tokens do prompt preservados
Leitura final
Ridge com kernel · 4 × 4 configurações de regularização
Decisão
Um esforço por tarefa · limiar 0,45

O que aprendemos

Manter a decisão estreita foi o que a tornou aprendível. Duas execuções do mesmo agente com esforços diferentes diferem só no orçamento de raciocínio, então o rótulo de cada tarefa mede exatamente o que o roteador precisa prever.

Arquiteturas mais elaboradas não ajudaram. Testamos roteamento direto com o modelo hospedado, leituras sobre um encoder congelado, outras representações semânticas, modelos de custo separados e treinamento mais longo dos adaptadores. Nenhuma superou esta arquitetura simples de forma consistente em custo e em taxa de aprovação ao mesmo tempo.

Passar para um novo modelo muda apenas os dados. Um roteador aprende como um modelo responde a mais raciocínio, então cada modelo precisa do seu, treinado com as próprias trajetórias. A arquitetura, o objetivo e o procedimento de treinamento continuam os mesmos, e as avaliações de propriedades podem ser reaproveitadas, porque descrevem tarefas, não modelos. O custo vem principalmente dos novos dados, e o limiar precisa ser escolhido outra vez.

Cache do prompt

Até pouco tempo atrás, mudar o esforço de raciocínio de um modelo no meio de uma conversa invalidava o cache do prompt. Todo o contexto precisava ser processado de novo a preço cheio, o que tornava caro trocar de esforço depois do primeiro pedido.

A OpenAI agora permite mudar o esforço de raciocínio do GPT-6 no meio da conversa mantendo o cache do prompt. Veja a documentação da OpenAI

O Codex e o ChatGPT Work também mantêm o cache quando o raciocínio muda no meio da conversa, como anunciou Tibo, da OpenAI, em 23 de outubro. Leia o anúncio

Isso importa para o roteador hoje. Numa sessão real, cada novo pedido pode ser roteado isoladamente: um ajuste rápido recebe menos esforço e um pedido exigente recebe mais, sem pagar para reler a conversa. Incentivamos os outros laboratórios a seguir o exemplo.

Próximos passos

Ao criticar um produto relacionado de outra empresa, o desenvolvedor e youtuber Theo Browne levantou uma objeção: um prompt isolado raramente mostra quão complexa é uma tarefa. Isso depende da base de código, das ferramentas que o agente pode usar e do sistema ao redor. Leia o post de Theo

Concordamos. Este roteador decide a partir do primeiro prompt. Ele aprendeu que tipos de tarefa costumam recompensar esforço extra, mas não enxerga o que o agente vai encontrar no repositório.

O próximo passo é deixar o agente olhar primeiro e ajustar o esforço conforme chegam saídas de ferramentas e resultados de testes. Com o cache preservado, cada ajuste sai barato.

Vamos comparar essa abordagem com o roteador atual e com esforço fixo, contabilizando o custo de inspeção e de novas tentativas junto com a taxa de aprovação e o tempo, para ver quando reunir mais informação se paga.

Isto é pesquisa, não um recurso lançado. Vamos continuar desenvolvendo o método, treinar roteadores para mais modelos e, depois, levá-lo aos produtos da Rogue.