# hermes/gateway.yaml — the covert-gpt LiteLLM gateway, as a Hermes custom # provider. Merged into ~/.hermes/config.yaml by hermes/install.sh. # # NO SECRETS, EVER: the key is referenced by NAME via `key_env: LITELLM_KEY`, # never by value. mcp-config/sync.sh exports LITELLM_KEY into every interactive # shell from ~/.config/mcp-sync/key (0600), and Hermes — launched from such a # shell — resolves it at runtime. So this file is safe in a PUBLIC repo, and # `hermes/install.sh` has no key to prompt for. Run mcp-config/install.sh first; # without it LITELLM_KEY is unset and Hermes falls back to "no-key-required", # which the gateway rejects with a 401. # # WHY a custom provider instead of `model.provider: openrouter` + a base_url: # that older shape pointed Hermes at the gateway by pretending it WAS OpenRouter # (OPENROUTER_API_KEY held the LiteLLM key, OPENROUTER_BASE_URL held the gateway # URL). Requests reached the gateway, but the MODEL PICKER did not: Hermes' # fetch_openrouter_models hardcodes openrouter.ai/api/v1/models and ignores # OPENROUTER_BASE_URL, so the picker listed OpenRouter's ~342-model catalog — # models this gateway cannot serve — while the gateway's own models never # appeared. A named custom provider probes THIS base_url instead. # # NOTE ON COMMENTS: Hermes rewrites ~/.hermes/config.yaml itself (save_config) # and does not preserve comments, so none of this survives into the deployed # file. That is exactly why the reasoning lives HERE, in the repo, rather than # inline in the generated config. custom_providers: - name: covert-gpt base_url: https://llm.covert-gpt.com/v1 key_env: LITELLM_KEY api_mode: chat_completions # `discover_models` is deliberately left at its default (true): with a key # present Hermes probes the gateway's /v1/models and REPLACES the picker's # list with the live catalog, so new gateway models show up with no edit # here. The `models:` map below is NOT the picker list — it exists purely to # carry per-model context_length overrides, which are read from config # independently of discovery. models: # NO LONGER HAND-MAINTAINED. mcp-config/sync.sh renders this map from the # gateway's /v1/model/info on every sync (_mcp_sync_hermes_models), so the # single source of truth is `model_info.max_input_tokens` in ai-k8s-iac's # charts/inference/values.yaml. Fix a wrong window THERE, not here: an # edit to these entries is overwritten by the next sync. # # What follows is only a first-boot seed, so a brand-new box has sane # limits before its first sync. Anything you add that the gateway does # not serve is left alone — the renderer only touches fields it set. # # Unlike opencode, Hermes needs NO safety margin here. opencode reserves # `limit.output` and targets an input of exactly context - output, landing # one token over the window (a hard 400); Hermes omits max_tokens entirely # unless model.max_tokens is set, so vLLM just bounds output by whatever # context remains. Do NOT add model.max_tokens to work around anything: it # is GLOBAL, would apply to every provider (including Anthropic), and only # shrinks the effective input budget Hermes compacts against. # CORRECTED 2026-09-11. This map had drifted badly and the drift was # not visible from inside Hermes: it listed `qwen3-vl-30b-a3b` at # 262144, a model the gateway stopped serving when Ornith replaced it, # while Ornith — the model actually on cg-1, and a SMALLER window at # 196608 — had no entry at all. A model with no entry gets whatever # default Hermes carries, so the one model on this gateway that needs a # lower ceiling than its neighbours was the one model not declaring one. # That is the right shape to produce exactly the reported symptom: fine # on short turns, hard 400 once a task grows. ornith-1.0-35b: # cg-1 — reasoning + tool calling, multimodal # 196608, NOT 262144. Lower than the others on purpose — see # vllm.nodes[cg1] --max-model-len. context_length: 196608 supports_vision: true qwen3.8-27b: # cg-2 — general, NVFP4 context_length: 262144 qwen3-coder-next: # cg-2 — agentic coder # Shares cg-2 with qwen3.8-27b; only one is enabled at a time, so at # most one of these two is ever live. Both are listed because which # one it is changes without touching this file. context_length: 262144 # Models the gateway proxies to third parties (kimi, glm, …) are # intentionally absent: discovery still lists them, and inventing a # context_length we have not verified is worse than letting Hermes probe.