1. FCM router daemon
Local OpenAI-compatible endpoint on port 19280. Cross-provider failover (NIM, Groq, Cerebras, GitHub Models, OpenRouter, and more) with circuit breakers.
A Hermes plugin that scores NVIDIA NIM health, FCM router health, provider diversity, and a persistent learning DB — then atomically updates fallback and MoA models. The primary model is never touched.
Four real inputs. One hard filter. A 15-minute cron that writes only the fallback and MoA slots.
Local OpenAI-compatible endpoint on port 19280. Cross-provider failover (NIM, Groq, Cerebras, GitHub Models, OpenRouter, and more) with circuit breakers.
Every cycle, real chat completions against the FCM router's active NVIDIA models (falls back to a fixed ~9-model list if the router is unreachable). Ranked by latency and success rate.
Persistent SWE scores, streaks, uptime hours, and selection outcomes at ~/.hermes/data/model_learning.db.
A model is ineligible unless it's healthy. If the learning DB has a real SWE-bench-style score for it, that score must also be at least 71% — but a model the curated table hasn't caught up on yet is judged on health alone, not silently rejected.
Eligible models are ranked by a weighted sum. Learning is a real 10% term (historical SWE from the DB), not decoration.
Stacked flow — no overlapping boxes. Read top to bottom on any screen.
Reads the Hermes config resolved via hermes config path
model.default = fcm:fast-coding
http://localhost:19280/v1
localhost:19280 · OpenAI-compatible · per-request failover
Every 15 minutes via Hermes Gateway
Combined = NIM(40%) + FCM(40%) + Diversity(10%) + Learning(10%)
Filter: healthy, and SWE ≥ 71% or unscored. Writes fallback + MoA only.
Not on PyPI. Clone the repo and install editable. Cron job IDs are generated per install.
This project is not published on PyPI. Install from a local clone:
This is the OpenAI-compatible router Hermes will use as fcm:fast-coding.
Copy the example config and add your API keys:
Primary stays on the local router for the life of the install:
Hook the daemon so it comes up when Hermes does:
Batch equivalents: hooks/start_fcm_daemon.bat / hooks/stop_fcm_daemon.bat
Hermes Gateway runs the jobs. IDs are generated per install — they are not universal hex strings.
hermes gateway install, run hermes cron list and copy the IDs Hermes printed. Do not reuse IDs from this page or from someone else’s machine.All settings live in ~/.hermes/.env — no secrets in the repo.
NVIDIA_API_KEY
NVIDIA NIM key from build.nvidia.com. Needed for health checks and fallback/MoA.
GROQ_API_KEY — GroqCloudCEREBRAS_API_KEY — CerebrasGITHUB_TOKEN — GitHub ModelsOPENROUTER_API_KEY — OpenRouterMISTRAL_API_KEY — MistralCLOUDFLARE_API_KEY — Cloudflare Workers AISAMBANOVA_API_KEY — SambaNovaFCM auto-discovers models from whichever keys you set.
SWE_THRESHOLD=71
Min SWE % for eligibility (default 71)
NIM_AUTO_SWITCH_ENABLED=true
Must be true for the switcher to write config (default false)
NIM_MODELS_TO_MONITOR
Comma-separated NIM models to probe. Overrides the FCM active set; falls back to a fixed ~9-model list if unset and the router is unreachable.
FCM_AUTO_RESYNC=true
Auto-resync the FCM set and restart the daemon when a probe finds a retired model (default true)
NIM_HEALTH_TIMEOUT=10
Seconds per request
NIM_MAX_CONCURRENT=4
Parallel health checks
NIM_MAX_LATENCY_MS=15000
Max average latency to count as healthy
NIM_MAX_FAILURE_RATE=0.3
Max 30% failure rate
NIM_MIN_SUCCESS_COUNT=2
Min successes out of 3 probes
Health, a live switch, and the learning DB — plus how to find your cron IDs.
Not /v1/models — that only lists the router's own aliases (fcm, fcm:fast-coding) with no provider or priority to score against.
python scripts/hybrid_auto_switch.py with NIM_AUTO_SWITCH_ENABLED=true writes your Hermes config.yaml (resolved via hermes config path, not assumed to be ~/.hermes/) if a better eligible model is found. Pass --dry-run to run the same health checks and scoring without writing config or recording a switch.Every probe is classified, not just pass/fail: retired (410/404 — gone upstream), throttled (429 after backoff retries — your rate limit, excluded from the failure rate), healthy, or unhealthy. A retired model triggers a one-time resync and re-probe.
Job IDs are minted by Hermes per install. After hermes gateway install, list them and substitute the placeholders.