O Hermes não conhece o seu modelo? Declare a janela de contexto e os recursos com model_overrides

Você já passou por isso: conecta um servidor vLLM local ao Hermes e, depois de algumas trocas, ele anuncia “contexto cheio” — mesmo que o seu modelo lide tranquilamente com 8K ou 128K tokens. Ou troca para um modelo recém-lançado que claramente tem visão, e o Hermes insiste que “este modelo não suporta imagens”. Na maioria das vezes o problema não é o modelo — é que a imagem que o Hermes tem dele vem de um catálogo de modelos, e o seu modelo não está lá, ou a entrada está desatualizada. A boa notícia: desde a v0.20.1 você pode corrigir tudo isso diretamente no config.yaml com model_overrides e dizer ao Hermes exatamente o que o seu modelo é.
Por que isso acontece: pontos cegos no catálogo de modelos
O Hermes decide o que um modelo é capaz de fazer — o tamanho da janela de contexto, se ele suporta ferramentas, visão ou raciocínio — principalmente com base no models.dev, um catálogo público de modelos, além de algumas regras internas de fallback. Isso cobre bem os modelos de nuvem mais populares, mas sempre há lacunas:
- Modelos locais: seu servidor vLLM, Ollama ou llama.cpp usa IDs de modelo que você mesmo inventou; eles não estão no catálogo;
- Modelos recém-lançados: acabaram de sair do fornecedor e ainda não foram catalogados;
- Entradas desatualizadas: a janela de contexto está marcada como menor do que realmente é, os recursos estão errados, ou o fornecedor lançou uma atualização que o catálogo ainda não acompanhou.
Nesses casos, o Hermes recorre a “padrões seguros”: modelos desconhecidos recebem uma estimativa de 200K de contexto, chamadas de ferramenta ativadas, mas visão e raciocínio desligados. Quando a suposição está errada, você tem exatamente o comportamento estranho do começo — recursos que existem são tratados como inexistentes e o contexto pelo qual você pagou vai para o lixo.
A correção: model_overrides no config.yaml
model_overrides é uma nova seção de configuração de nível superior que chegou na v0.20.1 (PR #85560). A função dela é simples: para um modelo específico sob um provedor específico, você declara os metadados manualmente e eles sobrescrevem o catálogo. Assim:
model_overrides:
custom:my-local-vllm: # provider name, then the model ID
my-llava-model:
context_window: 8192 # this model's real context is 8K
supports_vision: true # it does accept images
my-llama-model:
context_window: 32768
supports_tools: false # tool calls are flaky here — turn them off
upstage: # you can also fix cloud models
solar-pro4:
context_window: 524288 # not in the catalog; actually 512K
Reinicie o Hermes depois de salvar (edite com hermes config edit e reinicie a sessão) e as substituições entram em vigor. Escreva apenas os campos que o catálogo erra ou omite — tudo o que você deixar de fora mantém o valor do catálogo, então é impossível quebrar outras configurações por acidente.
Os três campos que você mais vai usar
Raramente você precisa de todos. No dia a dia, costuma ser um destes:
context_window: o tamanho da janela de contexto do modelo, em tokens. Definir um valor baixo demais corta as conversas cedo demais; alto demais, e o modelo divaga em um contexto superdimensionado — consulte o número real sempre que possível.supports_vision: se o modelo aceita entrada de imagem. É a armadilha mais comum com modelos de visão locais (estilo LLaVA): sem a declaração, o Hermes nunca oferece a opção de enviar imagens.supports_tools: se o modelo é capaz de fazer chamadas de ferramenta. Se um modelo não é confiável no uso de ferramentas, é melhor desativá-lo explicitamente aqui do que vê-lo falhar repetidamente.
A lista completa de campos
model_overrides aceita todos estes campos, com o mesmo significado dos metadados de modelo:
| Campo | Significado |
|---|---|
context_window |
Tamanho da janela de contexto, em tokens |
max_output_tokens |
Máximo de tokens de saída por resposta |
supports_tools |
Suporte a chamadas de ferramenta (padrão: true para modelos desconhecidos) |
supports_vision |
Suporte a entrada de imagem (padrão: false) |
supports_reasoning |
Suporte a modo de raciocínio (padrão: false) |
model_family |
Identificador de família de modelos usado na correspondência de fallback |
_default: uma rede de segurança para modelos não catalogados
Escrever cada modelo à mão é tedioso. Você pode definir um _default por provedor — ou globalmente — como fallback para os modelos que o catálogo não conhece:
model_overrides:
custom:my-vllm:
_default: # applies only to uncataloged models
context_window: 32768
_default: # global fallback, gap-filling only
context_window: 128000
_default é, por design, apenas um preenchedor de lacunas: ele só se aplica a modelos que o catálogo não conhece e nunca substitui os dados do catálogo para os modelos conhecidos. Assim, um padrão global não pode, por acidente, limitar todos os modelos de um provedor — os modelos conhecidos mantêm seus valores do catálogo.
Dois cenários reais
Cenário um: um modelo de visão local. Você está servindo um modelo de ID personalizado pelo vLLM e ele aceita imagens. Sem configuração, o Hermes assume que ele não tem visão nenhuma:
model_overrides:
custom:my-vllm:
my-llava-model:
context_window: 8192
supports_vision: true
Cenário dois: um modelo de nuvem recém-lançado. O solar-pro4 da Upstage não estava no catálogo no lançamento, então a regra de fallback o tratou como se tivesse 256K de contexto quando na verdade tem 512K. Declare-o e você pode usar a janela inteira:
model_overrides:
upstage:
solar-pro4:
context_window: 524288
O que você precisa saber
- Os nomes de provedores aceitam as duas grafias: o ID do provedor do Hermes (ex.:
custom:my-vllm) ou o ID do models.dev (ex.:github-copilot) — ambos são reconhecidos. - Os IDs de modelo são correspondidos sem diferenciar maiúsculas de minúsculas, espelhando a busca do catálogo.
- Valores inválidos geram aviso, nunca travam: um valor malformado (digamos
context_window: "512k") registra um aviso no log e os campos irmãos válidos continuam valendo. - Precedência: entradas explícitas ganham dos padrões do models.dev / OpenRouter / internos; um
context_lengthdefinido por modelo emcustom_providerstem prioridade sobre tudo, então nunca é sobrescrito. - Isso combina perfeitamente com
custom_providers(endpoints de API personalizados) — servidores locais, gateways de proxy e modelos internos rodam todos na mesma combinação.
Conclusão
Metadados de modelo errados são uma das armadilhas mais traiçoeiras para quem usa modelos locais e modelos novos: o recurso existe, o Hermes só não sabe. O model_overrides existe exatamente para isso — sem mudar código, sem esperar uma atualização do catálogo; declare algumas linhas no config.yaml e o Hermes finalmente conhece o seu modelo. Se você ainda não explorou a configuração de modelos personalizados, o guia de instalação mostra como configurar provedores, e os provedores de modelo instalados via pip apresentam um caminho complementar para apresentar novos modelos ao Hermes.