diff --git a/.github/workflows/fern-docs.yml b/.github/workflows/fern-docs.yml index a6dcca313b41..2544cb956efb 100644 --- a/.github/workflows/fern-docs.yml +++ b/.github/workflows/fern-docs.yml @@ -219,14 +219,6 @@ jobs: cp source-checkout/docs/fern/pages/home/index.mdx docs-checkout/fern/index.mdx sed -i 's|\.\./\.\./assets/|./assets/|g' docs-checkout/fern/index.mdx - # Sync root-level assets/ (docs.yml logos/fonts and index.mdx reference - # ./assets/ relative to the Fern root, not pages-dev). Merge-copy without - # deleting so assets still referenced by older versioned pages survive. - if [ -d source-checkout/docs/fern/assets ]; then - echo "Syncing assets/ to docs-website branch..." - cp -r source-checkout/docs/fern/assets/. docs-checkout/fern/assets/ - fi - # Sync legacy Digest asset mirror if [ -d source-checkout/docs/fern/pages/blog/_assets ]; then echo "Syncing Blog assets to the legacy digest/ compatibility path..." @@ -276,6 +268,132 @@ jobs: done fi + - name: Generate, validate, and sync release assets + env: + IS_MAIN: ${{ steps.ctx.outputs.is_main }} + run: | + set -euo pipefail + + # Sync assets/ into docs-checkout; force-add the generated pair + # because the synced fern/.gitignore ignores them, and an ignored + # bootstrap copy would be silently skipped by the commit step's + # `git add -A`, leaving the published raw URL 404 permanently. + sync_assets() { + if [ -d source-checkout/docs/fern/assets ]; then + echo "Syncing assets/ to docs-website branch..." + mkdir -p docs-checkout/fern/assets + cp -r source-checkout/docs/fern/assets/. docs-checkout/fern/assets/ + for asset in releases.json releases-atom.xml; do + if [ -f "docs-checkout/fern/assets/$asset" ]; then + git -C docs-checkout add -f "fern/assets/$asset" + fi + done + fi + } + + # Older maintained branches may carry a gen_llms_tables.py without + # --assets-only (or no generator at all); their previews still sync + # whatever assets they commit. Main must always be able to generate. + gen_script="source-checkout/docs/fern/scripts/gen_llms_tables.py" + if ! { [ -f "$gen_script" ] && python3 "$gen_script" --help 2>/dev/null | grep -q -- '--assets-only'; }; then + if [ "${IS_MAIN:-false}" = "true" ]; then + echo "::error::gen_llms_tables.py with --assets-only support is required to generate release assets on main" + exit 1 + fi + echo "::notice::Source tree lacks gen_llms_tables.py --assets-only; skipping release-asset generation" + sync_assets + exit 0 + fi + python3 "$gen_script" --assets-only + + generated_json="source-checkout/docs/fern/assets/releases.json" + generated_atom="source-checkout/docs/fern/assets/releases-atom.xml" + for asset in "$generated_json" "$generated_atom"; do + if [ ! -s "$asset" ]; then + echo "::error::$asset is missing or empty after release-asset generation" + exit 1 + fi + done + + python3 - <<'PY' + import json + import os + import sys + from pathlib import Path + + source_root = Path("source-checkout/docs/fern") + generated_path = source_root / "assets/releases.json" + published_path = Path("docs-checkout/fern/assets/releases.json") + + + def fail(message: str) -> None: + print(f"::error::{message}", file=sys.stderr) + raise SystemExit(1) + + + def load_json(path: Path, label: str) -> dict: + try: + payload = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as exc: + fail(f"{label} is not valid readable JSON: {exc}") + if not isinstance(payload, dict): + fail(f"{label} must contain a JSON object") + return payload + + + generated = load_json(generated_path, "generated releases.json") + releases = generated.get("releases") + if not isinstance(releases, list) or not releases: + fail("generated releases.json must contain a non-empty releases array") + + if os.environ.get("IS_MAIN") != "true": + # Preview builds can lag main by a release; only a main publish + # is held to non-regression against the published copy. + print( + "::notice::Preview build; entry-count regression check skipped" + ) + elif published_path.exists(): + published = load_json(published_path, "previously published releases.json") + published_releases = published.get("releases") + if not isinstance(published_releases, list): + fail("previously published releases.json must contain a releases array") + if len(releases) < len(published_releases): + fail( + "generated releases.json has fewer entries than the previously " + f"published copy ({len(releases)} < {len(published_releases)})" + ) + else: + print( + "::notice::No previously published releases.json exists; " + "entry-count regression check skipped" + ) + + sys.path.insert(0, str(source_root / "scripts")) + import gen_llms_tables # noqa: E402 + + try: + current_version = gen_llms_tables.parse_data_module( + source_root / "components/releases.data.ts" + )["CURRENT_VERSION"] + except (KeyError, OSError, gen_llms_tables.TSParseError) as exc: + fail(f"could not read CURRENT_VERSION from releases.data.ts: {exc}") + + # Membership, not position: RELEASES may be headed by a platform-preview + # or model-build entry while CURRENT_VERSION stays on the prior stable + # (components resolve it with .find(), never [0]). + versions = [r.get("version") for r in releases if isinstance(r, dict)] + if current_version not in versions: + fail( + "generated releases.json does not contain CURRENT_VERSION " + f"from releases.data.ts ({current_version!r})" + ) + PY + + # Sync root-level assets/ (docs.yml logos/fonts and index.mdx reference + # ./assets/ relative to the Fern root, not pages-dev). Merge-copy without + # deleting so assets still referenced by older versioned pages survive. + sync_assets + - name: Transform paths in dev.yml for docs-website layout run: | # In the source repo, index.yml uses paths under pages/ (for example, pages/cli/getting-started/quickstart.mdx). @@ -526,6 +644,10 @@ jobs: release-version: name: Release Version to docs-website + # This job does not touch fern/assets/: releases.json and releases-atom.xml + # on docs-website are whatever the last main-sync generated. A release lands + # its releases.data.ts bump on main before the tag, so that copy is current + # by the time this job runs; a tag-only rerun republishes it unchanged. # Run on tag push OR manual dispatch with a tag specified if: | github.ref_type == 'tag' || diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ef7782c93277..a8574b107698 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -157,9 +157,8 @@ repos: language: system # The hook above proves the generator works; this one proves it was # run. Without it, editing releases.data.ts and forgetting to - # regenerate leaves releases.json and every generated span stale, - # with nothing else in the repo checking. - files: ^docs/fern/(scripts/gen_llms_tables\.py|components/releases\.data\.ts|pages/reference/general/.*\.mdx|assets/releases(-atom\.xml|\.json))$ + # regenerate leaves every committed generated span stale. + files: ^docs/fern/(scripts/gen_llms_tables\.py|components/releases\.data\.ts|pages/reference/general/.*\.mdx)$ pass_filenames: false - id: check-component-imports name: Check Fern components trigger no rolldown bundling diff --git a/docs/fern/.gitignore b/docs/fern/.gitignore index befb2ea9a5e9..4919133196ef 100644 --- a/docs/fern/.gitignore +++ b/docs/fern/.gitignore @@ -1,6 +1,7 @@ **/.preview **/.definition - +/assets/releases.json +/assets/releases-atom.xml # Include logos !*.svg diff --git a/docs/fern/AGENTS.md b/docs/fern/AGENTS.md index 21849b304dc0..f827e253849c 100644 --- a/docs/fern/AGENTS.md +++ b/docs/fern/AGENTS.md @@ -23,6 +23,12 @@ When creating or editing files under `docs/`, `examples/`, or `recipes/`, follow The Dynamo Docs Bot enforces the deterministic subset pre-merge. +## Generated files: commit, publish-time, or post-merge + +Commit the artifact when any input is external or time-varying. Generate at publish when the artifact is a pure function of sources committed in the same commit and the toolchain to compute it is already present in the publish runner. Where the toolchain is not in the publish runner, or committed history matters, regenerate post-merge: a workflow on push to main runs the generator and bot-commits changed outputs, so PRs carry source edits only. + +`releases.json` and `releases-atom.xml` are generated at publish time; the marker-spliced pages stay committed for review. + ## Generated API references The pages under `pages/reference/api/` and `pages/reference/kubernetes-api/` are generated from diff --git a/docs/fern/assets/releases-atom.xml b/docs/fern/assets/releases-atom.xml deleted file mode 100644 index e9bba139ff55..000000000000 --- a/docs/fern/assets/releases-atom.xml +++ /dev/null @@ -1,179 +0,0 @@ - - - - NVIDIA Dynamo releases - https://docs.nvidia.com/dynamo/dev/reference/releases - - 2026-08-14T00:00:00Z - NVIDIA Dynamo - - Dynamo v1.4.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.4.0 - - 2026-08-14T00:00:00Z - Experimental cross-datacenter prefix routing and reservation replay in the Router, a vLLM-compatible generate token endpoint, tokenizer L1 prefix cache on by default, NIXL disaggregation for vLLM-Omni pipelines, and the Spica deployment simulator. - - - Dynamo v1.3.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.1 - - 2026-08-05T00:00:00Z - Patch release. Fixes disaggregated SGLang serving over AWS EFA on GB200: the SGLang EFA runtime moves to NIXL 1.3.2 and all three EFA images to EFA Installer 1.49.0. Backend pins are otherwise unchanged from v1.3.0. - - - Dynamo v1.3.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0 - - 2026-07-20T00:00:00Z - Tool-calling and reasoning overhaul, RL rollout serving, the largest Router buildout to date, SLA-driven Planner autoscaling, and production GPU Memory Service on Kubernetes. - - - Dynamo v1.2.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.1 - - 2026-06-13T00:00:00Z - Patch release. Same backend pins as v1.2.0. - - - Dynamo v1.3.0-dev.1 (platform-preview) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-dev.1 - - 2026-06-09T00:00:00Z - Full-platform preview of v1.3.0: complete runtime matrix, wheels on pypi.nvidia.com, crates, and Helm charts. Superseded by v1.3.0 GA. - - - Dynamo v1.2.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0 - - 2026-06-02T00:00:00Z - DGD/DGDR v1beta1, CRTC as the default KV router, inter-pod GPU Memory Service, Dynamo Snapshot on CRI-O/OpenShift, and DeepSeek-V4 recipes on vLLM. - - - Dynamo v1.2.0-deepseek-v4-dev.3 (model-build) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.3 - - 2026-05-09T00:00:00Z - DeepSeek-V4 Blackwell preview; vLLM + SGLang containers only. - - - Dynamo v1.1.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.1 - - 2026-05-05T00:00:00Z - Patch release. Same backend pins as v1.1.0. - - - Dynamo v1.2.0-deepseek-v4-dev.2 (model-build) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.2 - - 2026-05-01T00:00:00Z - DeepSeek-V4 Blackwell preview; vLLM + SGLang containers only. - - - Dynamo v1.1.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0 - - 2026-05-01T00:00:00Z - Resilient KV routing at scale, Anthropic Messages API support, performance modeling and offline replay, and the multimodal embedding cache. - - - Dynamo v1.0.2 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.0.2 - - 2026-04-22T00:00:00Z - No artifact additions or removals versus v1.0.0. - - - Dynamo v1.1.0-dev.3 (platform-preview) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.3 - - 2026-04-18T00:00:00Z - Partial platform preview: TRT-LLM runtime image + wheels only. - - - Dynamo v1.1.0-dev.2 (platform-preview) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.2 - - 2026-04-09T00:00:00Z - Partial platform preview: SGLang + TRT-LLM runtime images + wheels. - - - Dynamo v1.1.0-dev.1 (platform-preview) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.1 - - 2026-03-17T00:00:00Z - Platform preview: runtime matrix, wheels on pypi.nvidia.com, Helm charts. - - - Dynamo v1.0.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.0.1 - - 2026-03-16T00:00:00Z - No artifact additions or removals versus v1.0.0. - - - Dynamo v1.0.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v1.0.0 - - 2026-03-12T00:00:00Z - First GA release: unified configuration, Kubernetes production readiness, multimodal serving, and the agents surface. - - - Dynamo v0.9.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.9.1 - - 2026-03-04T00:00:00Z - No artifact additions or removals versus v0.9.0. - - - Dynamo v0.9.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.9.0 - - 2026-02-11T00:00:00Z - First publish of dynamo-tokens crate. Deprecated dynamo-graph Helm chart dropped from the publish stream. - - - Dynamo v0.8.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.8.1 - - 2026-01-23T00:00:00Z - Post trains .post1/.post2/.post3 republished the TRT-LLM runtime image and PyPI wheels only; each carried a distinct TRT-LLM pin (see the v0.8.1.post1/.post2/.post3 rows). - - - Dynamo v0.8.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.8.0 - - 2026-01-15T00:00:00Z - dynamo-frontend image and CUDA 13 variants for vLLM and SGLang. First publish of dynamo-memory and dynamo-config crates. - - - Dynamo v0.7.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.7.1 - - 2025-12-15T00:00:00Z - - - Dynamo v0.7.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.7.0 - - 2025-11-26T00:00:00Z - - - Dynamo v0.6.1 (patch) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.6.1 - - 2025-11-06T00:00:00Z - - - Dynamo v0.6.0 (stable) - https://github.com/ai-dynamo/dynamo/releases/tag/v0.6.0 - - 2025-10-28T00:00:00Z - Oldest release tracked on this page. - - diff --git a/docs/fern/assets/releases.json b/docs/fern/assets/releases.json deleted file mode 100644 index 42d76e5a7546..000000000000 --- a/docs/fern/assets/releases.json +++ /dev/null @@ -1,2121 +0,0 @@ -{ - "source": "docs/fern/components/releases.data.ts", - "generator": "docs/fern/scripts/gen_llms_tables.py", - "updated": "2026-08-14", - "current": { - "version": "v1.4.0", - "date": "Aug 14, 2026", - "dateIso": "2026-08-14", - "tag": "1.4.0", - "wheel": "1.4.0" - }, - "mainTot": { - "sglang": "0.5.16", - "trtllm": "1.3.0rc23", - "vllm": "0.26.0", - "nixlSglang": "1.3.0", - "nixlTrtllm": "1.3.1", - "nixlVllm": "1.3.2" - }, - "releases": [ - { - "version": "v1.4.0", - "notesHref": "/dynamo/dev/reference/releases/v1-4-0", - "date": "Aug 14, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.4.0", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.16", - "trtllm": "1.3.0rc22", - "vllm": "0.26.0", - "nixlSglang": "1.3.0", - "nixlTrtllm": "1.3.1", - "nixlVllm": "1.3.2" - }, - "ucx": "1.21.x", - "delta": "Audit subsystem migrated into request trace (DYN_AUDIT_* honored as legacy aliases); HTTP header capture in trace records is an explicit fail-closed allowlist; deprecated multimodal worker flags and vLLM worker-role flags removed; runtime images no longer bundle software video decoders (H.264/H.265 decodes via NVDEC); UCX 1.21.x.", - "notesSummary": "Experimental cross-datacenter prefix routing and reservation replay in the Router, a vLLM-compatible generate token endpoint, tokenizer L1 prefix cache on by default, NIXL disaggregation for vLLM-Omni pipelines, and the Spica deployment simulator.", - "dateIso": "2026-08-14", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-4-0" - }, - { - "version": "v1.3.1", - "notesHref": "/dynamo/dev/reference/releases/v1-3-0#v131", - "date": "Aug 5, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.1", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.14", - "trtllm": "1.3.0rc19", - "vllm": "0.23.0", - "nixlSglang": "1.3.2", - "nixlTrtllm": "1.0.1", - "nixlVllm": "1.1.0" - }, - "ucx": "1.20.x", - "delta": "Patch release. Fixes disaggregated SGLang serving over AWS EFA on GB200: the SGLang EFA runtime moves to NIXL 1.3.2 and all three EFA images to EFA Installer 1.49.0. Backend pins are otherwise unchanged from v1.3.0.", - "dateIso": "2026-08-05", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-3-0#v131" - }, - { - "version": "v1.3.0", - "notesHref": "/dynamo/dev/reference/releases/v1-3-0", - "date": "Jul 20, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.14", - "trtllm": "1.3.0rc19", - "vllm": "0.23.0", - "nixlSglang": "1.3.0", - "nixlTrtllm": "1.0.1", - "nixlVllm": "1.1.0" - }, - "wheel": "1.3.0.post1", - "ucx": "1.20.x", - "delta": "CUDA 12 container images discontinued; EFA variants retagged from -efa-amd64 to -efa (the images were already multi-arch — the old suffix was misleading); GA wheels published as 1.3.0.post1 (containers stay :1.3.0); UCX 1.20.x.", - "notesSummary": "Tool-calling and reasoning overhaul, RL rollout serving, the largest Router buildout to date, SLA-driven Planner autoscaling, and production GPU Memory Service on Kubernetes.", - "dateIso": "2026-07-20", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-3-0" - }, - { - "version": "v1.3.0-dev.1", - "date": "Jun 9, 2026", - "kind": "platform-preview", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-dev.1", - "pins": { - "sglang": "0.5.12.post1", - "trtllm": "1.3.0rc17", - "vllm": "0.22.0", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "1.1.0" - }, - "delta": "Full-platform preview of v1.3.0: complete runtime matrix, wheels on pypi.nvidia.com, crates, and Helm charts. Superseded by v1.3.0 GA.", - "dateIso": "2026-06-09", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-dev.1" - }, - { - "version": "v1.2.1", - "notesHref": "/dynamo/dev/reference/releases/v1-2-0", - "date": "Jun 13, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.1", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.11", - "trtllm": "1.3.0rc14", - "vllm": "0.20.1", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "delta": "Patch release. Same backend pins as v1.2.0.", - "dateIso": "2026-06-13", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-2-0" - }, - { - "version": "v1.2.0", - "notesHref": "/dynamo/dev/reference/releases/v1-2-0", - "date": "Jun 2, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.11", - "trtllm": "1.3.0rc14", - "vllm": "0.20.1", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "ucx": "1.20.0", - "delta": "603 PRs from 82 authors. DGD/DGDR promoted to v1beta1; CRTC default approximate KV router; inter-pod GMS sidecar; Dynamo Snapshot on CRI-O / OpenShift; UCX 1.20.0.", - "notesSummary": "DGD/DGDR v1beta1, CRTC as the default KV router, inter-pod GPU Memory Service, Dynamo Snapshot on CRI-O/OpenShift, and DeepSeek-V4 recipes on vLLM.", - "dateIso": "2026-06-02", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-2-0" - }, - { - "version": "v1.2.0-deepseek-v4-dev.3", - "date": "May 9, 2026", - "kind": "model-build", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.3", - "pins": { - "sglang": "upstream DSv4 preview", - "vllm": "0.20.1", - "nixlVllm": "0.10.1" - }, - "partial": true, - "note": "DeepSeek-V4 Blackwell preview; vLLM + SGLang containers only.", - "dateIso": "2026-05-09", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.3" - }, - { - "version": "v1.2.0-deepseek-v4-dev.2", - "date": "May 1, 2026", - "kind": "model-build", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.2", - "pins": { - "sglang": "upstream DSv4 preview", - "vllm": "0.20.0", - "nixlVllm": "0.10.1" - }, - "partial": true, - "note": "DeepSeek-V4 Blackwell preview; vLLM + SGLang containers only.", - "dateIso": "2026-05-01", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.2" - }, - { - "version": "v1.1.1", - "notesHref": "/dynamo/dev/reference/releases/v1-1-0", - "date": "May 5, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.1", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.10.post1", - "trtllm": "1.3.0rc11", - "vllm": "0.19.0", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "delta": "Patch release. Same backend pins as v1.1.0.", - "dateIso": "2026-05-05", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-1-0" - }, - { - "version": "v1.1.0", - "notesHref": "/dynamo/dev/reference/releases/v1-1-0", - "date": "May 1, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.10.post1", - "trtllm": "1.3.0rc11", - "vllm": "0.19.0", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "ucx": "1.20", - "delta": "Planner split into its own dynamo-planner image (artifact boundary change). First 1.y.z publication of dynamo-protocols on crates.io; dynamo-async-openai deprecated at final 1.0.2.", - "notesSummary": "Resilient KV routing at scale, Anthropic Messages API support, performance modeling and offline replay, and the multimodal embedding cache.", - "dateIso": "2026-05-01", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-1-0" - }, - { - "version": "v1.1.0-dev.3", - "date": "Apr 18, 2026", - "kind": "platform-preview", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.3", - "pins": { - "sglang": "0.5.10.post1", - "trtllm": "1.3.0rc11", - "vllm": "0.19.0", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "partial": true, - "note": "Partial platform preview: TRT-LLM runtime image + wheels only.", - "dateIso": "2026-04-18", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.3" - }, - { - "version": "v1.1.0-dev.2", - "date": "Apr 9, 2026", - "kind": "platform-preview", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.2", - "pins": { - "sglang": "0.5.9", - "trtllm": "1.3.0rc9", - "vllm": "0.19.0", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "partial": true, - "note": "Partial platform preview: SGLang + TRT-LLM runtime images + wheels.", - "dateIso": "2026-04-09", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.2" - }, - { - "version": "v1.1.0-dev.1", - "date": "Mar 17, 2026", - "kind": "platform-preview", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.1", - "pins": { - "sglang": "0.5.9", - "trtllm": "1.3.0rc5.post1", - "vllm": "0.17.1", - "nixlSglang": "1.0.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "note": "Platform preview: runtime matrix, wheels on pypi.nvidia.com, Helm charts.", - "dateIso": "2026-03-17", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.1.0-dev.1" - }, - { - "version": "v1.0.2", - "notesHref": "/dynamo/dev/reference/releases/v1-0-0", - "date": "Apr 22, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.0.2", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.9", - "trtllm": "1.3.0rc5.post1", - "vllm": "0.16.0", - "nixlSglang": "0.10.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "delta": "No artifact additions or removals versus v1.0.0.", - "dateIso": "2026-04-22", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-0-0" - }, - { - "version": "v1.0.1", - "notesHref": "/dynamo/dev/reference/releases/v1-0-0", - "date": "Mar 16, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.0.1", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.9", - "trtllm": "1.3.0rc5.post1", - "vllm": "0.16.0", - "nixlSglang": "0.10.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "delta": "No artifact additions or removals versus v1.0.0.", - "dateIso": "2026-03-16", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-0-0" - }, - { - "version": "v1.0.0", - "notesHref": "/dynamo/dev/reference/releases/v1-0-0", - "date": "Mar 12, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.0.0", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.9", - "trtllm": "1.3.0rc5.post1", - "vllm": "0.16.0", - "nixlSglang": "0.10.1", - "nixlTrtllm": "0.10.1", - "nixlVllm": "0.10.1" - }, - "delta": "snapshot-agent image and EFA variants for vLLM and TensorRT-LLM. First publish of dynamo-mocker and dynamo-kv-router crates. snapshot Helm chart added (preview); deprecated dynamo-crds dropped from the publish stream.", - "notesSummary": "First GA release: unified configuration, Kubernetes production readiness, multimodal serving, and the agents surface.", - "dateIso": "2026-03-12", - "notesUrl": "https://docs.nvidia.com/dynamo/dev/reference/releases/v1-0-0" - }, - { - "version": "v0.9.1", - "date": "Mar 4, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.9.1", - "docs": "https://docs.nvidia.com/dynamo", - "pins": { - "sglang": "0.5.8", - "trtllm": "1.3.0rc3", - "vllm": "0.14.1", - "nixlSglang": "0.9.0", - "nixlTrtllm": "0.9.0", - "nixlVllm": "0.9.0" - }, - "delta": "No artifact additions or removals versus v0.9.0.", - "dateIso": "2026-03-04", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.9.1" - }, - { - "version": "v0.9.0", - "date": "Feb 11, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.9.0", - "pins": { - "sglang": "0.5.8", - "trtllm": "1.3.0rc1", - "vllm": "0.14.1", - "nixlSglang": "0.9.0", - "nixlTrtllm": "0.9.0", - "nixlVllm": "0.9.0" - }, - "delta": "First publish of dynamo-tokens crate. Deprecated dynamo-graph Helm chart dropped from the publish stream.", - "dateIso": "2026-02-11", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.9.0" - }, - { - "version": "v0.8.1.post3", - "kind": "patch", - "pins": { - "sglang": "0.5.6.post2", - "trtllm": "1.2.0rc6.post3", - "vllm": "0.12.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "note": "Post-train of v0.8.1: republished the TensorRT-LLM runtime image and PyPI wheels only, with TRT-LLM pinned to 1.2.0rc6.post3. Same CUDA support as v0.8.1." - }, - { - "version": "v0.8.1.post2", - "kind": "patch", - "pins": { - "sglang": "0.5.6.post2", - "trtllm": "1.2.0rc6.post2", - "vllm": "0.12.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "note": "Post-train of v0.8.1: republished the TensorRT-LLM runtime image and PyPI wheels only, with TRT-LLM pinned to 1.2.0rc6.post2. Same CUDA support as v0.8.1." - }, - { - "version": "v0.8.1.post1", - "kind": "patch", - "pins": { - "sglang": "0.5.6.post2", - "trtllm": "1.2.0rc6.post1", - "vllm": "0.12.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "note": "Post-train of v0.8.1: republished the TensorRT-LLM runtime image and PyPI wheels only, with TRT-LLM pinned to 1.2.0rc6.post1. Same CUDA support as v0.8.1." - }, - { - "version": "v0.8.1", - "date": "Jan 23, 2026", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.8.1", - "pins": { - "sglang": "0.5.6.post2", - "trtllm": "1.2.0rc6.post1", - "vllm": "0.12.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "delta": "Post trains .post1/.post2/.post3 republished the TRT-LLM runtime image and PyPI wheels only; each carried a distinct TRT-LLM pin (see the v0.8.1.post1/.post2/.post3 rows).", - "dateIso": "2026-01-23", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.8.1" - }, - { - "version": "v0.8.0", - "date": "Jan 15, 2026", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.8.0", - "pins": { - "sglang": "0.5.6.post2", - "trtllm": "1.2.0rc6.post1", - "vllm": "0.12.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "delta": "dynamo-frontend image and CUDA 13 variants for vLLM and SGLang. First publish of dynamo-memory and dynamo-config crates.", - "dateIso": "2026-01-15", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.8.0" - }, - { - "version": "v0.7.1", - "date": "Dec 15, 2025", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.7.1", - "pins": { - "sglang": "0.5.4.post3", - "trtllm": "1.2.0rc3", - "vllm": "0.11.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "dateIso": "2025-12-15", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.7.1" - }, - { - "version": "v0.7.0.post1", - "kind": "patch", - "pins": { - "sglang": "0.5.4.post3", - "trtllm": "1.2.0rc3", - "vllm": "0.11.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "note": "Post-train of v0.7.0: TensorRT-LLM pin advanced to 1.2.0rc3 (v0.7.0 shipped 1.2.0rc2). Same CUDA support as v0.7.0." - }, - { - "version": "v0.7.0", - "date": "Nov 26, 2025", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.7.0", - "pins": { - "sglang": "0.5.4.post3", - "trtllm": "1.2.0rc2", - "vllm": "0.11.0", - "nixlSglang": "0.8.0", - "nixlTrtllm": "0.8.0", - "nixlVllm": "0.8.0" - }, - "dateIso": "2025-11-26", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.7.0" - }, - { - "version": "v0.6.1.post1", - "kind": "patch", - "pins": { - "sglang": "0.5.3.post2", - "trtllm": "1.1.0rc5", - "vllm": "0.11.0", - "nixlSglang": "0.6.0", - "nixlTrtllm": "0.6.0", - "nixlVllm": "0.6.0" - }, - "note": "Post-train of v0.6.1: same backend pins as v0.6.1. Same CUDA support as v0.6.1." - }, - { - "version": "v0.6.1", - "date": "Nov 6, 2025", - "kind": "patch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.6.1", - "pins": { - "sglang": "0.5.3.post2", - "trtllm": "1.1.0rc5", - "vllm": "0.11.0", - "nixlSglang": "0.6.0", - "nixlTrtllm": "0.6.0", - "nixlVllm": "0.6.0" - }, - "dateIso": "2025-11-06", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.6.1" - }, - { - "version": "v0.6.0", - "date": "Oct 28, 2025", - "kind": "stable", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.6.0", - "pins": { - "sglang": "0.5.3.post2", - "trtllm": "1.1.0rc5", - "vllm": "0.11.0", - "nixlSglang": "0.6.0", - "nixlTrtllm": "0.6.0", - "nixlVllm": "0.6.0" - }, - "delta": "Oldest release tracked on this page.", - "dateIso": "2025-10-28", - "notesUrl": "https://github.com/ai-dynamo/dynamo/releases/tag/v0.6.0" - } - ], - "cudaHistory": [ - { - "version": "1.4.0", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.4.0", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.4.0", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.3.1", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.3.1", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.3.1", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.3.0", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.3.0", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.3.0", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.2.1", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.2.1", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.2.1", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.2.1", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.2.1", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.2.0", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.2.0", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.2.0", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.2.0", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.2.0", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.1.1", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.1.1", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.1.1", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.1.1", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.1.1", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.1.0", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.1.0", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.1.0", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.1.0", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.1.0", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.0.2", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.0.2", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.0.2", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.0.2", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.0.2", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.0.1", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.0.1", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.0.1", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.0.1", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.0.1", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.0.0", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.0.0", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "1.0.0", - "backend": "TensorRT-LLM", - "toolkit": "13.1", - "minDriver": "580.xx+" - }, - { - "version": "1.0.0", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "1.0.0", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.9.1", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.9.1", - "backend": "TensorRT-LLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.9.1", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.9.0", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.9.0", - "backend": "TensorRT-LLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.9.0", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.8.1", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.8.1", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+", - "note": "Experimental" - }, - { - "version": "0.8.1", - "backend": "TensorRT-LLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.8.1", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.8.1", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+", - "note": "Experimental" - }, - { - "version": "0.8.0", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.8.0", - "backend": "SGLang", - "toolkit": "13.0", - "minDriver": "580.xx+", - "note": "Experimental" - }, - { - "version": "0.8.0", - "backend": "TensorRT-LLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.8.0", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.8.0", - "backend": "vLLM", - "toolkit": "13.0", - "minDriver": "580.xx+", - "note": "Experimental" - }, - { - "version": "0.7.1", - "backend": "SGLang", - "toolkit": "12.8", - "minDriver": "570.xx+" - }, - { - "version": "0.7.1", - "backend": "TensorRT-LLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.7.1", - "backend": "vLLM", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.7.0", - "backend": "SGLang", - "toolkit": "12.9", - "minDriver": "575.xx+" - }, - { - "version": "0.7.0", - "backend": "TensorRT-LLM", - "toolkit": "13.0", - "minDriver": "580.xx+" - }, - { - "version": "0.7.0", - "backend": "vLLM", - "toolkit": "12.8", - "minDriver": "570.xx+" - } - ], - "cudaNotes": [ - "Patch versions (e.g. v0.8.1.post1, v0.7.0.post1) have the same CUDA support as their base version.", - "Early access v1.1.0-dev.* images follow the same CUDA matrix as v1.0.2. The v1.2.0-deepseek-v4-dev.3 vLLM container is CUDA 13.0 multi-arch; the SGLang containers split by arch (CUDA 12.9 on amd64, CUDA 13.0 on arm64).", - "Experimental CUDA 13 images are not published for all versions." - ], - "features": [ - { - "name": "Disaggregated Serving", - "sglang": { - "status": "yes" - }, - "trtllm": { - "status": "yes" - }, - "vllm": { - "status": "yes", - "note": "Prefill/decode separation with NIXL KV transfer" - } - }, - { - "name": "KV-Aware Routing", - "sglang": { - "status": "yes" - }, - "trtllm": { - "status": "yes" - }, - "vllm": { - "status": "yes" - } - }, - { - "name": "SLA-Based Planner", - "sglang": { - "status": "yes" - }, - "trtllm": { - "status": "yes" - }, - "vllm": { - "status": "yes" - } - }, - { - "name": "KV Block Manager", - "sglang": { - "status": "wip", - "note": "Work in progress across all combinations" - }, - "trtllm": { - "status": "yes" - }, - "vllm": { - "status": "yes" - } - }, - { - "name": "Multimodal (Image)", - "sglang": { - "status": "yes", - "note": "KV-aware routing supported on Dynamo's SGLang image for aggregated workers; a custom build without the hash-forwarding patch falls back to text-prefix routing. Separately, multimodal serving supports EPD, E/PD and E/P/D disaggregation (not traditional EP/D)" - }, - "trtllm": { - "status": "yes", - "note": "Image URLs + pre-computed embeddings. Disagg: EP/D + E/P/D. KV-aware routing via dedicated MM Router Worker (requires KV event publishing)" - }, - "vllm": { - "status": "yes", - "note": "With KV-aware routing, image-aware routing on documented paths" - } - }, - { - "name": "Multimodal (Video)", - "sglang": { - "status": "yes" - }, - "trtllm": { - "status": "no" - }, - "vllm": { - "status": "yes", - "note": "Video input with frame sampling" - } - }, - { - "name": "Multimodal (Audio)", - "sglang": { - "status": "no" - }, - "trtllm": { - "status": "no" - }, - "vllm": { - "status": "wip", - "note": "Qwen2-Audio, experimental" - } - }, - { - "name": "Request Migration", - "sglang": { - "status": "yes" - }, - "trtllm": { - "status": "yes", - "note": "Work in progress with multimodal" - }, - "vllm": { - "status": "yes" - } - }, - { - "name": "Request Cancellation", - "sglang": { - "status": "wip", - "note": "Remote-prefill-phase cancellation not supported in disaggregated mode" - }, - "trtllm": { - "status": "caveat", - "note": "Engine temporarily not notified of cancellations — resources for cancelled requests are not freed (known issue)" - }, - "vllm": { - "status": "yes" - } - }, - { - "name": "LoRA", - "sglang": { - "status": "no" - }, - "trtllm": { - "status": "no" - }, - "vllm": { - "status": "yes", - "note": "Dynamic load/unload; KV-aware routing supports adapter affinity" - } - }, - { - "name": "Tool Calling", - "sglang": { - "status": "yes" - }, - "trtllm": { - "status": "yes" - }, - "vllm": { - "status": "yes" - } - }, - { - "name": "Speculative Decoding", - "sglang": { - "status": "wip", - "note": "Code hooks exist; no examples or docs yet" - }, - "trtllm": { - "status": "yes" - }, - "vllm": { - "status": "yes", - "note": "Eagle3" - } - }, - { - "name": "GPU Memory Service", - "sglang": { - "status": "yes", - "note": "Weights and KV; upstream integration remains in progress" - }, - "trtllm": { - "status": "wip", - "note": "Weights only; multinode and upstream integration remain in progress" - }, - "vllm": { - "status": "yes", - "note": "Weights and KV; upstream integration remains in progress" - } - }, - { - "name": "Shadow Engine Failover", - "sglang": { - "status": "wip", - "note": "No KV-cache reuse or hardware fault tolerance" - }, - "trtllm": { - "status": "wip", - "note": "No KV-cache reuse or hardware fault tolerance" - }, - "vllm": { - "status": "caveat", - "note": "Software-process failover only; no KV-cache reuse or hardware fault tolerance" - } - }, - { - "name": "Dynamo Snapshot", - "sglang": { - "status": "caveat", - "note": "Single-GPU supported; multi-GPU and multinode remain in progress" - }, - "trtllm": { - "status": "wip", - "note": "Single-GPU aggregated text-worker path only" - }, - "vllm": { - "status": "caveat", - "note": "Single-GPU supported; multi-GPU is highly experimental and multinode remains in progress" - } - } - ], - "artifacts": [ - { - "category": "container", - "group": "runtime", - "name": "vllm-runtime", - "description": "vLLM backend runtime", - "meta": "vLLM v0.26.0 · CUDA 13.0 · AMD64/ARM64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/vllm-runtime/tags", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.4.0" - }, - { - "label": "1.4.0-efa", - "clipboard": "nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.4.0-efa", - "variant": "experimental" - } - ] - }, - { - "category": "container", - "group": "runtime", - "name": "sglang-runtime", - "description": "SGLang backend runtime", - "meta": "SGLang v0.5.16 · CUDA 13.0 · AMD64/ARM64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/sglang-runtime/tags", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.4.0" - }, - { - "label": "1.4.0-efa", - "clipboard": "nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.4.0-efa", - "variant": "experimental" - } - ] - }, - { - "category": "container", - "group": "runtime", - "name": "tensorrtllm-runtime", - "description": "TensorRT-LLM backend runtime", - "meta": "TRT-LLM v1.3.0rc22 · CUDA 13.1 · AMD64/ARM64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/tensorrtllm-runtime/tags", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/tensorrtllm-runtime:1.4.0" - }, - { - "label": "1.4.0-efa", - "clipboard": "nvcr.io/nvidia/ai-dynamo/tensorrtllm-runtime:1.4.0-efa", - "variant": "experimental" - } - ] - }, - { - "category": "container", - "group": "component", - "name": "dynamo-frontend", - "description": "OpenAI-compatible API gateway with Endpoint Prediction Protocol (EPP)", - "meta": "AMD64/ARM64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/dynamo-frontend/tags", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/dynamo-frontend:1.4.0" - } - ] - }, - { - "category": "container", - "group": "component", - "name": "dynamo-planner", - "description": "Standalone Planner used by Profiler jobs and Planner pods", - "meta": "AMD64/ARM64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/dynamo-planner/tags", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.4.0" - } - ] - }, - { - "category": "container", - "group": "component", - "name": "kubernetes-operator", - "description": "Operator that manages Dynamo deployments and CRDs", - "meta": "AMD64/ARM64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/kubernetes-operator/tags", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/kubernetes-operator:1.4.0" - } - ] - }, - { - "category": "container", - "group": "component", - "name": "snapshot-agent", - "description": "Fast GPU worker recovery via CRIU", - "meta": "AMD64", - "href": "https://catalog.ngc.nvidia.com/orgs/nvidia/ai-dynamo/containers/snapshot-agent/tags", - "badge": "Preview", - "tags": [ - { - "label": "1.4.0", - "clipboard": "nvcr.io/nvidia/ai-dynamo/snapshot-agent:1.4.0" - } - ] - }, - { - "category": "wheel", - "name": "ai-dynamo", - "description": "Main package with backend integrations (vLLM, SGLang, TRT-LLM)", - "meta": "Python 3.10–3.12 · Linux (glibc v2.28+)", - "href": "https://pypi.org/project/ai-dynamo/1.4.0/", - "tags": [ - { - "label": "uv pip install ai-dynamo==1.4.0", - "clipboard": "uv pip install ai-dynamo==1.4.0" - } - ] - }, - { - "category": "wheel", - "name": "ai-dynamo-runtime", - "description": "Core Python bindings for the Dynamo runtime", - "meta": "Python 3.10–3.12 · Linux (glibc v2.28+)", - "href": "https://pypi.org/project/ai-dynamo-runtime/1.4.0/", - "tags": [ - { - "label": "uv pip install ai-dynamo-runtime==1.4.0", - "clipboard": "uv pip install ai-dynamo-runtime==1.4.0" - } - ] - }, - { - "category": "wheel", - "name": "kvbm", - "description": "KV Block Manager for disaggregated KV cache", - "meta": "Python 3.10–3.12 · Linux (glibc v2.28+)", - "href": "https://pypi.org/project/kvbm/1.4.0/", - "tags": [ - { - "label": "uv pip install kvbm==1.4.0", - "clipboard": "uv pip install kvbm==1.4.0" - } - ] - }, - { - "category": "helm", - "name": "dynamo-platform", - "description": "Platform services (etcd, NATS) and the Dynamo Operator for a Dynamo cluster", - "href": "https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-platform-1.4.0.tgz", - "tags": [ - { - "label": "helm install · dynamo-platform 1.4.0", - "clipboard": "helm install dynamo-platform https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-platform-1.4.0.tgz" - } - ] - }, - { - "category": "helm", - "name": "snapshot", - "description": "Snapshot DaemonSet for fast GPU worker recovery", - "href": "https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/snapshot-1.4.0.tgz", - "tags": [ - { - "label": "helm install · snapshot 1.4.0", - "clipboard": "helm install snapshot https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/snapshot-1.4.0.tgz" - } - ] - }, - { - "category": "crate", - "name": "dynamo-runtime", - "description": "Core distributed runtime library", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-runtime/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-runtime@1.4.0", - "clipboard": "cargo add dynamo-runtime@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-llm", - "description": "LLM inference engine", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-llm/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-llm@1.4.0", - "clipboard": "cargo add dynamo-llm@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-protocols", - "description": "Async OpenAI-compatible API client", - "meta": "Independently versioned", - "group": "consumed", - "href": "https://crates.io/crates/dynamo-protocols/5.0.1", - "tags": [ - { - "label": "cargo add dynamo-protocols@5.0.1", - "clipboard": "cargo add dynamo-protocols@5.0.1" - } - ] - }, - { - "category": "crate", - "name": "dynamo-async-openai", - "description": "Legacy OpenAI client; use dynamo-protocols", - "meta": "MSRV Rust v1.82 · final release", - "href": "https://crates.io/crates/dynamo-async-openai/1.0.2", - "badge": "Deprecated", - "tags": [ - { - "label": "cargo add dynamo-async-openai@1.0.2", - "clipboard": "cargo add dynamo-async-openai@1.0.2" - } - ] - }, - { - "category": "crate", - "name": "dynamo-parsers", - "description": "Protocol parsers (SSE, JSON streaming)", - "meta": "Independently versioned", - "group": "consumed", - "href": "https://crates.io/crates/dynamo-parsers/7.0.1", - "tags": [ - { - "label": "cargo add dynamo-parsers@7.0.1", - "clipboard": "cargo add dynamo-parsers@7.0.1" - } - ] - }, - { - "category": "crate", - "name": "dynamo-memory", - "description": "Memory management utilities", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-memory/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-memory@1.4.0", - "clipboard": "cargo add dynamo-memory@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-config", - "description": "Configuration management", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-config/1.2.1", - "tags": [ - { - "label": "cargo add dynamo-config@1.2.1", - "clipboard": "cargo add dynamo-config@1.2.1" - } - ] - }, - { - "category": "crate", - "name": "dynamo-tokens", - "description": "Tokenizer bindings for LLM inference", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-tokens/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-tokens@1.4.0", - "clipboard": "cargo add dynamo-tokens@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-tokenizers", - "description": "Tokenizer library for LLM inference", - "meta": "Independently versioned", - "group": "consumed", - "href": "https://crates.io/crates/dynamo-tokenizers/1.5.4", - "tags": [ - { - "label": "cargo add dynamo-tokenizers@1.5.4", - "clipboard": "cargo add dynamo-tokenizers@1.5.4" - } - ] - }, - { - "category": "crate", - "name": "dynamo-mocker", - "description": "Inference engine simulator for benchmarking", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-mocker/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-mocker@1.4.0", - "clipboard": "cargo add dynamo-mocker@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-kv-router", - "description": "KV-aware request routing library", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-kv-router/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-kv-router@1.4.0", - "clipboard": "cargo add dynamo-kv-router@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "kvbm-logical", - "description": "Logical layer for the KV Block Manager", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/kvbm-logical/1.4.0", - "tags": [ - { - "label": "cargo add kvbm-logical@1.4.0", - "clipboard": "cargo add kvbm-logical@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-kv-hashing", - "description": "Request-to-lineage-hash contract for KV cache identity", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-kv-hashing/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-kv-hashing@1.4.0", - "clipboard": "cargo add dynamo-kv-hashing@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-data-gen", - "description": "Schemas and primitives for Dynamo data generation and replay traces", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-data-gen/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-data-gen@1.4.0", - "clipboard": "cargo add dynamo-data-gen@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-rl", - "description": "Dynamo RL worker discovery API", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-rl/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-rl@1.4.0", - "clipboard": "cargo add dynamo-rl@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-bench", - "description": "Lightweight HTTP benchmarks for Dynamo endpoints", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-bench/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-bench@1.4.0", - "clipboard": "cargo add dynamo-bench@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-truthy", - "description": "Canonical truthy/falsy boolean flag parsing", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/dynamo-truthy/1.4.0", - "tags": [ - { - "label": "cargo add dynamo-truthy@1.4.0", - "clipboard": "cargo add dynamo-truthy@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "kvbm-common", - "description": "Shared types for the KV Block Manager", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/kvbm-common/1.4.0", - "tags": [ - { - "label": "cargo add kvbm-common@1.4.0", - "clipboard": "cargo add kvbm-common@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "kvbm-config", - "description": "KVBM configuration for Tokio, Rayon, and Messenger runtimes", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/kvbm-config/1.4.0", - "tags": [ - { - "label": "cargo add kvbm-config@1.4.0", - "clipboard": "cargo add kvbm-config@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "kvbm-kernels", - "description": "CUDA kernels for the KV Block Manager", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/kvbm-kernels/1.4.0", - "tags": [ - { - "label": "cargo add kvbm-kernels@1.4.0", - "clipboard": "cargo add kvbm-kernels@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "kvbm-physical", - "description": "Physical block layer for the KV Block Manager", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/kvbm-physical/1.4.0", - "tags": [ - { - "label": "cargo add kvbm-physical@1.4.0", - "clipboard": "cargo add kvbm-physical@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "kvbm-engine", - "description": "Distributed coordination primitives for KVBM", - "meta": "MSRV Rust v1.82", - "href": "https://crates.io/crates/kvbm-engine/1.4.0", - "tags": [ - { - "label": "cargo add kvbm-engine@1.4.0", - "clipboard": "cargo add kvbm-engine@1.4.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-renderer", - "description": "Chat-template rendering used by the Dynamo Frontend", - "meta": "Independently versioned", - "group": "consumed", - "href": "https://crates.io/crates/dynamo-renderer/4.0.0", - "tags": [ - { - "label": "cargo add dynamo-renderer@4.0.0", - "clipboard": "cargo add dynamo-renderer@4.0.0" - } - ] - }, - { - "category": "crate", - "name": "dynamo-parsers-v2", - "description": "Successor parser line to dynamo-parsers, consumed by the Frontend", - "meta": "Independently versioned", - "group": "consumed", - "href": "https://crates.io/crates/dynamo-parsers-v2/0.1.23", - "tags": [ - { - "label": "cargo add dynamo-parsers-v2@0.1.23", - "clipboard": "cargo add dynamo-parsers-v2@0.1.23" - } - ] - }, - { - "category": "crate", - "name": "fastokens", - "description": "Rust BPE tokenizer backend consumed by the Frontend", - "meta": "Independently versioned", - "group": "consumed", - "href": "https://crates.io/crates/fastokens/0.2.0", - "tags": [ - { - "label": "cargo add fastokens@0.2.0", - "clipboard": "cargo add fastokens@0.2.0" - } - ] - } - ], - "modelEaBuilds": [ - { - "model": "Inkling", - "tag": "1.4.0-inkling-dev.1", - "releaseLine": "v1.4.0", - "runtimes": [ - "sglang-runtime" - ], - "shipped": "Jul 17, 2026", - "gaPath": "dev-only", - "gaLabel": "Dev-only · v1.4.0 line", - "statusLine": "First build on the v1.4.0 line; targets the next stable release.", - "recipeLabel": "Inkling recipe (main)", - "recipeHref": "https://github.com/ai-dynamo/dynamo/blob/main/docs/recipes/inkling.mdx", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.4.0-inkling-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-07-17" - }, - { - "model": "GLM-5.2", - "tag": "1.3.0-glm-5.2-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "sglang-runtime" - ], - "shipped": "Jul 20, 2026", - "gaPath": "dev-only", - "gaLabel": "Dev-only", - "statusLine": "Container carries SGLang cherry-picks (stability, config parsing, model support) opened upstream but not yet in a released SGLang.", - "recipeLabel": "GLM-5 NVFP4 recipe", - "recipeHref": "/dynamo/dev/recipes/glm-5-nvfp4", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-07-20" - }, - { - "model": "MiniMax-M3", - "tag": "1.3.0-minimax-m3-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "vllm-runtime", - "sglang-runtime", - "tensorrtllm-runtime" - ], - "shipped": "Jun 12, 2026", - "gaPath": "promoted", - "gaLabel": "Promoted → :1.3.0", - "statusLine": "Dynamo changes and the M2 tool-calling fix are in release/1.3.0; the recipes run on the stock :1.3.0 containers.", - "recipeLabel": "Recipe on release branch", - "recipeHref": "https://github.com/ai-dynamo/dynamo/tree/release/1.3.0-minimax-m3-dev.1/recipes/minimax-m3", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-minimax-m3-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-06-12" - }, - { - "model": "DeepSeek-V4", - "tag": "1.3.0-deepseek-v4-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "tensorrtllm-runtime" - ], - "shipped": "Jun 6, 2026", - "gaPath": "recipe-in-ga", - "gaLabel": "Recipe in v1.3.0", - "statusLine": "DeepSeek-V4 Flash and Pro recipes ship in v1.3.0 on the standard TensorRT-LLM release container.", - "recipeLabel": "recipes/deepseek-v4 (main)", - "recipeHref": "https://github.com/ai-dynamo/dynamo/tree/main/recipes/deepseek-v4", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-deepseek-v4-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-06-06" - }, - { - "model": "Nemotron-3-Ultra", - "tag": "1.3.0-nemotron-ultra-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "vllm-runtime" - ], - "shipped": "Jun 5, 2026", - "gaPath": "dev-only", - "gaLabel": "Dev-only", - "statusLine": "Four un-upstreamed vLLM patches; requires pinned flags VLLM_DISABLED_KERNELS=FlashInferFP8ScaledMMLinearKernel and --no-enable-flashinfer-autotune.", - "recipeLabel": "Nemotron-3-Ultra recipe", - "recipeHref": "/dynamo/dev/recipes/nemotron-3-ultra", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-nemotron-ultra-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-06-05" - }, - { - "model": "Nemotron-3-Super", - "tag": "1.3.0-nemotron-super-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "vllm-runtime" - ], - "shipped": "Jun 4, 2026", - "gaPath": "dev-only", - "gaLabel": "Dev-only", - "statusLine": "Requires the dedicated `vllm-runtime:1.3.0-nemotron-super-dev.1` image; the model-specific vLLM patches are not in the v1.3.0 release container.", - "recipeLabel": "Nemotron-3-Super recipe", - "recipeHref": "/dynamo/dev/recipes/nemotron-3-super", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-nemotron-super-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-06-04" - }, - { - "model": "Kimi-K2.6", - "tag": "1.3.0-kimi-k2.6-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "vllm-runtime" - ], - "shipped": "Jun 4, 2026", - "gaPath": "promoted", - "gaLabel": "Promoted → :1.3.0", - "statusLine": "The build's only container patch is in vLLM v0.23.0; the recipes run on the stock vllm-runtime:1.3.0.", - "recipeLabel": "Kimi-K2.6 recipe", - "recipeHref": "/dynamo/dev/recipes/kimi-k2-6", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-kimi-k2.6-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-06-04" - }, - { - "model": "Cosmos-3", - "tag": "1.3.0-cosmos3-dev.1", - "releaseLine": "v1.3.0", - "runtimes": [ - "vllm-runtime" - ], - "shipped": "Jun 1, 2026", - "gaPath": "dev-only", - "gaLabel": "Dev-only", - "statusLine": "Dynamo #10132 (Cosmos3 support in the vLLM-Omni backend) is open, not merged — v1.3.0 containers cannot run Cosmos3.", - "recipeLabel": "Launch scripts (branch)", - "recipeHref": "https://github.com/ai-dynamo/dynamo/tree/release/1.3.0-cosmos3-dev.1/examples/backends/vllm/launch", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.3.0-cosmos3-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-06-01" - }, - { - "model": "DeepSeek-V4 preview", - "tag": "1.2.0-deepseek-v4-dev.3", - "releaseLine": "v1.2.0", - "runtimes": [ - "vllm-runtime", - "sglang-runtime" - ], - "shipped": "May 9, 2026", - "gaPath": "superseded", - "gaLabel": "Superseded — recipe in v1.3.0", - "statusLine": "Blackwell (B200 + GB200) preview; per-arch/CUDA tags (e.g. vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3). Superseded by the v1.3.0 recipe.", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.3", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-05-09" - }, - { - "model": "DeepSeek-V4 preview", - "tag": "1.2.0-deepseek-v4-dev.2", - "releaseLine": "v1.2.0", - "runtimes": [ - "vllm-runtime", - "sglang-runtime" - ], - "shipped": "May 1, 2026", - "gaPath": "superseded", - "gaLabel": "Superseded — recipe in v1.3.0", - "statusLine": "Blackwell preview on vLLM v0.20.0 (native DSv4 support); superseded by dev.3.", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-deepseek-v4-dev.2", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-05-01" - }, - { - "model": "DeepSeek-V4 preview", - "tag": "1.2.0-sglang-deepseek-v4-dev.1", - "releaseLine": "v1.2.0", - "runtimes": [ - "sglang-runtime" - ], - "shipped": "Apr 25, 2026", - "gaPath": "superseded", - "gaLabel": "Superseded — recipe in v1.3.0", - "statusLine": "Earliest DSv4 preview (SGLang, B200 only); superseded by dev.2/dev.3.", - "github": "https://github.com/ai-dynamo/dynamo/releases/tag/v1.2.0-sglang-deepseek-v4-dev.1", - "coverage": { - "images": true, - "wheels": false, - "helm": false, - "crates": false - }, - "shippedIso": "2026-04-25" - } - ], - "platformPreviewCoverage": { - "v1.3.0-dev.1": { - "images": true, - "wheels": true, - "helm": true, - "crates": true - }, - "v1.1.0-dev.3": { - "images": true, - "wheels": true, - "helm": false, - "crates": false - }, - "v1.1.0-dev.2": { - "images": true, - "wheels": true, - "helm": false, - "crates": false - }, - "v1.1.0-dev.1": { - "images": true, - "wheels": true, - "helm": true, - "crates": false - } - }, - "platform": { - "gpus": [ - "Blackwell", - "Hopper", - "Ada Lovelace", - "Ampere" - ], - "os": [ - { - "name": "Ubuntu", - "version": "24.04", - "arch": "x86_64, ARM64", - "scope": "Containers and wheels", - "chip": "ubuntu", - "status": "Supported" - }, - { - "name": "Ubuntu", - "version": "22.04", - "arch": "x86_64", - "scope": "Wheels only", - "chip": "ubuntu", - "status": "Supported" - } - ], - "csp": [ - { - "provider": "AWS", - "os": "Amazon Linux 2023", - "arch": "x86_64", - "scope": "Containers and wheels", - "status": "Supported" - } - ], - "arch": [ - "x86_64", - "ARM64 (Ubuntu 24.04 only)" - ], - "wheelsNote": "Wheels are built in a manylinux_2_28 environment (AlmaLinux 8, glibc 2.28+) and validated on Ubuntu 22.04 and 24.04. They install on any Linux distribution with glibc 2.28+ (Debian 11+, RHEL 9, etc.), but only Ubuntu 22.04/24.04 are officially verified." - }, - "knownArtifactIssues": [ - { - "version": "v0.9.0", - "artifact": "dynamo-platform-0.9.0", - "issue": "Helm chart sets operator image to 0.7.1 instead of 0.9.0.", - "status": "Fixed in v0.9.0.post1" - }, - { - "version": "v0.8.1", - "artifact": "vllm-runtime:0.8.1-cuda13", - "issue": "Container fails to launch.", - "status": "Known issue" - }, - { - "version": "v0.8.1", - "artifact": "sglang-runtime:0.8.1-cuda13, vllm-runtime:0.8.1-cuda13", - "issue": "Multimodality not expected to work on ARM64. Works on AMD64.", - "status": "Known limitation" - }, - { - "version": "v0.8.0", - "artifact": "sglang-runtime:0.8.0-cuda13", - "issue": "CuDNN installation issue caused PyTorch v2.9.1 compatibility problems with nn.Conv3d — performance degradation and excessive memory usage in multimodal workloads.", - "status": "Fixed in v0.8.1 (#5461)" - } - ], - "cratesFirstPublished": [ - { - "crate": "dynamo-runtime", - "version": "0.1.0", - "date": "2025-03-18" - }, - { - "crate": "dynamo-llm", - "version": "0.2.0", - "date": "2025-05-01" - }, - { - "crate": "dynamo-async-openai", - "version": "0.4.1", - "date": "2025-08-27" - }, - { - "crate": "dynamo-parsers", - "version": "0.5.0", - "date": "2025-09-18" - }, - { - "crate": "dynamo-memory", - "version": "0.8.0", - "date": "2026-01-15" - }, - { - "crate": "dynamo-config", - "version": "0.8.0", - "date": "2026-01-15" - }, - { - "crate": "dynamo-tokens", - "version": "0.9.0", - "date": "2026-02-12" - }, - { - "crate": "dynamo-mocker", - "version": "1.0.0", - "date": "2026-03-13" - }, - { - "crate": "dynamo-kv-router", - "version": "1.0.0", - "date": "2026-03-13" - }, - { - "crate": "dynamo-protocols", - "version": "1.1.0", - "date": "2026-05-04" - }, - { - "crate": "dynamo-tokenizers", - "version": "1.2.0", - "date": "2026-06-02" - } - ], - "releaseStats": { - "v1.4.0": { - "prs": 640, - "contributors": 127, - "firstTimers": 29, - "breaking": 51, - "knownIssues": 19 - }, - "v1.3.0": { - "prs": 930, - "contributors": 125, - "firstTimers": 24, - "breaking": 24, - "knownIssues": 10 - }, - "v1.2.0": { - "prs": 603, - "contributors": 82, - "breaking": 5, - "knownIssues": 11 - }, - "v1.1.0": { - "prs": 896, - "contributors": 113, - "breaking": 8, - "knownIssues": 20 - }, - "v1.0.0": { - "contributors": 90, - "firstTimers": 34, - "breaking": 41, - "knownIssues": 14 - }, - "v0.9.0": { - "firstTimers": 14, - "breaking": 1, - "knownIssues": 13 - }, - "v0.8.0": { - "firstTimers": 20, - "breaking": 0, - "knownIssues": 14 - }, - "v0.7.0": { - "firstTimers": 2, - "breaking": 0, - "knownIssues": 7 - }, - "v0.6.0": { - "firstTimers": 4, - "breaking": 0, - "knownIssues": 3 - } - }, - "nightliesNote": "ai-dynamo, ai-dynamo-runtime, and kvbm nightly builds from main publish wheels tagged `*.devYYYYMMDD` (since Apr 24, 2026). Install with pip or uv using `--pre` and the NVIDIA extra-index pattern shown above. Runtime containers use rolling `*-runtime-nightly:latest` tags on NGC.", - "nightlyBuilds": [ - { - "version": "1.4.0.dev20260803", - "date": "Aug 3, 2026", - "packages": [ - "ai-dynamo", - "ai-dynamo-runtime", - "kvbm" - ], - "dateIso": "2026-08-03" - }, - { - "version": "1.4.0.dev20260802", - "date": "Aug 2, 2026", - "packages": [ - "ai-dynamo", - "ai-dynamo-runtime", - "kvbm" - ], - "dateIso": "2026-08-02" - }, - { - "version": "1.4.0.dev20260730", - "date": "Jul 30, 2026", - "packages": [ - "ai-dynamo", - "ai-dynamo-runtime" - ], - "note": "kvbm was not published for this nightly.", - "dateIso": "2026-07-30" - } - ] -} diff --git a/docs/fern/pages/reference/general/releases-machine-readable.mdx b/docs/fern/pages/reference/general/releases-machine-readable.mdx index 5d56b5c972a5..3f276f464f8a 100644 --- a/docs/fern/pages/reference/general/releases-machine-readable.mdx +++ b/docs/fern/pages/reference/general/releases-machine-readable.mdx @@ -5,7 +5,7 @@ title: Releases (machine-readable) subtitle: Generated release, compatibility, and artifact data for agents and automation --- -This page is a plain-markdown rendering of [`components/releases.data.ts`](https://github.com/ai-dynamo/dynamo/blob/main/docs/fern/components/releases.data.ts), the single source of truth behind [Compatibility](compatibility.mdx), [Release Artifacts](release-artifacts.mdx), [Model Early Access Builds](model-early-access-builds.mdx), and the [Release Notes](releases/release-history.mdx) timeline. It is regenerated by `scripts/gen_llms_tables.py` at every release bump — do not edit the tables below by hand. Append `.md` to this page's URL for a clean markdown export. The same data ships in-repo as JSON (`docs/fern/assets/releases.json`) and as an Atom feed (`docs/fern/assets/releases-atom.xml`). +This page is a plain-markdown rendering of [`components/releases.data.ts`](https://github.com/ai-dynamo/dynamo/blob/main/docs/fern/components/releases.data.ts), the single source of truth behind [Compatibility](compatibility.mdx), [Release Artifacts](release-artifacts.mdx), [Model Early Access Builds](model-early-access-builds.mdx), and the [Release Notes](releases/release-history.mdx) timeline. It is regenerated by `scripts/gen_llms_tables.py` at every release bump — do not edit the tables below by hand. Append `.md` to this page's URL for a clean markdown export. Fetch the same data as [JSON](https://raw.githubusercontent.com/ai-dynamo/dynamo/docs-website/fern/assets/releases.json) or an [Atom feed](https://raw.githubusercontent.com/ai-dynamo/dynamo/docs-website/fern/assets/releases-atom.xml) from the `docs-website` branch, which the publish pipeline regenerates on every docs publish; the files are no longer committed to `main`. {/* llms-tables:begin — generated by scripts/gen_llms_tables.py, do not edit */} diff --git a/docs/fern/pages/reference/general/releases/release-history.mdx b/docs/fern/pages/reference/general/releases/release-history.mdx index 447170a6c0a3..78c4c9b37f32 100644 --- a/docs/fern/pages/reference/general/releases/release-history.mdx +++ b/docs/fern/pages/reference/general/releases/release-history.mdx @@ -16,7 +16,7 @@ Release notes for Dynamo v1.0.0 and newer are mirrored here from the [GitHub rel For the artifact inventory each release shipped — container images, wheels, Helm charts, crates — see [Release Artifacts](../release-artifacts.mdx). -Agents and automation: [Releases (machine-readable)](../releases-machine-readable.mdx) renders this release data as generated markdown tables, with JSON and Atom twins in-repo at `docs/fern/assets/releases.json` and `docs/fern/assets/releases-atom.xml`. +Agents and automation: [Releases (machine-readable)](../releases-machine-readable.mdx) renders this release data as generated markdown tables. Fetch the published [JSON](https://raw.githubusercontent.com/ai-dynamo/dynamo/docs-website/fern/assets/releases.json) or [Atom feed](https://raw.githubusercontent.com/ai-dynamo/dynamo/docs-website/fern/assets/releases-atom.xml). ## Releases diff --git a/docs/fern/scripts/check_reference.sh b/docs/fern/scripts/check_reference.sh index afc02dec7280..b8d1af718176 100755 --- a/docs/fern/scripts/check_reference.sh +++ b/docs/fern/scripts/check_reference.sh @@ -16,7 +16,7 @@ # 3. No stale reference/(support|feature)-matrix repo links outside the # allowed remnants. # 4. Every absolute /dynamo/dev/reference/... href in components, the data -# module, generated assets, and reference pages resolves to a URL the +# module, and reference pages resolves to a URL the # index.yml reference tab actually publishes. Catches nav # restructures (e.g. pages moving under a new section slug) that # fern broken-links cannot see because the hrefs live in TSX/JSON. @@ -103,8 +103,6 @@ sources = [ pathlib.Path("components/releases.data.ts"), pathlib.Path("scripts/gen_llms_tables.py"), *pathlib.Path("pages/reference").rglob("*.mdx"), - pathlib.Path("assets/releases.json"), - pathlib.Path("assets/releases-atom.xml"), ] bad = [] for source in sources: diff --git a/docs/fern/scripts/gen_llms_tables.py b/docs/fern/scripts/gen_llms_tables.py index de165954e5e3..b4819eb148b8 100755 --- a/docs/fern/scripts/gen_llms_tables.py +++ b/docs/fern/scripts/gen_llms_tables.py @@ -44,8 +44,9 @@ Usage (from any cwd; paths resolve relative to this file): - python3 gen_llms_tables.py # write/refresh all outputs - python3 gen_llms_tables.py --check # exit 1 if any output is stale, no writes + python3 gen_llms_tables.py # write/refresh all outputs + python3 gen_llms_tables.py --check # check marker-spliced pages, no writes + python3 gen_llms_tables.py --assets-only # write/refresh only JSON and Atom Re-run at every release bump, after editing releases.data.ts. @@ -1293,10 +1294,16 @@ def apply_block(page_text: str, block: Block, rendered: str) -> str: def main(argv: list[str]) -> int: ap = argparse.ArgumentParser(description=__doc__.splitlines()[0]) - ap.add_argument( + mode = ap.add_mutually_exclusive_group() + mode.add_argument( "--check", action="store_true", - help="exit 1 if regeneration would change any page; write nothing", + help="exit 1 if regeneration would change a marker-spliced page; write nothing", + ) + mode.add_argument( + "--assets-only", + action="store_true", + help="write only assets/releases.json and assets/releases-atom.xml", ) args = ap.parse_args(argv) @@ -1306,21 +1313,23 @@ def main(argv: list[str]) -> int: print(f"error: failed to parse {DATA_TS}: {exc}", file=sys.stderr) return 2 - # Render everything up front so a failure on any output emits nothing. + # Render every selected output up front so a rendering failure emits nothing. try: rendered: dict[Path, str] = {} - for page_name, blocks in PAGES.items(): - page_path = REFERENCE_DIR / page_name - if not page_path.is_file(): - print(f"error: page not found: {page_path}", file=sys.stderr) - return 2 - text = page_path.read_text(encoding="utf-8") - for block in blocks: - body = build_block(block, block.renderer(data)) - text = apply_block(text, block, body) - rendered[page_path] = text - for asset_path, builder in ASSET_OUTPUTS.items(): - rendered[asset_path] = builder(data) + if not args.assets_only: + for page_name, blocks in PAGES.items(): + page_path = REFERENCE_DIR / page_name + if not page_path.is_file(): + print(f"error: page not found: {page_path}", file=sys.stderr) + return 2 + text = page_path.read_text(encoding="utf-8") + for block in blocks: + body = build_block(block, block.renderer(data)) + text = apply_block(text, block, body) + rendered[page_path] = text + if not args.check: + for asset_path, builder in ASSET_OUTPUTS.items(): + rendered[asset_path] = builder(data) except (TSParseError, KeyError) as exc: print(f"error: rendering failed: {exc!r}", file=sys.stderr) return 2 diff --git a/docs/fern/scripts/simulate_docs_website.sh b/docs/fern/scripts/simulate_docs_website.sh index e9e25a76bc0a..5514586d3c59 100755 --- a/docs/fern/scripts/simulate_docs_website.sh +++ b/docs/fern/scripts/simulate_docs_website.sh @@ -94,6 +94,7 @@ rm -rf "$WT/fern/components"; cp -r "$SRC/components" "$WT/fern/components" rm -rf "$WT/fern/products" cp "$SRC/pages/home/index.mdx" "$WT/fern/index.mdx" perl -pi -e 's|\.\./\.\./assets/|./assets/|g' "$WT/fern/index.mdx" +"$PY" "$SRC/scripts/gen_llms_tables.py" --assets-only [ -d "$SRC/assets" ] && cp -r "$SRC/assets/." "$WT/fern/assets/" || true if [ -d "$SRC/pages/blog/_assets" ]; then mkdir -p "$WT/fern/digest"; cp -r "$SRC/pages/blog/_assets/." "$WT/fern/digest/"