Skip to content

Roteamento de Modelo: Mapeamento Personalizado, Prioridade de Curinga e Estratégias Preset ​

O model que você escreve no cliente não é necessariamente igual ao "modelo físico" que Antigravity Tools finalmente solicita upstream. Roteamento de modelo faz algo simples: mapear "nome de modelo estável externamente" para "modelo realmente usado internamente", e colocar o resultado no header de resposta X-Mapped-Model, facilitando você confirmar se entrou no caminho esperado.

O Que Você Poderá Fazer Após Este Curso ​

  • Na UI configurar proxy.custom_mapping (mapeamento exato + mapeamento curinga)
  • Explicar claramente como uma regra é atingida (exato > curinga > mapeamento padrão)
  • Aplicar regras preset com um clique, compatibilize rapidamente clientes OpenAI/Claude
  • Usar curl -i para verificar X-Mapped-Model, localizar "por que não roteou como eu pensava"

Seu Problema Atual ​

  • Você quer que cliente sempre escreva gpt-4o, mas upstream quer estabilizar em certo modelo Gemini
  • Você tem um monte de nomes de modelo versionados (por exemplo gpt-4-xxxx), não quer cada vez adicionar mapeamento manualmente
  • Você vê solicitação bem-sucedida, mas não tem certeza qual modelo físico está rodando

Quando Usar Esta Técnica ​

  • Você quer fornecer para equipe um "conjunto de modelo externo fixo", blindar mudança de modelo upstream
  • Você quer unificar rotear múltiplos nomes de modelo OpenAI/Claude para poucos modelos de alta relação custo-benefício
  • Ao solucionar 401/429/0 token, você precisa confirmar modelo real após mapeamento

🎒 Preparação Antes de Começar ​

Duas palavras-chave nesta aula

  • custom_mapping: Sua "tabela de regras personalizadas", key é nome de modelo passado pelo cliente (ou padrão curinga), value é nome de modelo finalmente usado (origem: src/types/config.ts).
  • Curinga *: Usado para corresponder em lote nomes de modelo (por exemplo gpt-4*), implementação de correspondência é sensível a maiúsculas/minúsculas (origem: src-tauri/src/proxy/common/model_mapping.rs).

Ideia Central ​

Ao processar solicitação, o backend primeiro calculará um mapped_model:

  1. Primeiro verifica se custom_mapping tem correspondência exata (key completamente igual a model)
  2. Depois tenta correspondência curinga: seleciona regra com "mais caracteres não *" (regra mais específica tem prioridade)
  3. Se não atingir nenhuma, vai para mapeamento padrão do sistema (por exemplo alguns aliases de modelo OpenAI/Claude para modelos internos)

Este mapped_model será escrito no header de resposta X-Mapped-Model (pelo menos handler OpenAI fará isso), você pode usá-lo para confirmar "meu model final se tornou o que".

Semântica de Atualização a Quente (Sem Reiniciar)

Quando serviço de proxy reverso está em execução, frontend chamando update_model_mapping fará backend imediatamente escrever custom_mapping no RwLock na memória, e também salvará na configuração persistente (origem: src-tauri/src/commands/proxy.rs; src-tauri/src/proxy/server.rs).

Siga-me ​

Passo 1: Na Página API Proxy Encontre o Cartão "Roteamento de Modelo" ​

Por Que A entrada de configuração de roteamento de modelo está na UI; você não precisa editar manualmente arquivo de configuração.

Abra Antigravity Tools -> página API Proxy, role para baixo.

Você Deve Ver: Um cartão com título semelhante a "Centro de Roteamento de Modelo", canto superior direito tem dois botões: "Aplicar Mapeamento Preset" e "Resetar Mapeamento" (origem: src/pages/ApiProxy.tsx).

Passo 2: Adicione Um "Mapeamento Exato" (Mais Controlável) ​

Por Que Mapeamento exato tem prioridade mais alta, adequado para "eu só quero este nome de modelo cair neste modelo físico".

Na área "Adicionar Mapeamento":

  • Original preencha nome de modelo que você quer expor externamente, por exemplo gpt-4o
  • Target na caixa suspensa selecione um modelo alvo, por exemplo gemini-3-flash

Clique Add.

Você Deve Ver: Na lista de mapeamento aparece gpt-4o -> gemini-3-flash, e pop-up de sucesso ao salvar.

Passo 3: Adicione Um "Mapeamento Curinga" (Cobertura em Lote) ​

Por Que Quando você tem um monte de nomes de modelo versionados (por exemplo gpt-4-turbo, gpt-4-1106-preview), usar curinga pode economizar muito configuration repetitiva.

Adicione outro mapeamento:

  • Original: gpt-4*
  • Target: gemini-3-pro-high

Você Deve Ver: Na lista aparece gpt-4* -> gemini-3-pro-high.

"Buraco de Prioridade" de Regras

Quando gpt-4o simultaneamente atende regra exata gpt-4o e regra curinga gpt-4*, o backend primeiro seguirá correspondência exata (origem: src-tauri/src/proxy/common/model_mapping.rs).

Passo 4: Aplique Regras Preset com Um Clique (Compatibilização Rápida) ​

Por Que Se seu objetivo principal é "adaptar rapidamente nomes de modelo comuns OpenAI/Claude", preset pode ajudar você preencher diretamente um lote de regras curinga.

Clique em "Aplicar Mapeamento Preset".

Você Deve Ver: Lista adiciona múltiplas regras, contendo conteúdo semelhante abaixo (origem: src/pages/ApiProxy.tsx):

json
{
  "gpt-4*": "gemini-3-pro-high",
  "gpt-4o*": "gemini-3-flash",
  "gpt-3.5*": "gemini-2.5-flash",
  "o1-*": "gemini-3-pro-high",
  "o3-*": "gemini-3-pro-high",
  "claude-3-5-sonnet-*": "claude-sonnet-4-5",
  "claude-3-opus-*": "claude-opus-4-5-thinking",
  "claude-opus-4-*": "claude-opus-4-5-thinking",
  "claude-haiku-*": "gemini-2.5-flash",
  "claude-3-haiku-*": "gemini-2.5-flash"
}

Passo 5: Use X-Mapped-Model para Verificar Se Roteamento Entrou em Vigor ​

Por Que Você quer confirmar "configuração entrou", mais quer confirmar "solicitação realmente seguiu esta regra". O meio mais simples é ver X-Mapped-Model.

bash
curl -i http://127.0.0.1:8045/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "hi"}]
  }'
powershell
$resp = Invoke-WebRequest "http://127.0.0.1:8045/v1/chat/completions" -Method Post -ContentType "application/json" -Body '{
  "model": "gpt-4o",
  "messages": [{"role": "user", "content": "hi"}]
}'
$resp.Headers["X-Mapped-Model"]

Você Deve Ver: Nos headers de resposta há X-Mapped-Model: .... Se no passo 2 você mapeou gpt-4o exatamente para gemini-3-flash, aqui você deve ver valor correspondente (escrita de header de resposta veja src-tauri/src/proxy/handlers/openai.rs).

Passo 6: Quando Precisa Voltar ao "Mapeamento Padrão Puro", Reset custom_mapping ​

Por Que Ao solucionar problemas, frequentemente você quer primeiro excluir "influência de regras personalizadas". Limpar custom_mapping é o meio mais direto de rollback.

Clique em "Resetar Mapeamento".

Você Deve Ver: Lista de mapeamento esvaziada; depois ao solicitar, se não atingir regra personalizada, irá para mapeamento padrão do sistema (origem: src/pages/ApiProxy.tsx; src-tauri/src/proxy/common/model_mapping.rs).

Pontos de Verificação ✅ ​

  • [ ] Você pode adicionar/deletar regras custom_mapping na UI
  • [ ] Você pode explicar claramente: por que regra exata sobrecarrega regra curinga
  • [ ] Você pode usar curl -i ou PowerShell para ler X-Mapped-Model

Lembrete de Armadilhas ​

CenárioO Que Você Pode Fazer (❌)Recomendado (✓)
Curinga não entrou em vigorEscreveu GPT-4* esperando corresponder gpt-4-turboUse minúsculas gpt-4*; correspondência curinga backend é sensível a maiúsculas/minúsculas
Dois curingas podem corresponderEscreveu simultaneamente gpt-* e gpt-4*, incerto qual iráFaça regra mais específica mais "longa", garanta seus caracteres não * são mais
Regras parecem corretas, mas ainda não mudouApenas olhar corpo de resposta, não headers de respostaUse curl -i para confirmar X-Mapped-Model (este é resultado explicitamente retornado pelo backend)
Duas Regras "Mesmo Nível de Especificidade"Escreveu dois curingas, quantidade de caracteres não * é igualEvite este tipo de configuração; comentário no código-fonte explica que neste caso resultado depende de ordem de iteração de HashMap, pode ser instável (origem: src-tauri/src/proxy/common/model_mapping.rs)

Resumo da Lição ​

  • proxy.custom_mapping é sua entrada principal para controlar "nome de modelo externo → modelo físico"
  • Prioridade de roteamento backend: correspondência exata > correspondência curinga (mais específico tem prioridade) > mapeamento padrão do sistema
  • X-Mapped-Model é o meio de verificação mais confiável, ao solucionar problemas priorize olhá-lo

Próximo Passo ​

Na próxima lição continuaremos ver Governança de Cota: Combo de Proteção de Cota + Smart Warmup (capítulo correspondente: advanced-quota).


Apêndice: Referência do Código-fonte ​

Clique para Expandir e Ver Localização do Código-fonte

Última Atualização: 2026-01-23

FunçãoCaminho do ArquivoNúmero da Linha
Campo de Configuração: proxy.custom_mapping (tipo frontend)src/types/config.ts6-20
UI: escrever/resetar/preset (chamar update_model_mapping)src/pages/ApiProxy.tsx371-475
UI: cartão de roteamento de modelo (aplicar mapeamento preset / resetar mapeamento / lista e formulário de adição)src/pages/ApiProxy.tsx1762-1931
Comando backend: atualização a quente e persistência de custom_mappingsrc-tauri/src/commands/proxy.rs344-365
Estado do servidor: custom_mapping salvo com RwLock<HashMap<..>>src-tauri/src/proxy/server.rs16-53
Algoritmo de roteamento: exato > curinga (mais específico tem prioridade) > mapeamento padrãosrc-tauri/src/proxy/common/model_mapping.rs180-228
Correspondência curinga: suporta múltiplos *, e sensível a maiúsculas/minúsculassrc-tauri/src/proxy/common/model_mapping.rs134-178
Calcular mapped_model na solicitação (exemplo: handler OpenAI)src-tauri/src/proxy/handlers/openai.rs154-159
---------

Funções Chave:

  • resolve_model_route(original_model, custom_mapping): entrada principal de roteamento de modelo (veja src-tauri/src/proxy/common/model_mapping.rs)