Skip to content

Commit 3832268

Browse files
authored
docs(model): republish Nemotron 3.5 Super guides (#6482)
Signed-off-by: Chen Cui <chcui@nvidia.com>
1 parent d86a5c0 commit 3832268

9 files changed

Lines changed: 56 additions & 71 deletions

File tree

‎docs/conf.py‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@
5757
"_build",
5858
"Thumbs.db",
5959
".DS_Store",
60-
# Keep these guides in GitHub, but omit them from the published HTML.
61-
"models/nemotron/nemotron3.5-super-vl.md",
62-
"models/nemotron/nemotron3.5-super-vl-text-only.md",
6360
"skills/linting-and-formatting/SKILL.md",
6461
"skills/parity-testing/SKILL.md",
6562
"skills/pr-review/SKILL.md",

‎docs/fern/docs.yml‎

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,3 @@ versions:
2121
- display-name: nightly
2222
path: versions/nightly.yml
2323
slug: nightly
24-
25-
redirects:
26-
# Unpublished guides remain in GitHub; send bookmarks to Supported Models.
27-
# The catalog landing page exists in nightly, not in the frozen default version.
28-
- source: /nemo/megatron-bridge/supported-models/nemotron/nemotron-3-5-super-vl
29-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
30-
- source: /nemo/megatron-bridge/nightly/supported-models/nemotron/nemotron-3-5-super-vl
31-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
32-
- source: /nemo/megatron-bridge/supported-models/nemotron/nemotron-3-5-super-text-only
33-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
34-
- source: /nemo/megatron-bridge/nightly/supported-models/nemotron/nemotron-3-5-super-text-only
35-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
36-
- source: /nemo/megatron-bridge/models/nemotron/nemotron3.5-super-vl.html
37-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
38-
- source: /nemo/megatron-bridge/nightly/models/nemotron/nemotron3.5-super-vl.html
39-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
40-
- source: /nemo/megatron-bridge/models/nemotron/nemotron3.5-super-vl-text-only.html
41-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models
42-
- source: /nemo/megatron-bridge/nightly/models/nemotron/nemotron3.5-super-vl-text-only.html
43-
destination: /nemo/megatron-bridge/nightly/supported-models/supported-models

‎docs/fern/versions/nightly.yml‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,10 @@ navigation:
124124
path: ./nightly/pages/models/nemotron/nemotron3-ultra.mdx
125125
- page: Nemotron 3.5 Lightning
126126
path: ./nightly/pages/models/nemotron/nemotron3.5-lightning.mdx
127-
# Super VL guides remain in GitHub, but are excluded from publication.
127+
- page: Nemotron 3.5 Super VL
128+
path: ./nightly/pages/models/nemotron/nemotron3.5-super-vl.mdx
129+
- page: Nemotron-3.5 Super Text-only
130+
path: ./nightly/pages/models/nemotron/nemotron3.5-super-vl-text-only.mdx
128131
section: Nemotron
129132
- contents:
130133
- page: OLMoE

‎docs/fern/versions/nightly/pages/models/README.mdx‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
Choose a model to open its interactive import/export and training configurations. Every option comes directly from an authoritative YAML verification card; independent fields are never combined into synthetic commands.
66

7-
Current inventory: **26 model cards** and **365 concrete configurations**.
7+
Current inventory: **28 model cards** and **401 concrete configurations**.
88

99
Each model page lets you select import/export, pretraining, benchmarking, SFT, LoRA, or long-context SFT and immediately see the exact command and expected result for the recorded precision and GPU.
1010

@@ -112,7 +112,7 @@ Choose a model to inspect its recorded import/export, training, and precision co
112112
<section class="verification-provider-card">
113113
<header class="verification-provider-heading">
114114
<strong>NVIDIA</strong>
115-
<span>6 models</span>
115+
<span>8 models</span>
116116
</header>
117117
<div class="verification-provider-models">
118118
<a class="verification-model-link" href="nemotron/nemotron3-nano#verified-nemotron-3-nano-30b-a3b">
@@ -141,6 +141,14 @@ Choose a model to inspect its recorded import/export, training, and precision co
141141
<strong title="nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16">NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16</strong>
142142
<span class="verification-status verification-status--verified" title="Verified">✓ Verified</span>
143143
</a>
144+
<a class="verification-model-link" href="nemotron/nemotron3.5-super-vl#verified-nemotron-3.5-super-vl-120b-a12b">
145+
<strong title="nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16">NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16</strong>
146+
<span class="verification-status verification-status--partial" title="Partial">◐ Partial</span>
147+
</a>
148+
<a class="verification-model-link" href="nemotron/nemotron3.5-super-vl-text-only#verified-nemotron-3.5-super-vl-120b-a12b-text-only">
149+
<strong title="nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16">NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16</strong>
150+
<span class="verification-status verification-status--partial" title="Partial">◐ Partial</span>
151+
</a>
144152
</div>
145153
</section>
146154
<section class="verification-provider-card">

‎docs/fern/versions/nightly/pages/models/nemotron/index.mdx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Nemotron model documentation is organized by model variant.
1010
| Nemotron-3 Super | [nemotron3-super.md](nemotron3-super.md) |
1111
| Nemotron-3 Ultra | [nemotron3-ultra.md](nemotron3-ultra.md) |
1212
| Nemotron-3.5 Lightning | [nemotron3.5-lightning.md](nemotron3.5-lightning.md) |
13+
| Nemotron-3.5 Super VL | [nemotron3.5-super-vl.md](nemotron3.5-super-vl.md) |
14+
| Nemotron-3.5 Super Text-only | [nemotron3.5-super-vl-text-only.md](nemotron3.5-super-vl-text-only.md) |
1315

1416
## Examples
1517

‎docs/models/README.md‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
Choose a model to open its interactive import/export and training configurations. Every option comes directly from an authoritative YAML verification card; independent fields are never combined into synthetic commands.
66

7-
Current inventory: **26 model cards** and **365 concrete configurations**.
7+
Current inventory: **28 model cards** and **401 concrete configurations**.
88

99
Each model page lets you select import/export, pretraining, benchmarking, SFT, LoRA, or long-context SFT and immediately see the exact command and expected result for the recorded precision and GPU.
1010

@@ -112,7 +112,7 @@ Choose a model to inspect its recorded import/export, training, and precision co
112112
<section class="verification-provider-card">
113113
<header class="verification-provider-heading">
114114
<strong>NVIDIA</strong>
115-
<span>6 models</span>
115+
<span>8 models</span>
116116
</header>
117117
<div class="verification-provider-models">
118118
<a class="verification-model-link" href="nemotron/nemotron3-nano.html#verified-nemotron-3-nano-30b-a3b">
@@ -139,6 +139,14 @@ Choose a model to inspect its recorded import/export, training, and precision co
139139
<strong title="nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16">NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16</strong>
140140
<span class="verification-status verification-status--verified" title="Verified">✓ Verified</span>
141141
</a>
142+
<a class="verification-model-link" href="nemotron/nemotron3.5-super-vl.html#verified-nemotron-3.5-super-vl-120b-a12b">
143+
<strong title="nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16">NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16</strong>
144+
<span class="verification-status verification-status--partial" title="Partial">◐ Partial</span>
145+
</a>
146+
<a class="verification-model-link" href="nemotron/nemotron3.5-super-vl-text-only.html#verified-nemotron-3.5-super-vl-120b-a12b-text-only">
147+
<strong title="nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16">NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16</strong>
148+
<span class="verification-status verification-status--partial" title="Partial">◐ Partial</span>
149+
</a>
142150
</div>
143151
</section>
144152
<section class="verification-provider-card">

‎docs/models/nemotron/index.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ nemotron-3-omni.md
1111
nemotron3-super.md
1212
nemotron3-ultra.md
1313
nemotron3.5-lightning.md
14+
nemotron3.5-super-vl.md
15+
nemotron3.5-super-vl-text-only.md
1416
```
1517

1618
| Variant | Guide |
@@ -21,6 +23,8 @@ nemotron3.5-lightning.md
2123
| Nemotron-3 Super | [nemotron3-super.md](nemotron3-super.md) |
2224
| Nemotron-3 Ultra | [nemotron3-ultra.md](nemotron3-ultra.md) |
2325
| Nemotron-3.5 Lightning | [nemotron3.5-lightning.md](nemotron3.5-lightning.md) |
26+
| Nemotron-3.5 Super VL | [nemotron3.5-super-vl.md](nemotron3.5-super-vl.md) |
27+
| Nemotron-3.5 Super Text-only | [nemotron3.5-super-vl-text-only.md](nemotron3.5-super-vl-text-only.md) |
2428

2529
## Examples
2630

‎scripts/docs/generate_model_verification_catalog.py‎

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,6 @@
133133
"qwen3.6-35b-a3b": "Qwen3.6-35B-A3B",
134134
"qwen3.8-27b": "Qwen3.8-27B",
135135
}
136-
# Retain the cards and canonical sources, but do not link unpublished guides.
137-
UNPUBLISHED_MODEL_DOCS = frozenset(
138-
{
139-
"models/nemotron/nemotron3.5-super-vl.md",
140-
"models/nemotron/nemotron3.5-super-vl-text-only.md",
141-
}
142-
)
143136
MODEL_INTRO_SOURCES = {
144137
"glm5-2": "models/glm/glm5.md",
145138
"gpt-oss-120b": "models/gpt_oss/gpt-oss.md",
@@ -812,7 +805,6 @@ def _model_explorer(entries: list[dict[str, object]], *, heading_level: int = 2,
812805
def render_supported_models_page(catalog: dict[str, object], repo_root: Path, *, fern: bool) -> str:
813806
"""Render the generated Supported Models directory for Sphinx or Fern."""
814807
models = [_mapping(model, "catalog model") for model in catalog["models"]]
815-
models = [model for model in models if _find_model_doc(repo_root, model) not in UNPUBLISHED_MODEL_DOCS]
816808
entry_count = sum(len(model["entries"]) for model in models)
817809
lines = [
818810
FERN_GENERATED_NOTICE if fern else GENERATED_NOTICE,
@@ -829,7 +821,7 @@ def render_supported_models_page(catalog: dict[str, object], repo_root: Path, *,
829821
"SFT and immediately see the exact command and expected result for the recorded precision and GPU.",
830822
"",
831823
]
832-
lines.extend(_model_directory({**catalog, "models": models}, repo_root, fern=fern))
824+
lines.extend(_model_directory(catalog, repo_root, fern=fern))
833825
lines.extend(
834826
[
835827
"## Verification status",

‎tests/unit_tests/doc_consistency/test_model_verification_catalog.py‎

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import ast
16+
import fnmatch
1517
import html
1618
import importlib.util
1719
import re
@@ -180,7 +182,7 @@ def test_normalizer_never_generates_a_cartesian_product(generator: ModuleType, t
180182
def test_catalog_is_a_simple_model_directory(generator: ModuleType, catalog: dict[str, object]) -> None:
181183
page = generator.render_supported_models_page(catalog, REPO_ROOT, fern=False)
182184

183-
assert page.count('class="verification-model-link"') == len(catalog["models"]) - 2
185+
assert page.count('class="verification-model-link"') == len(catalog["models"])
184186
assert "never combined into synthetic commands" in page
185187
assert 'href="deepseek/deepseek-v3.html#verified-deepseek-v3"' in page
186188
assert "NVIDIA-Nemotron-3-Super-120B-A12B-BF16</strong> <!-- pragma: allowlist secret -->" in page
@@ -320,48 +322,37 @@ def test_model_page_merge_preserves_intro_and_replaces_old_sections(generator: M
320322

321323

322324
@pytest.mark.parametrize("guide", ["nemotron3.5-super-vl", "nemotron3.5-super-vl-text-only"])
323-
def test_unpublished_nemotron_guides_remain_in_sources_without_public_links(
324-
generator: ModuleType, catalog: dict[str, object], guide: str
325-
) -> None:
325+
def test_released_nemotron_guides_are_published(generator: ModuleType, catalog: dict[str, object], guide: str) -> None:
326326
index = (REPO_ROOT / "docs/models/nemotron/index.md").read_text(encoding="utf-8")
327327
fern_index = (REPO_ROOT / "docs/fern/versions/nightly/pages/models/nemotron/index.mdx").read_text(encoding="utf-8")
328328
nav = (REPO_ROOT / "docs/fern/versions/nightly.yml").read_text(encoding="utf-8")
329329

330-
assert guide not in index
331-
assert guide not in fern_index
332-
assert f"path: ./nightly/pages/models/nemotron/{guide}.mdx" not in nav
330+
assert f"\n{guide}.md\n" in index
331+
assert f"]({guide}.md)" in index
332+
assert f"]({guide}.md)" in fern_index
333+
assert f"path: ./nightly/pages/models/nemotron/{guide}.mdx" in nav
333334
assert (REPO_ROOT / f"docs/models/nemotron/{guide}.md").is_file()
334335
assert (REPO_ROOT / f"docs/fern/versions/nightly/pages/models/nemotron/{guide}.mdx").is_file()
335336
for fern in (False, True):
336337
page = generator.render_supported_models_page(catalog, REPO_ROOT, fern=fern)
337-
assert guide not in page
338-
assert "nemotron3-super" in page
339-
assert "nemotron3-ultra" in page
340-
assert f"**{len(catalog['models']) - 2} model cards**" in page
341-
342-
343-
def test_unpublished_nemotron_redirects_target_the_nightly_catalog() -> None:
344-
config = yaml.safe_load((REPO_ROOT / "docs/fern/docs.yml").read_text(encoding="utf-8"))
345-
redirects = {redirect["source"]: redirect["destination"] for redirect in config["redirects"]}
346-
paths = (
347-
"supported-models/nemotron/nemotron-3-5-super-vl",
348-
"supported-models/nemotron/nemotron-3-5-super-text-only",
349-
"models/nemotron/nemotron3.5-super-vl.html",
350-
"models/nemotron/nemotron3.5-super-vl-text-only.html",
351-
)
352-
for version in ("", "nightly/"):
353-
for path in paths:
354-
assert (
355-
redirects[f"/nemo/megatron-bridge/{version}{path}"]
356-
== "/nemo/megatron-bridge/nightly/supported-models/supported-models"
357-
)
358-
# The frozen default version lacks this landing page; nightly contains it.
359-
nav = yaml.safe_load((REPO_ROOT / "docs/fern/versions/nightly.yml").read_text(encoding="utf-8"))
360-
section = next(item for item in nav["navigation"] if item.get("section") == "Supported Models")
361-
assert any(
362-
item.get("page") == "Supported Models" and item.get("path") == "./nightly/pages/models/README.mdx"
363-
for item in section["contents"]
338+
suffix = "" if fern else ".html"
339+
assert f'href="nemotron/{guide}{suffix}#' in page
340+
assert f"**{len(catalog['models'])} model cards**" in page
341+
342+
config = ast.parse((REPO_ROOT / "docs/conf.py").read_text(encoding="utf-8"))
343+
excludes = next(
344+
ast.literal_eval(node.value)
345+
for node in config.body
346+
if isinstance(node, ast.Assign)
347+
and any(isinstance(target, ast.Name) and target.id == "exclude_patterns" for target in node.targets)
364348
)
349+
assert not any(fnmatch.fnmatch(f"models/nemotron/{guide}.md", pattern) for pattern in excludes)
350+
351+
fern_config = yaml.safe_load((REPO_ROOT / "docs/fern/docs.yml").read_text(encoding="utf-8"))
352+
slug = "nemotron-3-5-super-text-only" if guide.endswith("text-only") else "nemotron-3-5-super-vl"
353+
for redirect in fern_config.get("redirects", []):
354+
assert not redirect["source"].endswith(f"/supported-models/nemotron/{slug}")
355+
assert not redirect["source"].endswith(f"/models/nemotron/{guide}.html")
365356

366357

367358
def test_generated_outputs_and_navigation_are_current(generator: ModuleType, catalog: dict[str, object]) -> None:

0 commit comments

Comments
 (0)