Model Routing

Purpose

How Hermes selects providers, applies combos, and enforces context limits.

Current Flow

  • Main path: custom:litellmhttp://litellm:4000/v1
  • Default model: freellmapi-auto
  • OmniRoute used for auxiliary roles: vision, skills_hub, approval, mcp, title_generation, web_extract, compression

Context Enforcement

  • Three layers: model native → combo data.config.context_length → Hermes client cap
  • Effective context is the minimum of the three

Combo Behavior

  • priority retries same provider up to maxRetries, then errors; it does NOT fall through
  • fill-first walks the list on failure
  • auto/lkgp recalculates per request using health scoring
  • Same-provider entries in a combo share rate-limit buckets
  • Session affinity caches provider in session_model_history

Aliases and Mappings

  • Model aliases resolved via key_value table (modelAliases namespace)
  • Wildcard mappings via model_combo_mappings
  • OpenCode/Zen entries may resolve back to opencode-zen provider internally

History

  • User-provided: OpenRouter was used previously; provider lists now centered on LiteLLM + OmniRoute
  • User-provided: persist_switch_by_default=false; /model is per-session unless --global used
  • Inferred: Configuration undergoes periodic corrections related to vision, model fallback, and browser backend tuning