Skip to content

docs: compatibility corrections — first-timer definition, SGLang KV routing, driver-floor table - #12241

Closed
dagil-nvidia wants to merge 21 commits into
mainfrom
dagil-nvidia/compat-corrections
Closed

docs: compatibility corrections — first-timer definition, SGLang KV routing, driver-floor table#12241
dagil-nvidia wants to merge 21 commits into
mainfrom
dagil-nvidia/compat-corrections

Conversation

@dagil-nvidia

@dagil-nvidia dagil-nvidia commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Base is main. #12215 and #12223 have merged, so this is no longer stacked — the diff reads honestly on its own.

What is here

Settle one definition for the first-time contributor column. The column was mixing quantities. v1.1.0's 12 came from a list its own wording calls partial and confines to external contributors; GitHub's New Contributors lists compute a third thing entirely (first-ever merged PR over the compare range) and put the pre-v1.0.0 releases at 11 where their announcements say 20 and 14. Settled on the release bodies, which every other column in this table already uses, and required the figure to be release-wide and complete. v1.1.0 becomes a dash rather than an undercount. The rule is written into COUNTING RULES so the next ingest does not re-litigate it.

v1.3.0 first-timers 23 → 24. The published body states 24 and enumerates 24; 23 came from a pre-release draft. @Change72 was raised as a name that should not be on that list because PR #10157 predates the v1.2.1 tag. It does by date, but release/1.2.x was cut from main on 2026-05-12 and #10157 merged 2026-06-02, so it is absent from v1.2.1 and first ships in v1.3.0 — inside the compare range, which makes them a genuine first-timer. Left in place.

Correct the SGLang multimodal KV routing claim. Several places said "not supported". decode_handler.py probes engine.async_generate for mm_hashes at startup: present means per-image hashes are forwarded and image identity participates in cache overlap; absent means the request still completes and routing falls back to text-prefix overlap. So it is supported on Dynamo's SGLang image and degrades rather than fails elsewhere.

A later review pass found the mechanism as first written was still wrong: the probe only gates the kwarg passed to engine.async_generate, while gather_mm_exact_routing_info in preprocessor.rs builds image-aware keys regardless. The note now says that. The scope was also split so EPD, E/PD and E/P/D read as multimodal-serving disaggregation patterns rather than as KV-routing modes.

A driver-first view of the support matrix. The matrix answers "what does this release require"; a reader with a driver already installed is asking the inverse. New generated table: one row per driver floor, one column per backend, each cell the newest release that backend runs on that driver. Floors and backends derive from CUDA_HISTORY, so a fourth of either flows through without a code change. Driver versions parse to integers before comparison. TensorRT-LLM says None on the 570 and 575 rows rather than a dash — that is the most useful cell in the table.

A review pass caught that the table named vLLM 0.7.0 on the 570 row when v0.7.0.post1 is the newest release on that floor; post trains carry no CUDA_HISTORY row of their own and inherit their base's. Now resolved through the base version.

Gate the reading-list chips on notes pages. buildReadingChips tested RELEASE_STATS membership before emitting a deep link to a per-release section that only exists for releases with a notes page. Not currently reachable with a bad version, but ReadingListFooter is exported and the guard was one import away from being wrong again.

Run the generator tests. The 14 tests covering this generator never executed in CI — root pytest carries --ignore-glob=docs/*, check_reference.sh does not invoke pytest, and nothing in .github/ referenced them. Added a gen-llms-tables pre-commit hook scoped to the generator, its tests, and releases.data.ts, plus a docs/fern/scripts/pytest.ini registering the markers under --strict-markers.

Drop three phantom imports. ReferenceStyles, RecipeStyles and TerminalDemo carried import-shaped examples in their docblocks. Fern's bundler scans component files for import specifiers without skipping comments, and a non-relative @/… specifier sends it to npx rolldown, which has no network on the runner. That is what failed this PR's Preview or publish docs job. Publishes on main are unaffected because only the preview path bundles components, so this was breaking previews on every docs PR while the site kept updating. #12388 fixes the same three files repo-wide and adds a guard; this is the minimum to unblock here and will conflict trivially with it.

Repoint the CUDA compatibility link. The bare directory URL 301s; the link checker counts a redirect as a failure.

Verification

  • gen_llms_tables.py --check — all outputs unchanged; visible tables and the agent mirror stay in lockstep
  • 14 tests pass
  • fern check — 0 errors, 1292 warnings, matching main's baseline
  • check_reference.sh — gates 1, 2, 3 and 5 pass, 0 broken links in reference/. Gate 4 raises StopIteration on main as well: docs: align documentation paths with site structure #12373 removed the variants: layer under the reference tab and the gate still walks it. Pre-existing, not from this PR, and not CI-wired.
  • pre-commit clean on every touched file

Ownership

All files are docs-owned except .pre-commit-config.yaml, which adds the generator-test hook and routes to dynamo-ops-codeowners.

@dagil-nvidia
dagil-nvidia requested a review from a team as a code owner July 28, 2026 00:13
@github-actions github-actions Bot added docs documentation Improvements or additions to documentation labels Jul 28, 2026

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread docs/fern/pages/reference/general/compatibility.mdx
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 47971934ce

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/fern/components/releases.data.ts
Comment thread docs/fern/scripts/gen_llms_tables.py
Comment thread docs/fern/pages/reference/general/compatibility.mdx Outdated
Comment thread docs/fern/scripts/test_gen_llms_tables.py
Comment thread docs/fern/scripts/test_gen_llms_tables.py Outdated
Comment thread docs/fern/scripts/test_gen_llms_tables.py
The Find a Compatible Release picker asked readers to state their backend
and driver generation before showing anything. Replace it with the matrix
itself, collapsed in a native Fern Accordion, so the CUDA toolkit and
minimum driver requirements are scannable across releases in one view.

This also closes a nav gap: the full CUDA-and-driver-by-release table was
reachable only from reference/releases-data.mdx (hidden from the sidebar)
and the llms-only twin, neither of which a browsing reader will find.

gen_llms_tables.py grows support for more than one generated span per
page, keyed by marker name, and emits the accordion from CUDA_HISTORY so
the numbers stay tied to releases.data.ts at every release bump. The new
span fails closed when its markers are absent rather than appending
itself, keeping placement under human control.

Mainline is read as the stable minor lines (v1.3.0 down to v0.7.0);
CUDA_NOTES already records that patch releases inherit the CUDA support
of their base version, so their rows would only restate the mainline row.

RunsWhereWizard.tsx is left in place -- compatibility.mdx was its only
consumer, but deleting the component is the PR author's call.

Signed-off-by: Daniel Gil <dagil@nvidia.com>
Signed-off-by: Dan Gil <dagil@nvidia.com>
The accordion listed only the stable minor lines, on the reasoning that
patch rows restate their base version. That drops real information: a
reader running v1.2.1 had to infer their row from v1.2.0. Cover every
released line instead -- stable releases and their patches -- taking the
matrix from 29 rows to all 60 in CUDA_HISTORY.

Platform previews and model-specific builds stay out. CUDA_HISTORY
carries no rows for them today, so filtering on kind is currently a
no-op, but the filter is expressed on kind rather than on the data
happening to be clean, so a future -dev entry cannot leak in unnoticed.

The accordion and the llms-only twin now emit the same 60 rows. Keeping
both is deliberate: the twin exists because component output may be
dropped from the agent-facing exports, and <Accordion> is a component.
The local dev server does not serve the .md export, so this could not be
verified here; losing the matrix for agents is a worse failure than
repeating it. Comment records the intent so it is not pruned blindly.

Signed-off-by: Daniel Gil <dagil@nvidia.com>
Signed-off-by: Dan Gil <dagil@nvidia.com>
The widened matrix runs 60 rows. In a collapsed accordion a single flat
run pushes its header off screen almost immediately, so the reader loses
track of which column is which. Split it into one captioned table per
minor line (1.3.x down to 0.7.x, largest group 15 rows) inside the same
single <Accordion> -- the header repeats every few rows and there is
still only one panel to open.

Separate tables rather than printing the version once and blanking the
repeats: blank leading cells are ambiguous once the page is flattened
into the agent-facing markdown export.

The agent twin keeps the matrix as one flat table. The human and agent
spans are now genuinely different renderings -- grouped for scanning,
flat for parsing -- so carrying both is justified on the merits rather
than on uncertainty about whether <Accordion> children survive the
export.

Signed-off-by: Dan Gil <dagil@nvidia.com>
[kv-routing] pointed at ../user-guides/kv-cache-aware-routing.md. No
user-guides/ directory exists under docs/fern and no file ever lived at
that path in this repo's history, so the reference resolved nowhere and
failed fern broken-links twice (once per docs variant).

The note it sources -- SGLang multimodal plus KV-aware routing is not
supported -- is mirrored from docs/fern/backends/sglang/README.md, which
compatibility.mdx names as its source for the SGLang matrix. That README
carries the identical note and cites components/router/README.md, whose
multimodal section documents image routing for the TRT-LLM and vLLM
router paths only. Pointing at the same target keeps the two pages
citing one authority instead of diverging.

reference/ broken-link errors go 2 -> 0. One pre-existing error remains
in kubernetes/api-reference.md, untouched here.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@dagil-nvidia
dagil-nvidia force-pushed the dagil-nvidia/release-stats-on-history branch from 3780b43 to 5d8fb95 Compare July 28, 2026 23:21
@dagil-nvidia
dagil-nvidia force-pushed the dagil-nvidia/compat-corrections branch from 4797193 to 48fc165 Compare July 28, 2026 23:21
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test 48fc165

One conflict, on the [kv-routing] link definition in compatibility.mdx.
#12243 repointed it at ../kubernetes/kv-aware-routing.md; this branch had
repointed it at ../components/router/README.md. Kept this branch's target:
#12241 introduces a separate [mm-kv-routing] reference for the multimodal
claims and keeps [kv-routing] on the router README, so taking the other
side would re-conflict one PR later. Both targets exist; the link resolves.

Also regenerated releases-data.mdx, which went stale on a dependency bump
(nixl 1.1.0 -> 1.3.1).

check_reference.sh: all 5 gates pass, 0 broken links in reference/.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@dagil-nvidia
dagil-nvidia force-pushed the dagil-nvidia/release-stats-on-history branch from 5d8fb95 to 603c04e Compare July 29, 2026 15:44
@dagil-nvidia
dagil-nvidia force-pushed the dagil-nvidia/compat-corrections branch from 48fc165 to 333a827 Compare July 29, 2026 15:45
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test 333a827

One conflict, in docs/fern/reference/releases-data.mdx. That file is
generated by gen_llms_tables.py, which auto-merged, so the conflict was
resolved by regenerating rather than hand-merging the markers.

gen_llms_tables.py --check is idempotent afterwards, and fern broken-links
reports 0 errors in reference/.

Signed-off-by: Dan Gil <dagil@nvidia.com>
Resolve conflicts:
- docs/fern/pages/reference/general/compatibility.mdx: keep main's relocated
  reference paths under developer-guide/knowledge-base and use-cases.
- docs/fern/scripts/gen_llms_tables.py: preserve this PR's Block/support-matrix
  architecture (support-matrix + llms-tables markers) and adopt main's current
  generated filename releases-machine-readable.mdx (was releases-data.mdx).

Regenerate outputs; compatibility.mdx accordion now links to
releases-machine-readable.mdx.

Signed-off-by: Daniel Gil <dagil@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

dagil-nvidia added a commit that referenced this pull request Jul 31, 2026
Propagate #12223's updated parent (707fac7, which itself carries #12215's
merge of main and the releases-machine-readable.mdx rename) into #12241.

Resolve conflict in docs/fern/pages/developer-guide/knowledge-base/
modular-components/backends/sglang/overview.md Note 1: keep this PR's
corrected SGLang KV-routing text (hash-forwarding patch on Dynamo's image,
fallback to text-prefix on custom builds) and update its `Source` href to
the current relocated site path use-cases/multimodal-serving/
multimodal-kv-routing.md (matching notes 2/3 already using the relocated
knowledge-base paths). The compatibility.mdx SGLang cell auto-merged with
the same correction; the driver-floor renderer/table and generator tests
carry over untouched at their current paths.

Signed-off-by: Daniel Gil <dagil@nvidia.com>
Signed-off-by: Dan Gil <dagil@nvidia.com>
Signed-off-by: Daniel Gil <dagil@nvidia.com>
Base automatically changed from dagil-nvidia/release-stats-on-history to dagil-nvidia/compatibility-page-cleanup July 31, 2026 19:26
The column was mixing two incompatible quantities. Most cells came from
the release bodies, but the bodies themselves are not uniform: v1.1.0's
figure counted only external contributors, from a list its own wording
calls partial ("first-time external contributors ... include"). GitHub's
New Contributors lists answer a third question -- first-ever merged PR
over the compare range -- and put the pre-v1.0.0 releases at 11 where
their announcements say 20 and 14.

Settle on the bodies, which is what every other column in this table
already uses, and require the figure to be release-wide and complete.
v1.1.0 fails both tests and becomes a dash rather than an undercount.

v1.3.0 moves 23 -> 24. The published body states 24 and enumerates 24;
23 came from a pre-release draft. @Change72 was raised as a name that
should not be on that list, on the grounds that PR #10157 predates the
v1.2.1 tag. It does by date, but release/1.2.x was cut from main on
2026-05-12 and #10157 merged 2026-06-02, so it is absent from v1.2.1 and
first ships in v1.3.0 -- inside the compare range, which makes them a
genuine first-timer here. Left in place.

Footnote the empty cells on the rendered page too. They are permanent
now rather than pending, so a reader deserves to know why they are empty
and that first-timers are counted release-wide.

Signed-off-by: Dan Gil <dagil@nvidia.com>
The compatibility matrix, the SGLang backend README, and the data behind
the agent-facing twin all said multimodal plus KV-aware routing was not
supported on SGLang. The code says otherwise, and has since the upstream
interop patch landed.

decode_handler.py probes engine.async_generate once at startup for the
mm_hashes argument. When it is there, per-image hashes are forwarded and
SGLang builds the same pad_value the router used, so image identity
participates in cache overlap. When it is absent the request still
completes and routing falls back to text-prefix overlap alone.

So the honest answer is neither "supported" nor "not supported": it is
supported on Dynamo's SGLang image, which carries the patch, and
degrades rather than fails on a custom build without it. State that
everywhere the claim appears, including the router README, whose
"documented TRT-LLM and vLLM router paths" wording implied SGLang was
excluded outright. The SGLang multimodal guide describes the hash
forwarding but never said what happens without it; it does now.

The support matrix in multimodal-kv-routing.md already had this right.

Signed-off-by: Dan Gil <dagil@nvidia.com>
The matrix answers "what does this release require". A reader who
already has a driver installed is asking the inverse, and the only way
to answer it from the matrix is to scan every row deciding which floors
their driver clears.

Add a small generated table above the accordion that inverts it: one row
per driver floor, one column per backend, each cell the newest release
that backend runs on that driver. Read it as "at least this version" --
a 580 driver satisfies the 575 and 570 floors too, so those releases
stay runnable and the cell reflects that rather than showing only what
requires exactly 580.

Floors and backends are both derived from CUDA_HISTORY, so a fourth
floor or a fourth backend appears without touching this code. Driver
versions parse to integers before they are compared; the retired wizard
compared strings like "580.xx+", which is right only for as long as
every floor has three digits.

TensorRT-LLM has no build that runs on a 570 or 575 driver. That is the
most useful cell in the table, so it says None rather than rendering an
ambiguous dash.

Signed-off-by: Dan Gil <dagil@nvidia.com>
Same coincidence as the from-candidate filter, one layer down.
buildReadingChips tested RELEASE_STATS membership before emitting a chip
that deep-links to a per-release section of the Deprecations or Known
Issues page. Those sections exist only for releases with a notes page;
stats membership stood in for that, and only matched because
RELEASE_STATS held nothing older than v1.0.0.

Backfilling the pre-v1.0.0 rows ended that. It is not currently
reachable with a bad version, because the caller now filters
from-candidates on notesHref, but ReadingListFooter is exported and the
guard is one import away from being wrong again. Test the condition the
hrefs actually depend on so both layers agree.

Signed-off-by: Dan Gil <dagil@nvidia.com>
The bare directory URL 301s to /latest/, and the link checker counts a
redirect as a failure. Only this one use was bare; the deep links
elsewhere already resolve directly.

Signed-off-by: Dan Gil <dagil@nvidia.com>
copyright-checks rejects any .py under the repo that does not open with
the Apache header block. The new generator test file started at its
docstring, so the job failed on this one path. Match the header
gen_llms_tables.py already carries.

Signed-off-by: Dan Gil <dagil@nvidia.com>
The hand-authored Per-Backend Detail tab still said multimodal was not
compatible with KV-aware routing, so the page contradicted the Feature
Interactions note and the generated per-release table a few hundred
lines away. Same wording as the generated table: supported on Dynamo's
SGLang image, text-prefix fallback on a build without the patch.

Signed-off-by: Dan Gil <dagil@nvidia.com>
The ingested page was taken from a pre-release draft: 23 first-timers,
and @jooe0824 missing from both the New Contributors list and the SK
Telecom line. The published v1.3.0 body says 24 and enumerates 24,
which is the figure the release table now carries, so the page was the
only thing still saying 23.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@dagil-nvidia
dagil-nvidia force-pushed the dagil-nvidia/compat-corrections branch from 456b515 to d46fd16 Compare August 1, 2026 00:39
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test d46fd16

The 11 (now 14) tests for gen_llms_tables.py were only reachable by hand: the
root pytest config carries --ignore-glob=docs/*, and neither check_reference.sh,
pre-commit, nor any workflow invoked the file. Add a local hook scoped to the
generator, its tests, and releases.data.ts.

Markers cannot come from the root config for the same ignore-glob reason, so a
standalone pytest.ini beside the tests registers pre_merge / gpu_0 / unit and
turns on --strict-markers for this file.

Signed-off-by: Dan Gil <dagil@nvidia.com>
Two accuracy fixes on the compatibility page.

Driver floors: the table filtered CUDA_HISTORY on an exact version match, so
post trains -- which deliberately carry no CUDA_HISTORY row because CUDA_NOTES
states they inherit their base release's CUDA support -- never appeared. The
570.xx+ row named vLLM 0.7.0 when v0.7.0.post1 is the newest release that runs
there. Resolve each cell through the newest release sharing that base.

SGLang fallback note: the note claimed Dynamo drops image identity from the
routing key when the startup probe finds no mm_hashes kwarg. It does not.
_resolve_mm_hashes_supported only gates the kwarg passed to
engine.async_generate in the SGLang decode handler; the frontend keeps building
image-aware routing keys via gather_mm_exact_routing_info, so the worker's
internally computed hashes never align and only the text prefix overlaps. The
distinction matters when diagnosing KV events on a custom image. Same note on
the SGLang overview page, corrected identically.

Three tests cover the post-train inheritance.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@dagil-nvidia
dagil-nvidia requested a review from a team as a code owner August 1, 2026 18:29
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test 5fcaa5e

Base automatically changed from dagil-nvidia/compatibility-page-cleanup to main August 1, 2026 18:38
@pull-request-size pull-request-size Bot added size/XL and removed size/L labels Aug 1, 2026
#12215 merged and its branch was deleted, so this retargeted to main. Four
files conflicted.

gen_llms_tables.py: took main's narrowed accordion caption and
SUPPORT_MATRIX_KINDS comment, both from #12215's own review fix, and kept
this branch's driver-floor work. The PAGES entry now carries driver-floors,
support-matrix and llms-tables; #12529 deletes SUPPORT_MATRIX_KINDS and
released_versions(), which driver_floor_table() and newest_release_per_base()
call, so that sibling conflict must not be resolved by taking the deletion.

compatibility.mdx: kept the generated driver-floors block.

release-history.mdx and releases.data.ts: kept this branch's first-timer
definition -- release-wide, blank rather than undercounted -- which is the
correction the PR exists to make. Main still carried 23 and 12.

Restored pages/use-cases/multimodal-serving/parallel-media-decoding.md, added
on main and dropped by the merge while index.yml still referenced it.

Verified: gen_llms_tables --check 0 stale; 14 tests pass; fern check 0 errors
and 1292 warnings, matching main's baseline. The driver-floor table renders
0.7.0.post1 on the 570 row, release-history shows 24 and a blank v1.1.0, and
the corrected SGLang KV-routing claim has no stale occurrences left.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@pull-request-size pull-request-size Bot added size/L and removed size/XL labels Aug 1, 2026
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test f2ddd76

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The PR adds generated driver-floor compatibility tables and their tests, documents conditional SGLang multimodal KV-aware routing, corrects release statistics, updates release acknowledgments, and adds validation for release reading-list links.

Changes

Driver-floor compatibility support

Layer / File(s) Summary
Driver-floor table generation
docs/fern/scripts/gen_llms_tables.py, docs/fern/pages/reference/general/compatibility.mdx
The generator parses driver floors, normalizes post-train releases, selects compatible releases, and renders the compatibility table. The compatibility page registers the generated block and updates the CUDA link.
Generator validation and automation
docs/fern/scripts/test_gen_llms_tables.py, docs/fern/scripts/pytest.ini, .pre-commit-config.yaml
Tests cover parsing, ordering, filtering, post-train inheritance, failure cases, and checked-in data. A pre-commit hook runs these tests for related documentation changes.

SGLang multimodal routing documentation

Layer / File(s) Summary
SGLang routing capability contract
docs/fern/pages/developer-guide/knowledge-base/modular-components/backends/sglang/*, docs/fern/pages/developer-guide/knowledge-base/modular-components/router/overview.md
The documentation requires mm_hashes, describes startup capability detection, and documents text-prefix fallback for custom builds without the hash-forwarding patch.
SGLang compatibility and release records
docs/fern/assets/releases.json, docs/fern/components/releases.data.ts, docs/fern/pages/reference/general/compatibility.mdx, docs/fern/pages/reference/general/releases-machine-readable.mdx
Compatibility matrices and release entries mark patched SGLang images as supporting multimodal KV-aware routing and describe fallback behavior.

Release statistics and release navigation

Layer / File(s) Summary
Release statistics rules and values
docs/fern/components/releases.data.ts, docs/fern/scripts/gen_llms_tables.py, docs/fern/assets/releases.json, docs/fern/pages/reference/general/releases/*
The documentation defines release-wide first-time-contributor counting rules. The release statistics update v1.3.0 to 24 and remove the unavailable v1.1.0 value.
Release navigation and acknowledgments
docs/fern/components/UpgradePanel.tsx, docs/fern/pages/reference/general/releases/dynamo-v1-3-0.mdx
Reading-list items require release statistics and notesHref. The v1.3.0 acknowledgments add one contributor entry and contribution record.

Estimated code review effort: 4 (Complex) | ~45 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is detailed and relevant but omits the required Related Issues section and does not identify where reviewers should start. Add the required Related Issues declaration and a Where should the reviewer start section naming the key files or changes to review.
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main documentation corrections, SGLang routing update, and new driver-floor table.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/fern/scripts/test_gen_llms_tables.py (1)

116-116: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use next() instead of an indexed list comprehension.

Ruff flags this pattern (RUF015). Building the full list only to take the first element is unnecessary here.

♻️ Proposed fix
-        oldest = [ln for ln in table.splitlines() if ln.startswith("| 570.xx+")][0]
+        oldest = next(ln for ln in table.splitlines() if ln.startswith("| 570.xx+"))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fern/scripts/test_gen_llms_tables.py` at line 116, Update the oldest
assignment in the table-processing logic to use next() over the filtered
splitlines iterator instead of constructing a list and indexing its first
element, preserving the existing lookup for the first line starting with "|
570.xx+".

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/fern/components/releases.data.ts`:
- Line 444: Clarify the SGLang compatibility note in all three release
representations: docs/fern/components/releases.data.ts:444,
docs/fern/assets/releases.json:906, and
docs/fern/pages/reference/general/releases-machine-readable.mdx:131. State that
KV-aware routing applies to aggregated worker deployments, then separately
describe EPD, E/PD, and E/P/D as multimodal-serving disaggregation patterns;
keep the custom-build fallback detail consistent across all copies.

---

Nitpick comments:
In `@docs/fern/scripts/test_gen_llms_tables.py`:
- Line 116: Update the oldest assignment in the table-processing logic to use
next() over the filtered splitlines iterator instead of constructing a list and
indexing its first element, preserving the existing lookup for the first line
starting with "| 570.xx+".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1b03220d-9011-46e1-92e5-2f72d72ab877

📥 Commits

Reviewing files that changed from the base of the PR and between 398cdc3 and f2ddd76.

📒 Files selected for processing (14)
  • .pre-commit-config.yaml
  • docs/fern/assets/releases.json
  • docs/fern/components/UpgradePanel.tsx
  • docs/fern/components/releases.data.ts
  • docs/fern/pages/developer-guide/knowledge-base/modular-components/backends/sglang/multimodal.md
  • docs/fern/pages/developer-guide/knowledge-base/modular-components/backends/sglang/overview.md
  • docs/fern/pages/developer-guide/knowledge-base/modular-components/router/overview.md
  • docs/fern/pages/reference/general/compatibility.mdx
  • docs/fern/pages/reference/general/releases-machine-readable.mdx
  • docs/fern/pages/reference/general/releases/dynamo-v1-3-0.mdx
  • docs/fern/pages/reference/general/releases/release-history.mdx
  • docs/fern/scripts/gen_llms_tables.py
  • docs/fern/scripts/pytest.ini
  • docs/fern/scripts/test_gen_llms_tables.py

Comment thread docs/fern/components/releases.data.ts Outdated
CodeRabbit was right that the SGLang multimodal note read as if EPD, E/PD and
E/P/D were KV-aware routing modes. They are multimodal-serving disaggregation
patterns. Split the two claims: KV-aware routing applies to aggregated
workers, disaggregation is stated separately. releases.json regenerates from
the same source.

Also removes the import-shaped examples from the ReferenceStyles, RecipeStyles
and TerminalDemo docblocks. Fern's bundler scans component files for import
specifiers without skipping comments; a non-relative "@/..." specifier sends it
to `npx rolldown`, which has no network on the runner. That is what failed this
PR's `Preview or publish docs` job:

  Failed to bundle third-party imports in .../RecipeStyles.tsx:
  rolldown exited with code 127 -- sh: 1: rolldown: not found

Publishes on main are unaffected -- only the preview path bundles components --
so this broke previews on every docs PR while the site kept updating. #12388
fixes the same three files repo-wide and adds a guard; this is the minimum to
unblock here and will conflict trivially with it.

gen_llms_tables --check 0 stale; fern check 0 errors, 1292 warnings; 14 tests
pass; all three components parse under esbuild.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test 7409ce7

Signed-off-by: Dan Gil <dagil@nvidia.com>

# Conflicts:
#	.pre-commit-config.yaml
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

/ok to test da040e0

dagil-nvidia added a commit that referenced this pull request Aug 7, 2026
#12241 and this PR both rewrote compatibility.mdx and gen_llms_tables.py and
conflicted in both. Landing them in sequence would have meant resolving that
conflict blind on the second rebase; folding resolves it once with both sides
in hand. #12241 is closed in favour of this.

Carried over from #12241:

  * The driver-floor table, which inverts the support matrix -- read across
    from a driver you already have to the newest release each backend runs on
    it. <ReleaseSupportMatrix /> renders only the forward view (release -> min
    driver), so this stays a generated span, now placed beside the component
    it inverts.
  * The SGLang multimodal and router prose corrections, the v1.3.0 release
    note and release-history fixes, and the UpgradePanel change.
  * test_gen_llms_tables.py (14 tests) with its pytest.ini and pre-commit hook.
  * The CUDA compatibility link, now pointing at /latest/ so it resolves
    without a redirect hop.

Dropped from #12241, superseded here:

  * The generated support-matrix accordion and its render_support_matrix
    renderer. <ReleaseSupportMatrix /> replaces that rendering, and the data
    still reaches agents through the llms-tables twin.
  * The raw feature-interaction markdown tables, replaced by
    <FeatureInteractions />. Their per-cell notes live in releases.data.ts.

Corrects a factual error this fold exposed. FEATURE_INTERACTIONS marked the
SGLang Multimodal x KV-Aware Routing cell "no" ("This feature combination is
not supported"), while the merged feature table on the same page described it
as supported with a fallback -- the page contradicted itself. multimodal-kv-
routing.md is the authority and says supported: hash forwarding is upstream in
SGLang 0.5.13+ and Dynamo pins 0.5.16. The cell is now "yes", noting that a
custom build without the patch degrades to text-prefix routing.

Not carried over: the RecipeStyles, ReferenceStyles and TerminalDemo comment
fixes, which are #12388's and stay there. Those three files are byte-identical
to main on this branch.

Validation: gen_llms_tables.py --check clean; check_agent_twins.py clean on all
three governed pages with its self-test at 14/14; pytest test_gen_llms_tables.py
14 passed; ruff clean. Verified the corrected note reaches the agent twin.

Signed-off-by: Dan Gil <dagil@nvidia.com>
@dagil-nvidia

Copy link
Copy Markdown
Collaborator Author

Closing — folded into #12529 as de97c69.

Both PRs rewrote compatibility.mdx and gen_llms_tables.py and conflicted in both. Landing them in sequence meant resolving that conflict blind on the second rebase, so I merged them once with both sides in hand instead.

Carried over: the driver-floor table (it inverts the support matrix — read across from a driver you have to the newest release each backend runs on it — and <ReleaseSupportMatrix /> has no inverse view, so it stays a generated span), the SGLang multimodal and router prose corrections, the v1.3.0 release-note and release-history fixes, the UpgradePanel change, test_gen_llms_tables.py with its pytest.ini and pre-commit hook, and the /latest/ CUDA compatibility link.

Dropped as superseded: the generated support-matrix accordion and its render_support_matrix renderer, replaced by <ReleaseSupportMatrix /> (the data still reaches agents through the llms-tables twin), and the raw feature-interaction markdown tables, replaced by <FeatureInteractions /> (their per-cell notes live in releases.data.ts).

The fold also exposed a factual error worth calling out. #12529 had the SGLang Multimodal × KV-Aware Routing cell as "no" — "This feature combination is not supported" — while this PR's feature-table correction on the same page described it as supported with a fallback. Merged naively, the page would have contradicted itself. multimodal-kv-routing.md is the authority and says supported: hash forwarding is upstream in SGLang 0.5.13+ and Dynamo pins 0.5.16. The cell is now "yes", noting that a custom build without the patch degrades to text-prefix routing.

Not carried over: the RecipeStyles / ReferenceStyles / TerminalDemo comment fixes. Those are #12388's and stay there — on #12529 those three files are byte-identical to main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs documentation Improvements or additions to documentation size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant