fix(nvidia): expand NIM chat model catalog (#7247)

* fix(nvidia): expand NIM chat model catalog with newly-observed models

NVIDIA NIM's live catalog has added several chat-completions-capable models
since the registry was last swept (#6108): Llama 3.x/4 family, Mistral
variants, several Nemotron/Nemoguard safety and reasoning models, Qwen3-Next,
and a few smaller vendor models (Sarvam, Stockmark, Upstage). Adds them to
open-sse/config/providers/registry/nvidia/index.ts with supportsReasoning /
supportsVision flags where applicable.

minimaxai/minimax-m3 is intentionally NOT re-added — it stays excluded per
the #3329 guard (still 404s for most callers). Two non-chat entries from the
upstream sweep (nvidia/gliner-pii — an NER/PII tagger, and
google/diffusiongemma-26b-a4b-it — a diffusion model) are dropped: this
registry only models the /v1/chat/completions surface, and OmniRoute already
covers NVIDIA's embedding/ASR/TTS models separately in embeddingRegistry.ts
and audioRegistry.ts. Upstream's per-model `thinkingFormat` capability
override (a legacy open-sse/providers/capabilities.js concept) has no
OmniRoute equivalent — reasoning-param translation here is scoped per
PROVIDER (translator/paramSupport.ts, executors/default.ts), not per model,
so only the catalog needed porting.

Co-authored-by: baibiao <baibiaoxxl123@outlook.com>
Inspired-by: https://github.com/decolua/9router/pull/2373

* chore(changelog): fragment for #7247

---------

Co-authored-by: baibiao <baibiaoxxl123@outlook.com>
This commit is contained in:
Diego Rodrigues de Sa e Souza
2026-07-17 10:40:52 -03:00
committed by GitHub
parent ea32dcf863
commit 9f98ba80cc
3 changed files with 170 additions and 0 deletions

View File

@@ -0,0 +1 @@
- **fix(nvidia):** expand NIM chat model catalog with newly-observed models. (thanks @spacesky-cell)

View File

@@ -39,5 +39,93 @@ export const nvidiaProvider: RegistryEntry = {
{ id: "openai/gpt-oss-20b", name: "GPT OSS 20B", toolCalling: false },
{ id: "nvidia/nemotron-3-super-120b-a12b", name: "Nemotron 3 Super 120B A12B" },
{ id: "nvidia/nemotron-3-ultra-550b-a55b", name: "Nemotron 3 Ultra 550B" },
// Port of decolua/9router#2373 ("fix(nvidia): expand NIM chat model catalog"):
// additional live-catalog models observed to serve /v1/chat/completions.
// `minimaxai/minimax-m3` from that PR is intentionally NOT re-added — it stays
// excluded per the #3329 guard (nvidia-minimax-m3-removed-3329.test.ts).
// Non-chat entries from the same PR (nvidia/gliner-pii — NER tagger, not a chat
// model; google/diffusiongemma-26b-a4b-it — diffusion model) are dropped for the
// same reason: this registry only models the /v1/chat/completions surface.
{ id: "abacusai/dracarys-llama-3.1-70b-instruct", name: "Dracarys Llama 3.1 70B Instruct" },
{ id: "google/gemma-2-2b-it", name: "Gemma 2 2B IT" },
{ id: "google/gemma-3n-e2b-it", name: "Gemma 3n E2B IT" },
{ id: "meta/llama-3.1-8b-instruct", name: "Llama 3.1 8B Instruct" },
{
id: "meta/llama-3.2-11b-vision-instruct",
name: "Llama 3.2 11B Vision Instruct",
supportsVision: true,
},
{ id: "meta/llama-3.2-1b-instruct", name: "Llama 3.2 1B Instruct" },
{ id: "meta/llama-3.2-3b-instruct", name: "Llama 3.2 3B Instruct" },
{
id: "meta/llama-3.2-90b-vision-instruct",
name: "Llama 3.2 90B Vision Instruct",
supportsVision: true,
},
{ id: "meta/llama-4-maverick-17b-128e-instruct", name: "Llama 4 Maverick 17B 128E Instruct" },
{ id: "meta/llama-guard-4-12b", name: "Llama Guard 4 12B" },
{ id: "mistralai/ministral-14b-instruct-2512", name: "Ministral 14B Instruct 2512" },
{ id: "mistralai/mistral-medium-3.5-128b", name: "Mistral Medium 3.5 128B" },
{ id: "mistralai/mistral-nemotron", name: "Mistral Nemotron" },
{ id: "mistralai/mixtral-8x7b-instruct-v0.1", name: "Mixtral 8x7B Instruct v0.1" },
{
id: "nvidia/ising-calibration-1-35b-a3b",
name: "Ising Calibration 1 35B A3B",
supportsReasoning: true,
},
{
id: "nvidia/llama-3.1-nemoguard-8b-content-safety",
name: "Llama 3.1 Nemoguard 8B Content Safety",
},
{
id: "nvidia/llama-3.1-nemoguard-8b-topic-control",
name: "Llama 3.1 Nemoguard 8B Topic Control",
},
{ id: "nvidia/llama-3.1-nemotron-nano-8b-v1", name: "Llama 3.1 Nemotron Nano 8B v1" },
{
id: "nvidia/llama-3.1-nemotron-nano-vl-8b-v1",
name: "Llama 3.1 Nemotron Nano VL 8B v1",
supportsVision: true,
},
{
id: "nvidia/llama-3.1-nemotron-safety-guard-8b-v3",
name: "Llama 3.1 Nemotron Safety Guard 8B v3",
},
{ id: "nvidia/llama-3.3-nemotron-super-49b-v1", name: "Llama 3.3 Nemotron Super 49B v1" },
{ id: "nvidia/llama-3.3-nemotron-super-49b-v1.5", name: "Llama 3.3 Nemotron Super 49B v1.5" },
{ id: "nvidia/nemotron-3-content-safety", name: "Nemotron 3 Content Safety" },
{
id: "nvidia/nemotron-3-nano-30b-a3b",
name: "Nemotron 3 Nano 30B A3B",
supportsReasoning: true,
},
{
id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
name: "Nemotron 3 Nano Omni 30B A3B Reasoning",
supportsReasoning: true,
supportsVision: true,
},
{ id: "nvidia/nemotron-3.5-content-safety", name: "Nemotron 3.5 Content Safety" },
{ id: "nvidia/nemotron-mini-4b-instruct", name: "Nemotron Mini 4B Instruct" },
{
id: "nvidia/nemotron-nano-12b-v2-vl",
name: "Nemotron Nano 12B v2 VL",
supportsReasoning: true,
supportsVision: true,
},
{
id: "nvidia/nvidia-nemotron-nano-9b-v2",
name: "NVIDIA Nemotron Nano 9B v2",
supportsReasoning: true,
},
{ id: "nvidia/riva-translate-4b-instruct-v1.1", name: "Riva Translate 4B Instruct v1.1" },
{
id: "qwen/qwen3-next-80b-a3b-instruct",
name: "Qwen3 Next 80B A3B Instruct",
supportsReasoning: true,
},
{ id: "sarvamai/sarvam-m", name: "Sarvam M" },
{ id: "stockmark/stockmark-2-100b-instruct", name: "Stockmark 2 100B Instruct" },
{ id: "upstage/solar-10.7b-instruct", name: "Solar 10.7B Instruct" },
],
};

View File

@@ -0,0 +1,81 @@
import test from "node:test";
import assert from "node:assert/strict";
import { nvidiaProvider } from "../../open-sse/config/providers/registry/nvidia/index.ts";
// Port of decolua/9router#2373 ("fix(nvidia): expand NIM chat model catalog"). Upstream's
// PR also added a per-model `thinkingFormat`/`kind` capability shape in a legacy
// open-sse/providers/capabilities.js file that has no equivalent in OmniRoute — reasoning
// translation here is per-PROVIDER (open-sse/translator/paramSupport.ts,
// executors/default.ts, both gated on `this.provider === "nvidia"`), not per-model, so
// only the catalog (RegistryModel.supportsReasoning/supportsVision) needed porting.
// Embedding/ASR/TTS entries from the same upstream PR are already covered by
// open-sse/config/embeddingRegistry.ts and audioRegistry.ts, so they are not duplicated
// here. `minimaxai/minimax-m3` is intentionally excluded — see the #3329 guard
// (nvidia-minimax-m3-removed-3329.test.ts).
const modelIds = new Set(nvidiaProvider.models.map((m) => m.id));
test("#2373: NVIDIA NIM registry gains the newly-observed chat-completions models", () => {
for (const id of [
"abacusai/dracarys-llama-3.1-70b-instruct",
"google/gemma-2-2b-it",
"google/gemma-3n-e2b-it",
"meta/llama-3.1-8b-instruct",
"meta/llama-3.2-11b-vision-instruct",
"meta/llama-4-maverick-17b-128e-instruct",
"meta/llama-guard-4-12b",
"mistralai/ministral-14b-instruct-2512",
"mistralai/mistral-medium-3.5-128b",
"mistralai/mistral-nemotron",
"mistralai/mixtral-8x7b-instruct-v0.1",
"nvidia/ising-calibration-1-35b-a3b",
"nvidia/llama-3.1-nemoguard-8b-content-safety",
"nvidia/llama-3.3-nemotron-super-49b-v1.5",
"nvidia/nemotron-3-nano-30b-a3b",
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
"nvidia/nemotron-nano-12b-v2-vl",
"nvidia/nvidia-nemotron-nano-9b-v2",
"qwen/qwen3-next-80b-a3b-instruct",
"sarvamai/sarvam-m",
"stockmark/stockmark-2-100b-instruct",
"upstage/solar-10.7b-instruct",
]) {
assert.ok(modelIds.has(id), `expected nvidia registry to include ${id}`);
}
});
test("#2373: reasoning-capable NVIDIA-hosted models are flagged supportsReasoning", () => {
const reasoningIds = [
"nvidia/ising-calibration-1-35b-a3b",
"nvidia/nemotron-3-nano-30b-a3b",
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
"nvidia/nemotron-nano-12b-v2-vl",
"nvidia/nvidia-nemotron-nano-9b-v2",
"qwen/qwen3-next-80b-a3b-instruct",
];
for (const id of reasoningIds) {
const model = nvidiaProvider.models.find((m) => m.id === id);
assert.ok(model, `model ${id} must exist`);
assert.equal(model?.supportsReasoning, true, `${id} must be supportsReasoning: true`);
}
});
test("#2373/#3329: minimaxai/minimax-m3 stays excluded from the nvidia tier", () => {
assert.ok(
!modelIds.has("minimaxai/minimax-m3"),
"minimaxai/minimax-m3 must not be re-added to the nvidia registry (404 upstream, #3329)"
);
// sanity: the working sibling stays listed
assert.ok(modelIds.has("minimaxai/minimax-m2.7"), "minimaxai/minimax-m2.7 stays available");
});
test("#2373: non-chat model kinds (NER/diffusion) from the upstream PR are not ported into the chat registry", () => {
assert.ok(
!modelIds.has("nvidia/gliner-pii"),
"nvidia/gliner-pii is an NER/PII tagger, not a chat-completions model"
);
assert.ok(
!modelIds.has("google/diffusiongemma-26b-a4b-it"),
"google/diffusiongemma-26b-a4b-it is a diffusion model, not a chat-completions model"
);
});