hermes-agent/website/static/api/model-catalog.json
Teknium b34e565957 feat(models): catalog-labeled silent default — GLM-5.2 marked "default": true in the model catalog
The remote model catalog (website/static/api/model-catalog.json) now labels
exactly one entry per provider block with "default": true — z-ai/glm-5.2 for
both OpenRouter and Nous Portal. That labeled entry is the model Hermes
silently lands on when the user never picked one, and it can be rotated by
editing the manifest alone: no release needed.

- model_catalog.py: get_default_model_from_cache() reads the label from the
  in-process/disk cache only — never triggers a network fetch, so hot
  resolution paths (agent build, gateway session setup) stay network-free.
- models.py: get_preferred_silent_default_model() resolves catalog label
  first, PREFERRED_SILENT_DEFAULT_MODEL constant second (offline/fresh
  install). _PROVIDER_SILENT_DEFAULT_OVERRIDES dict replaced by
  _SILENT_DEFAULT_PROVIDERS routing through the shared resolver.
  fetch_openrouter_models() preserves the "default" badge through live
  /v1/models refreshes so the picker shows it.
- scripts/build_model_catalog.py: generator emits the default label so
  regeneration can't drop it.
- website/docs/reference/model-catalog.md: schema documents the new field.
- Salvaged from PR #61141 (@HumphreySun98): bare-provider /model switches
  (/model nous) route through the cost-safe default instead of curated
  entry [0].
- tests: catalog-label precedence, constant fallback, stale-label fallback,
  cache-only (no network) guarantee, and a shipped-manifest contract test
  pinning the labeled entry to PREFERRED_SILENT_DEFAULT_MODEL.

E2E (temp HERMES_HOME): fresh-install constant fallback, shipped-manifest
label read, release-free rotation (relabeled cache -> new default across
models.py, tui_gateway, and gateway empty-model paths) all verified.
2026-07-15 00:10:31 -07:00

284 lines
6.5 KiB
JSON

{
"version": 1,
"updated_at": "2026-07-15T04:51:12Z",
"metadata": {
"source": "hermes-agent repo",
"docs": "https://hermes-agent.nousresearch.com/docs/reference/model-catalog"
},
"providers": {
"openrouter": {
"metadata": {
"display_name": "OpenRouter",
"note": "Descriptions drive picker badges. Live /api/v1/models filters curated ids by tool-calling support and free pricing. The entry labeled \"default\": true is the model Hermes silently lands on when the user never picked one."
},
"models": [
{
"id": "anthropic/claude-fable-5",
"description": ""
},
{
"id": "anthropic/claude-opus-4.8",
"description": ""
},
{
"id": "anthropic/claude-opus-4.8-fast",
"description": "2x price, higher output speed"
},
{
"id": "anthropic/claude-sonnet-5",
"description": ""
},
{
"id": "anthropic/claude-haiku-4.5",
"description": ""
},
{
"id": "openai/gpt-5.6-sol",
"description": ""
},
{
"id": "openai/gpt-5.6-sol-pro",
"description": ""
},
{
"id": "openai/gpt-5.6-terra",
"description": ""
},
{
"id": "openai/gpt-5.6-terra-pro",
"description": ""
},
{
"id": "openai/gpt-5.6-luna",
"description": ""
},
{
"id": "openai/gpt-5.6-luna-pro",
"description": ""
},
{
"id": "openai/gpt-5.5",
"description": ""
},
{
"id": "openai/gpt-5.5-pro",
"description": ""
},
{
"id": "openai/gpt-5.4-mini",
"description": ""
},
{
"id": "google/gemini-3-pro-preview",
"description": ""
},
{
"id": "google/gemini-3.1-pro-preview",
"description": ""
},
{
"id": "google/gemini-3.5-flash",
"description": ""
},
{
"id": "x-ai/grok-4.5",
"description": ""
},
{
"id": "deepseek/deepseek-v4-pro",
"description": ""
},
{
"id": "deepseek/deepseek-v4-flash",
"description": ""
},
{
"id": "qwen/qwen3.7-max",
"description": ""
},
{
"id": "qwen/qwen3.7-plus",
"description": ""
},
{
"id": "qwen/qwen3.6-35b-a3b",
"description": ""
},
{
"id": "moonshotai/kimi-k2.6",
"description": "recommended"
},
{
"id": "moonshotai/kimi-k2.7-code",
"description": ""
},
{
"id": "minimax/minimax-m3",
"description": ""
},
{
"id": "z-ai/glm-5.2",
"description": "default",
"default": true
},
{
"id": "z-ai/glm-5.1",
"description": ""
},
{
"id": "xiaomi/mimo-v2.5-pro",
"description": ""
},
{
"id": "tencent/hy3",
"description": ""
},
{
"id": "stepfun/step-3.7-flash",
"description": ""
},
{
"id": "nvidia/nemotron-3-super-120b-a12b",
"description": ""
},
{
"id": "sakana/fugu-ultra",
"description": ""
},
{
"id": "openrouter/pareto-code",
"description": "auto-routes to cheapest coder meeting openrouter.min_coding_score"
},
{
"id": "openrouter/elephant-alpha",
"description": "free"
},
{
"id": "poolside/laguna-m.1:free",
"description": "free"
},
{
"id": "tencent/hy3:free",
"description": "free"
},
{
"id": "nvidia/nemotron-3-super-120b-a12b:free",
"description": "free"
},
{
"id": "nvidia/nemotron-3-ultra-550b-a55b:free",
"description": "free"
},
{
"id": "inclusionai/ring-2.6-1t:free",
"description": "free"
}
]
},
"nous": {
"metadata": {
"display_name": "Nous Portal",
"note": "Free-tier gating is determined live via Portal pricing (partition_nous_models_by_tier), not this manifest. The entry labeled \"default\": true is the model Hermes silently lands on when the user never picked one."
},
"models": [
{
"id": "anthropic/claude-fable-5"
},
{
"id": "anthropic/claude-opus-4.8"
},
{
"id": "anthropic/claude-sonnet-5"
},
{
"id": "anthropic/claude-haiku-4.5"
},
{
"id": "openai/gpt-5.6-sol"
},
{
"id": "openai/gpt-5.6-sol-pro"
},
{
"id": "openai/gpt-5.6-terra"
},
{
"id": "openai/gpt-5.6-terra-pro"
},
{
"id": "openai/gpt-5.6-luna"
},
{
"id": "openai/gpt-5.6-luna-pro"
},
{
"id": "openai/gpt-5.5"
},
{
"id": "openai/gpt-5.5-pro"
},
{
"id": "openai/gpt-5.4-mini"
},
{
"id": "google/gemini-3-pro-preview"
},
{
"id": "google/gemini-3.1-pro-preview"
},
{
"id": "google/gemini-3.5-flash"
},
{
"id": "x-ai/grok-4.5"
},
{
"id": "deepseek/deepseek-v4-pro"
},
{
"id": "deepseek/deepseek-v4-flash"
},
{
"id": "qwen/qwen3.7-max"
},
{
"id": "qwen/qwen3.7-plus"
},
{
"id": "qwen/qwen3.6-35b-a3b"
},
{
"id": "moonshotai/kimi-k2.6"
},
{
"id": "moonshotai/kimi-k2.7-code"
},
{
"id": "minimax/minimax-m3"
},
{
"id": "z-ai/glm-5.2",
"default": true
},
{
"id": "z-ai/glm-5.1"
},
{
"id": "xiaomi/mimo-v2.5-pro"
},
{
"id": "tencent/hy3"
},
{
"id": "stepfun/step-3.7-flash"
},
{
"id": "nvidia/nemotron-3-super-120b-a12b"
},
{
"id": "sakana/fugu-ultra"
}
]
}
}
}