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"),