Revert "[CI] Remove deleted nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16 and its arch aliases" (#55392)
Misha Goin committed
Sep 4, 2026 at 17:45 UTC
8f269a93bbcca6e2737616d76365a5ac771c4d27
3 files changed
+40
tests/models/registry.py
+30
@@ -7,6 +7,7 @@ from typing import Any, Literal
7
8
import pytest
9
from packaging.version import Version
10
+from transformers import PretrainedConfig
11
from transformers import __version__ as TRANSFORMERS_VERSION
12
13
from vllm.config.model import ModelDType, TokenizerMode
@@ -1201,6 +1202,35 @@ _MULTIMODAL_EXAMPLE_MODELS = {
1202
},
1203
trust_remote_code=True,
1204
),
1205
+ "NemotronH_Nano_Omni_Reasoning_V3": _HfExamplesInfo(
1206
+ "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16",
1207
+ max_model_len=4096,
1208
+ # NemotronH layers are constructed via `hybrid_override_pattern`
1209
+ use_original_num_layers=True,
1210
+ hf_overrides={
1211
+ "vision_config": PretrainedConfig(
1212
+ args={
1213
+ "min_num_patches": 1,
1214
+ "max_num_patches": 12,
1215
+ "model": "vit_huge_patch16_224",
1216
+ },
1217
+ video_temporal_patch_size=2,
1218
+ # TODO(nhaber): This is `true` in the official `config.json`,
1219
+ # but this causes a processor exception in the tests due to a known bug
1220
+ # with mixed-resolution video when `true`. To be resolved.
1221
+ video_maintain_aspect_ratio=False,
1222
+ ),
1223
+ "text_config": {"num_hidden_layers": 2, "hybrid_override_pattern": "M*"},
1224
+ },
1225
+ trust_remote_code=True,
1226
+ ),
1227
+ "NemotronH_Super_Omni_Reasoning_V3": _HfExamplesInfo(
1228
+ "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16", is_available_online=False
1229
+ ),
1230
+ # TODO: Change repo id once pertinent archs are public.
1231
+ "NemotronH_Omni_Reasoning_V3": _HfExamplesInfo(
1232
+ "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16", is_available_online=False
1233
+ ),
1234
"OpenCUAForConditionalGeneration": _HfExamplesInfo(
1235
"xlangai/OpenCUA-7B",
1236
trust_remote_code=True,
vllm/config/speculative.py
+7
@@ -797,6 +797,13 @@ class SpeculativeConfig:
797
{"n_predict": n_predict, "architectures": ["ErnieMTPModel"]}
798
)
799
800
+ if hf_config.architectures[0] in (
801
+ "NemotronH_Super_Omni_Reasoning_V3",
802
+ "NemotronH_Omni_Reasoning_V3",
803
+ ):
804
+ # Promote VLM's text_config so MTP detection below fires correctly
805
+ hf_config = hf_config.text_config
806
+
807
if (
808
hf_config.model_type in {"nemotron_h", "nemotron_h_puzzle"}
809
and hasattr(hf_config, "num_nextn_predict_layers")
vllm/model_executor/models/registry.py
+3
@@ -520,6 +520,9 @@ _MULTIMODAL_MODELS = {
520
"MossAudioModel": ("moss_audio", "MossAudioModel"),
521
"HfMoondream": ("moondream3", "Moondream3ForCausalLM"),
522
"NemotronH_Nano_VL_V2": ("nano_nemotron_vl", "NemotronH_Nano_VL_V2"),
523
+ "NemotronH_Nano_Omni_Reasoning_V3": ("nano_nemotron_vl", "NemotronH_Nano_VL_V2"),
524
+ "NemotronH_Super_Omni_Reasoning_V3": ("nano_nemotron_vl", "NemotronH_Nano_VL_V2"),
525
+ "NemotronH_Omni_Reasoning_V3": ("nano_nemotron_vl", "NemotronH_Nano_VL_V2"),
526
"NVLM_D": ("nvlm_d", "NVLM_D_Model"),
527
"MuseGlimmerForConditionalGeneration": ("muse_glimmer", "MuseGlimmerForCausalLM"),
528
"OpenCUAForConditionalGeneration": ("opencua", "OpenCUAForConditionalGeneration"),