Fixe o modelo que os agentes executam — planeje em um, execute em outro
Neutralize a escolha de modelo no cliente e então separe o modo de plano da execução, para que um modelo forte planeje e um modelo barato execute.
Do que a comunidade realmente reclama
"Nossos devs trocam o Claude Code para Opus para resumir um changelog", "cada um tem um modelo diferente nas configurações e não conseguimos ver quem gastou o quê", "tentamos uma política no cliente, mas qualquer um pode simplesmente editá-la de volta".
A escolha de modelo é uma decisão de custo, não uma preferência do desenvolvedor — ela precisa ser imposta no gateway, onde a requisição realmente chega.
Como o GateLLM faz isso
Três camadas, nenhuma dispensável: a allowlist de modelos do grupo de chaves (portão de entrada) rejeita nomes de modelo não autorizados com 403; um mapeamento catch-all a partir de "*" reescreve o que o cliente solicitar para o modelo sancionado; e um script de slot anterior mantém o modo de plano no modelo forte e troca para o modelo de execução na saída.
Requisições de contorno — como a geração de título de conversa do Claude Code — não carregam marcador de plano, então caem no modelo de execução barato. Esse é exatamente o comportamento de "não rodar o Opus em um resumo" que você queria.
5 alavancas que realmente funcionam
- Portão de entrada: a allowlist de modelos do grupo de chaves rejeita qualquer nome de modelo não autorizado antes do roteamento
- Mapeamento catch-all: from "*" → to o modelo sancionado normaliza todo nome solicitado para um único modelo
- Divisão plano/execução: um script de slot anterior lê os marcadores de modo de plano e troca o roteamento somente após sair do plano
- Observável: requisições trocadas recebem uma tag SW nos logs, então o modelo de destino real de cada requisição é auditável
- Recarga a quente: mapeamentos e regras entram em vigor imediatamente — sem reinício, sem implantação por desenvolvedor