{"repo":"NousResearch/hermes-agent","public_id":"9106","display_label":"Add native NVIDIA NIM provider support","summary":"These members propose adding native NVIDIA NIM as a supported provider or gateway. Multiple entries appear to be iterations or salvages of the same feature effort.","subsystem":null,"counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":11774,"merged_at":"2026-04-17T20:47:47+00:00"},"resolution":{"state":"resolved","by":"pr-11774"},"freshness":{"state":"stale","last_verified_at":"2026-04-17T20:47:47+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":9106,"pr_number":11774,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-04-17T20:47:47+00:00"}],"members":[{"kind":"issue","number":9106,"title":"[Feature]: Add NVIDIA NIMS gateway support","url":null,"state":"closed"},{"kind":"pr","number":11703,"title":"feat(providers): add native NVIDIA NIM provider","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#11774","number":11774},{"kind":"pr","value":"#9106","number":9106}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":11774,"title":"feat(providers): native NVIDIA NIM provider (salvage of #11703)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["README.md","agent/model_metadata.py","cli-config.yaml.example","hermes_cli/auth.py","hermes_cli/config.py","hermes_cli/doctor.py","hermes_cli/dump.py","hermes_cli/main.py","hermes_cli/models.py","hermes_cli/providers.py","scripts/release.py","tests/hermes_cli/test_api_key_providers.py","tests/tools/test_local_env_blocklist.py","website/docs/getting-started/quickstart.md","website/docs/integrations/providers.md","website/docs/user-guide/features/fallback-providers.md"],"fix_hunks":[{"file":"README.md","hunks":["@@ -13,7 +13,7 @@\n \n **The self-improving AI agent built by [Nous Research](https://nousresearch.com).** It's the only agent with a built-in learning loop — it creates skills from experience, improves them during use, nudges itself to persist knowledge, searches its own past conversations, and builds a deepening model of who you are across sessions. Run it on a $5 VPS, a GPU cluster, or serverless infrastructure that costs nearly nothing when idle. It's not tied to your laptop — talk to it from Telegram while it works on a cloud VM.\n \n-Use any model you want — [Nous Portal](https://portal.nousresearch.com), [OpenRouter](https://openrouter.ai) (200+ models), [Xiaomi MiMo](https://platform.xiaomimimo.com), [z.ai/GLM](https://z.ai), [Kimi/Moonshot](https://platform.moonshot.ai), [MiniMax](https://www.minimax.io), [Hugging Face](https://huggingface.co), OpenAI, or your own endpoint. Switch with `hermes model` — no code changes, no lock-in.\n+Use any model you want — [Nous Portal](https://portal.nousresearch.com), [OpenRouter](https://openrouter.ai) (200+ models), [NVIDIA NIM](https://build.nvidia.com) (Nemotron), [Xiaomi MiMo](https://platform.xiaomimimo.com), [z.ai/GLM](https://z.ai), [Kimi/Moonshot](https://platform.moonshot.ai), [MiniMax](https://www.minimax.io), [Hugging Face](https://huggingface.co), OpenAI, or your own endpoint. Switch with `hermes model` — no code changes, no lock-in.\n \n <table>\n <tr><td><b>A real terminal interface</b></td><td>Full TUI with multiline editing, slash-command autocomplete, conversation history, interrupt-and-redirect, and streaming tool output.</td></tr>"]},{"file":"agent/model_metadata.py","hunks":["@@ -38,6 +38,7 @@\n     \"mimo\", \"xiaomi-mimo\",\n     \"arcee-ai\", \"arceeai\",\n     \"xai\", \"x-ai\", \"x.ai\", \"grok\",\n+    \"nvidia\", \"nim\", \"nvidia-nim\", \"nemotron\",\n     \"qwen-portal\",\n })\n ","@@ -158,6 +159,8 @@ def _strip_provider_prefix(model: str) -> str:\n     \"grok\": 131072,             # catch-all (grok-beta, unknown grok-*)\n     # Kimi\n     \"kimi\": 262144,\n+    # Nemotron — NVIDIA's open-weights series (128K context across all sizes)\n+    \"nemotron\": 131072,\n     # Arcee\n     \"trinity\": 262144,\n     # OpenRouter","@@ -240,6 +243,7 @@ def _is_custom_endpoint(base_url: str) -> bool:\n     \"api.fireworks.ai\": \"fireworks\",\n     \"opencode.ai\": \"opencode-go\",\n     \"api.x.ai\": \"xai\",\n+    \"integrate.api.nvidia.com\": \"nvidia\",\n     \"api.xiaomimimo.com\": \"xiaomi\",\n     \"xiaomimimo.com\": \"xiaomi\",\n     \"ollama.com\": \"ollama-cloud\","]},{"file":"cli-config.yaml.example","hunks":["@@ -24,6 +24,7 @@ model:\n   #   \"minimax\"      - MiniMax global (requires: MINIMAX_API_KEY)\n   #   \"minimax-cn\"   - MiniMax China (requires: MINIMAX_CN_API_KEY)\n   #   \"huggingface\"  - Hugging Face Inference (requires: HF_TOKEN)\n+  #   \"nvidia\"       - NVIDIA NIM / build.nvidia.com (requires: NVIDIA_API_KEY)\n   #   \"xiaomi\"       - Xiaomi MiMo (requires: XIAOMI_API_KEY)\n   #   \"arcee\"        - Arcee AI Trinity models (requires: ARCEEAI_API_KEY)\n   #   \"ollama-cloud\" - Ollama Cloud (requires: OLLAMA_API_KEY — https://ollama.com/settings)"]},{"file":"hermes_cli/auth.py","hunks":["@@ -233,6 +233,14 @@ class ProviderConfig:\n         api_key_env_vars=(\"XAI_API_KEY\",),\n         base_url_env_var=\"XAI_BASE_URL\",\n     ),\n+    \"nvidia\": ProviderConfig(\n+        id=\"nvidia\",\n+        name=\"NVIDIA NIM\",\n+        auth_type=\"api_key\",\n+        inference_base_url=\"https://integrate.api.nvidia.com/v1\",\n+        api_key_env_vars=(\"NVIDIA_API_KEY\",),\n+        base_url_env_var=\"NVIDIA_BASE_URL\",\n+    ),\n     \"ai-gateway\": ProviderConfig(\n         id=\"ai-gateway\",\n         name=\"Vercel AI Gateway\","]},{"file":"hermes_cli/config.py","hunks":["@@ -861,6 +861,22 @@ def _ensure_hermes_home_managed(home: Path):\n         \"category\": \"provider\",\n         \"advanced\": True,\n     },\n+    \"NVIDIA_API_KEY\": {\n+        \"description\": \"NVIDIA NIM API key (build.nvidia.com or local NIM endpoint)\",\n+        \"prompt\": \"NVIDIA NIM API key\",\n+        \"url\": \"https://build.nvidia.com/\",\n+        \"password\": True,\n+        \"category\": \"provider\",\n+        \"advanced\": True,\n+    },\n+    \"NVIDIA_BASE_URL\": {\n+        \"description\": \"NVIDIA NIM base URL override (e.g. http://localhost:8000/v1 for local NIM)\",\n+        \"prompt\": \"NVIDIA NIM base URL (leave empty for default)\",\n+        \"url\": None,\n+        \"password\": [redacted:secret-assignment]\n+        \"category\": \"provider\",\n+        \"advanced\": True,\n+    },\n     \"GLM_API_KEY\": {\n         \"description\": \"Z.AI / GLM API key (also recognized as ZAI_API_KEY / Z_AI_API_KEY)\",\n         \"prompt\": \"Z.AI / GLM API key\","]},{"file":"hermes_cli/doctor.py","hunks":["@@ -825,6 +825,7 @@ def run_doctor(args):\n         (\"Arcee AI\",         (\"ARCEEAI_API_KEY\",),                            \"https://api.arcee.ai/api/v1/models\",  \"ARCEE_BASE_URL\", True),\n         (\"DeepSeek\",         (\"DEEPSEEK_API_KEY\",),                           \"https://api.deepseek.com/v1/models\",  \"DEEPSEEK_BASE_URL\", True),\n         (\"Hugging Face\",     (\"HF_TOKEN\",),                                   \"https://router.huggingface.co/v1/models\", \"HF_BASE_URL\", True),\n+        (\"NVIDIA NIM\",       (\"NVIDIA_API_KEY\",),                             \"https://integrate.api.nvidia.com/v1/models\", \"NVIDIA_BASE_URL\", True),\n         (\"Alibaba/DashScope\", (\"DASHSCOPE_API_KEY\",),                         \"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/models\", \"DASHSCOPE_BASE_URL\", True),\n         # MiniMax: the /anthropic endpoint doesn't support /models, but the /v1 endpoint does.\n         (\"MiniMax\",          (\"MINIMAX_API_KEY\",),                            \"https://api.minimax.io/v1/models\",    \"MINIMAX_BASE_URL\", True),"]},{"file":"hermes_cli/dump.py","hunks":["@@ -296,6 +296,7 @@ def run_dump(args):\n         (\"DEEPSEEK_API_KEY\", \"deepseek\"),\n         (\"DASHSCOPE_API_KEY\", \"dashscope\"),\n         (\"HF_TOKEN\", \"huggingface\"),\n+        (\"NVIDIA_API_KEY\", \"nvidia\"),\n         (\"AI_GATEWAY_API_KEY\", \"ai_gateway\"),\n         (\"OPENCODE_ZEN_API_KEY\", \"opencode_zen\"),\n         (\"OPENCODE_GO_API_KEY\", \"opencode_go\"),"]},{"file":"hermes_cli/main.py","hunks":["@@ -1143,7 +1143,7 @@ def _named_custom_provider_map(cfg) -> dict[str, dict[str, str]]:\n         _model_flow_kimi(config, current_model)\n     elif selected_provider == \"bedrock\":\n         _model_flow_bedrock(config, current_model)\n-    elif selected_provider in (\"gemini\", \"deepseek\", \"xai\", \"zai\", \"kimi-coding-cn\", \"minimax\", \"minimax-cn\", \"kilocode\", \"opencode-zen\", \"opencode-go\", \"ai-gateway\", \"alibaba\", \"huggingface\", \"xiaomi\", \"arcee\", \"ollama-cloud\"):\n+    elif selected_provider in (\"gemini\", \"deepseek\", \"xai\", \"zai\", \"kimi-coding-cn\", \"minimax\", \"minimax-cn\", \"kilocode\", \"opencode-zen\", \"opencode-go\", \"ai-gateway\", \"alibaba\", \"huggingface\", \"xiaomi\", \"arcee\", \"nvidia\", \"ollama-cloud\"):\n         _model_flow_api_key_provider(config, selected_provider, current_model)\n \n     # ── Post-switch cleanup: clear stale OPENAI_BASE_URL ──────────────","@@ -4954,7 +4954,7 @@ def main():\n     )\n     chat_parser.add_argument(\n         \"--provider\",\n-        choices=[\"auto\", \"openrouter\", \"nous\", \"openai-codex\", \"copilot-acp\", \"copilot\", \"anthropic\", \"gemini\", \"xai\", \"ollama-cloud\", \"huggingface\", \"zai\", \"kimi-coding\", \"kimi-coding-cn\", \"minimax\", \"minimax-cn\", \"kilocode\", \"xiaomi\", \"arcee\"],\n+        choices=[\"auto\", \"openrouter\", \"nous\", \"openai-codex\", \"copilot-acp\", \"copilot\", \"anthropic\", \"gemini\", \"xai\", \"ollama-cloud\", \"huggingface\", \"zai\", \"kimi-coding\", \"kimi-coding-cn\", \"minimax\", \"minimax-cn\", \"kilocode\", \"xiaomi\", \"arcee\", \"nvidia\"],\n         default=None,\n         help=\"Inference provider (default: auto)\"\n     )"]},{"file":"hermes_cli/models.py","hunks":["@@ -155,6 +155,20 @@ def _codex_curated_models() -> list[str]:\n         \"grok-4.20-reasoning\",\n         \"grok-4-1-fast-reasoning\",\n     ],\n+    \"nvidia\": [\n+        # NVIDIA flagship reasoning models\n+        \"nvidia/nemotron-3-super-120b-a12b\",\n+        \"nvidia/nemotron-3-nano-30b-a3b\",\n+        \"nvidia/llama-3.3-nemotron-super-49b-v1.5\",\n+        # Third-party agentic models hosted on build.nvidia.com\n+        # (map to OpenRouter defaults — users get familiar picks on NIM)\n+        \"qwen/qwen3.5-397b-a17b\",\n+        \"deepseek-ai/deepseek-v3.2\",\n+        \"moonshotai/kimi-k2.5\",\n+        \"minimaxai/minimax-m2.5\",\n+        \"z-ai/glm5\",\n+        \"openai/gpt-oss-120b\",\n+    ],\n     \"kimi-coding\": [\n         \"kimi-k2.5\",\n         \"kimi-for-coding\",","@@ -536,6 +550,7 @@ class ProviderEntry(NamedTuple):\n     ProviderEntry(\"anthropic\",      \"Anthropic\",                \"Anthropic (Claude models — API key or Claude Code)\"),\n     ProviderEntry(\"openai-codex\",   \"OpenAI Codex\",             \"OpenAI Codex\"),\n     ProviderEntry(\"xiaomi\",         \"Xiaomi MiMo\",              \"Xiaomi MiMo (MiMo-V2 models — pro, omni, flash)\"),\n+    ProviderEntry(\"nvidia\",         \"NVIDIA NIM\",               \"NVIDIA NIM (Nemotron models — build.nvidia.com or local NIM)\"),\n     ProviderEntry(\"qwen-oauth\",     \"Qwen OAuth (Portal)\",      \"Qwen OAuth (reuses local Qwen CLI login)\"),\n     ProviderEntry(\"copilot\",        \"GitHub Copilot\",           \"GitHub Copilot (uses GITHUB_TOKEN or gh auth token)\"),\n     ProviderEntry(\"copilot-acp\",    \"GitHub Copilot ACP\",       \"GitHub Copilot ACP (spawns `copilot --acp --stdio`)\"),","@@ -618,6 +633,10 @@ class ProviderEntry(NamedTuple):\n     \"grok\": \"xai\",\n     \"x-ai\": \"xai\",\n     \"x.ai\": \"xai\",\n+    \"nim\": \"nvidia\",\n+    \"nvidia-nim\": \"nvidia\",\n+    \"build-nvidia\": \"nvidia\",\n+    \"nemotron\": \"nvidia\",\n     \"ollama\": \"custom\",  # bare \"ollama\" = local; use \"ollama-cloud\" for cloud\n     \"ollama_cloud\": \"ollama-cloud\",\n }"]},{"file":"hermes_cli/providers.py","hunks":["@@ -137,6 +137,11 @@ class HermesOverlay:\n         base_url_override=\"https://api.x.ai/v1\",\n         base_url_env_var=\"XAI_BASE_URL\",\n     ),\n+    \"nvidia\": HermesOverlay(\n+        transport=\"openai_chat\",\n+        base_url_override=\"https://integrate.api.nvidia.com/v1\",\n+        base_url_env_var=\"NVIDIA_BASE_URL\",\n+    ),\n     \"xiaomi\": HermesOverlay(\n         transport=\"openai_chat\",\n         base_url_env_var=\"XIAOMI_BASE_URL\",","@@ -191,6 +196,12 @@ class ProviderDef:\n     \"x.ai\": \"xai\",\n     \"grok\": \"xai\",\n \n+    # nvidia\n+    \"nim\": \"nvidia\",\n+    \"nvidia-nim\": \"nvidia\",\n+    \"build-nvidia\": \"nvidia\",\n+    \"nemotron\": \"nvidia\",\n+\n     # kimi-for-coding (models.dev ID)\n     \"kimi\": \"kimi-for-coding\",\n     \"kimi-coding\": \"kimi-for-coding\","]},{"file":"scripts/release.py","hunks":["@@ -255,6 +255,7 @@\n     \"[redacted:email]\": \"anthhub\",\n     \"[redacted:email]\": \"shenuu\",\n     \"[redacted:email]\": \"xiayh0107\",\n+    \"[redacted:email]\": \"anniesurla\",\n }\n \n "]},{"file":"tests/hermes_cli/test_api_key_providers.py","hunks":["@@ -33,6 +33,7 @@ class TestProviderRegistry:\n         (\"huggingface\", \"Hugging Face\", \"api_key\"),\n         (\"zai\", \"Z.AI / GLM\", \"api_key\"),\n         (\"xai\", \"xAI\", \"api_key\"),\n+        (\"nvidia\", \"NVIDIA NIM\", \"api_key\"),\n         (\"kimi-coding\", \"Kimi / Moonshot\", \"api_key\"),\n         (\"minimax\", \"MiniMax\", \"api_key\"),\n         (\"minimax-cn\", \"MiniMax (China)\", \"api_key\"),","@@ -57,6 +58,12 @@ def test_xai_env_vars(self):\n         assert pconfig.base_url_env_var == \"XAI_BASE_URL\"\n         assert pconfig.inference_base_url == \"https://api.x.ai/v1\"\n \n+    def test_nvidia_env_vars(self):\n+        pconfig = PROVIDER_REGISTRY[\"nvidia\"]\n+        assert pconfig.api_key_env_vars == (\"NVIDIA_API_KEY\",)\n+        assert pconfig.base_url_env_var == \"NVIDIA_BASE_URL\"\n+        assert pconfig.inference_base_url == \"https://integrate.api.nvidia.com/v1\"\n+\n     def test_copilot_env_vars(self):\n         pconfig = PROVIDER_REGISTRY[\"copilot\"]\n         assert pconfig.api_key_env_vars == (\"COPILOT_GITHUB_TOKEN\", \"GH_TOKEN\", \"GITHUB_TOKEN\")"]},{"file":"tests/tools/test_local_env_blocklist.py","hunks":["@@ -86,6 +86,7 @@ def test_registry_derived_vars_are_stripped(self):\n             \"MINIMAX_API_KEY\": \"[redacted:secret-assignment]\",\n             \"MINIMAX_CN_API_KEY\": \"[redacted:secret-assignment]\",\n             \"DEEPSEEK_API_KEY\": \"[redacted:secret-assignment]\",\n+            \"NVIDIA_API_KEY\": \"[redacted:secret-assignment]\",\n         }\n         result_env = _run_with_env(extra_os_env=registry_vars)\n "]},{"file":"website/docs/getting-started/quickstart.md","hunks":["@@ -61,6 +61,7 @@ hermes setup       # Or configure everything at once\n | **OpenCode Zen** | Pay-as-you-go access to curated models | Set `OPENCODE_ZEN_API_KEY` |\n | **OpenCode Go** | $10/month subscription for open models | Set `OPENCODE_GO_API_KEY` |\n | **DeepSeek** | Direct DeepSeek API access | Set `DEEPSEEK_API_KEY` |\n+| **NVIDIA NIM** | Nemotron models via build.nvidia.com or local NIM | Set `NVIDIA_API_KEY` (optional: `NVIDIA_BASE_URL`) |\n | **GitHub Copilot** | GitHub Copilot subscription (GPT-5.x, Claude, Gemini, etc.) | OAuth via `hermes model`, or `COPILOT_GITHUB_TOKEN` / `GH_TOKEN` |\n | **GitHub Copilot ACP** | Copilot ACP agent backend (spawns local `copilot` CLI) | `hermes model` (requires `copilot` CLI + `copilot login`) |\n | **Vercel AI Gateway** | Vercel AI Gateway routing | Set `AI_GATEWAY_API_KEY` |"]},{"file":"website/docs/integrations/providers.md","hunks":["@@ -295,6 +295,30 @@ When using xAI as a provider (any base URL containing `x.ai`), Hermes automatica\n \n No configuration is needed — caching activates automatically when an xAI endpoint is detected and a session ID is available. This reduces latency and cost for multi-turn conversations.\n \n+### NVIDIA NIM\n+\n+Nemotron and other open source models via [build.nvidia.com](https://build.nvidia.com) (free API key) or a local NIM endpoint.\n+\n+```bash\n+# Cloud (build.nvidia.com)\n+hermes chat --provider nvidia --model nvidia/nemotron-3-super-120b-a12b\n+# Requires: NVIDIA_API_KEY in ~/.hermes/.env\n+\n+# Local NIM endpoint — override base URL\n+NVIDIA_BASE_URL=http://localhost:8000/v1 hermes chat --provider nvidia --model nvidia/nemotron-3-super-120b-a12b\n+```\n+\n+Or set it permanently in `config.yaml`:\n+```yaml\n+model:\n+  provider: \"nvidia\"\n+  default: \"nvidia/nemotron-3-super-120b-a12b\"\n+```\n+\n+:::tip Local NIM\n+For on-prem deployments (DGX Spark, local GPU), set `NVIDIA_BASE_URL=http://localhost:8000/v1`. NIM exposes the same OpenAI-compatible chat completions API as build.nvidia.com, so switching between cloud and local is a one-line env-var change.\n+:::\n+\n ### Hugging Face Inference Providers\n \n [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) routes to 20+ open models through a unified OpenAI-compatible endpoint (`router.huggingface.co/v1`). Requests are automatically routed to the fastest available backend (Groq, Together, SambaNova, etc.) with automatic failover."]},{"file":"website/docs/user-guide/features/fallback-providers.md","hunks":["@@ -47,6 +47,7 @@ Both `provider` and `model` are **required**. If either is missing, the fallback\n | MiniMax | `minimax` | `MINIMAX_API_KEY` |\n | MiniMax (China) | `minimax-cn` | `MINIMAX_CN_API_KEY` |\n | DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` |\n+| NVIDIA NIM | `nvidia` | `NVIDIA_API_KEY` (optional: `NVIDIA_BASE_URL`) |\n | OpenCode Zen | `opencode-zen` | `OPENCODE_ZEN_API_KEY` |\n | OpenCode Go | `opencode-go` | `OPENCODE_GO_API_KEY` |\n | Kilo Code | `kilocode` | `KILOCODE_API_KEY` |\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}