Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
84a32c1
docs: replace compatibility wizard with a collapsed support matrix
dagil-nvidia Jul 27, 2026
d1551ab
docs: widen the support matrix to patch releases
dagil-nvidia Jul 27, 2026
d316264
docs: group the support matrix by minor line
dagil-nvidia Jul 27, 2026
99614d7
docs: repoint the KV-routing citation at the router README
dagil-nvidia Jul 27, 2026
b5ff7ab
Merge origin/main into work-12215
dagil-nvidia Jul 29, 2026
6d8df6a
Merge origin/main into dagil-nvidia/compatibility-page-cleanup
dagil-nvidia Jul 30, 2026
0a01ca7
Merge origin/main into dagil-nvidia/compatibility-page-cleanup
dagil-nvidia Jul 31, 2026
9934563
docs: give release statistics a visible home on Release History (#12223)
dagil-nvidia Jul 31, 2026
abfebf9
docs: settle one definition for the first-time contributor column
dagil-nvidia Jul 28, 2026
3e6de62
docs: correct the SGLang multimodal KV routing claim
dagil-nvidia Jul 28, 2026
fc4251f
docs: add a driver-first view of the CUDA support matrix
dagil-nvidia Jul 28, 2026
1a2a6de
fix: gate the reading-list chips on notes pages, not on stats
dagil-nvidia Jul 28, 2026
ee76eb9
docs: repoint the CUDA compatibility link past its redirect
dagil-nvidia Jul 28, 2026
21ba5a4
docs: add the SPDX header to the generator test module
dagil-nvidia Jul 28, 2026
40ce374
docs: correct the last SGLang KV-routing claim on the compatibility page
dagil-nvidia Jul 28, 2026
d46fd16
docs: refresh the v1.3.0 contributor list from the published release
dagil-nvidia Jul 28, 2026
fc81bcf
docs: restructure compatibility page and correct platform data
dagil-nvidia Jul 31, 2026
6640164
docs: drop the link definitions the matrix rewrite orphaned
dagil-nvidia Aug 1, 2026
b59255f
ci: gate the docs table generator tests in pre-commit
dagil-nvidia Aug 1, 2026
5fcaa5e
docs: correct the driver-floor table and the SGLang MM-routing note
dagil-nvidia Aug 1, 2026
4fa08e8
docs: repoint the compatibility page's dead links
dagil-nvidia Aug 1, 2026
5b1e050
docs: show per-backend driver floors and count post trains in the matrix
dagil-nvidia Aug 1, 2026
f2ddd76
Merge origin/main into dagil-nvidia/compat-corrections
dagil-nvidia Aug 1, 2026
7409ce7
docs: scope the SGLang multimodal note and drop phantom imports
dagil-nvidia Aug 2, 2026
37867ac
docs: restore the AWS platform row and unnest the interaction panels
dagil-nvidia Aug 2, 2026
c76fbbc
Merge origin/main into dagil/release-support-matrix
dagil-nvidia Aug 3, 2026
5687c76
Merge remote-tracking branch 'origin/main' into m529
dagil-nvidia Aug 3, 2026
37bc11d
fix(docs): inject heatmap CSS past the text-child escaper
dagil-nvidia Aug 3, 2026
f61b8a5
docs: source feature interactions from data and flatten the release m…
dagil-nvidia Aug 3, 2026
9c88e2d
docs: title-case the interaction panels and dress the minor-line rows
dagil-nvidia Aug 3, 2026
6498f5b
docs: correct the EFA multi-arch claims and tighten the compatibility…
dagil-nvidia Aug 3, 2026
da040e0
Merge remote-tracking branch 'origin/main' into u12241
dagil-nvidia Aug 5, 2026
1c02c83
Merge remote-tracking branch 'origin/main' into v12529
dagil-nvidia Aug 5, 2026
40781b0
Merge remote-tracking branch 'origin/main' into x12529
dagil-nvidia Aug 5, 2026
f52dc60
Merge remote-tracking branch 'origin/main' into y12529
dagil-nvidia Aug 6, 2026
e291d6a
ci(docs): require an agent twin for component-rendered data
dagil-nvidia Aug 6, 2026
a6f7520
ci(docs): make the agent-twin check catch what it claimed to
dagil-nvidia Aug 6, 2026
6e622c1
ci(docs): guard FeatureInteractions and scope the twin check
dagil-nvidia Aug 6, 2026
ff0098f
ci(docs): run the twin check when releases.data.ts changes
dagil-nvidia Aug 6, 2026
9394214
ci(docs): close the three residual gaps in the twin check
dagil-nvidia Aug 6, 2026
de97c69
docs: fold the compatibility corrections from #12241 into this PR
dagil-nvidia Aug 7, 2026
98425e2
fix(docs): address review on the twin check and generated tables
dagil-nvidia Aug 10, 2026
f020845
fix(docs): make the style check report, and gate the Atom feed
dagil-nvidia Aug 10, 2026
632fc97
docs: say what the release support matrix actually covers
dagil-nvidia Aug 10, 2026
b874ce5
Revert the release-matrix scope claim, and say what Not recorded means
dagil-nvidia Aug 10, 2026
7dc4547
Merge origin/main, and fix the gen-llms-tables-check hook
dagil-nvidia Aug 10, 2026
0155c4b
Merge origin/main
dagil-nvidia Aug 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 23 additions & 18 deletions docs/fern/assets/releases.json
Original file line number Diff line number Diff line change
Expand Up @@ -1667,37 +1667,22 @@
"name": "Ubuntu",
"version": "24.04",
"arch": "x86_64, ARM64",
"status": "Supported",
"scope": "Containers and wheels",
"chip": "ubuntu"
},
{
"name": "Ubuntu",
"version": "22.04",
"arch": "x86_64",
"status": "Supported",
"scope": "Wheels only",
"chip": "ubuntu"
},
{
"name": "CentOS Stream",
"version": "9",
"arch": "x86_64",
"status": "Experimental",
"chip": "centos"
}
],
"arch": [
"x86_64",
"ARM64 (Ubuntu 24.04 only)"
],
"wheelsNote": "Wheels are built in a manylinux_2_28-compatible environment and validated on CentOS Stream 9 and Ubuntu 22.04/24.04. Other Linux distributions are expected to work but are not officially verified.",
"csp": [
{
"provider": "AWS",
"os": "Amazon Linux 2023",
"arch": "x86_64",
"status": "Supported"
}
]
"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": [
{
Expand Down Expand Up @@ -1808,6 +1793,26 @@
"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 and ai-dynamo-runtime 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."
Expand Down
11 changes: 5 additions & 6 deletions docs/fern/components/CompatibilityHero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -312,15 +312,14 @@ export function CompatibilityHero() {
<div className="dynref-hero-req-values">
{PLATFORM.os.map((row) => (
<span
className={
row.status === "Experimental"
? "dynref-chip dynref-chip--amber dynref-chip--exp"
: `dynref-chip dynref-chip--${row.chip}`
}
className={`dynref-chip dynref-chip--${row.chip}`}
key={`${row.name} ${row.version}`}
title={`${row.scope} · ${row.arch}`}
>
{row.name} {row.version}
{row.status === "Experimental" ? " · experimental" : ""}
{row.scope === "Wheels only" && (
<span className="dynref-muted"> · wheels only</span>
)}
</span>
))}
</div>
Expand Down
154 changes: 108 additions & 46 deletions docs/fern/components/FeatureHeatmap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@
* treatment (translucent fill + 1px border, matching .dynref-badge--green /
* --amber in ReferenceStyles.tsx) so green stays an accent, never a solid
* wallpaper. Experimental keeps the dashed amber outline; not-supported stays
* dim neutral. Cells with a note carry a superscript footnote marker
* (numbered in row-major grid order) resolved in an ordered list below the
* grid; the title attribute is kept as a hover bonus.
* dim neutral. Cells with a note carry an information marker and reveal the
* note in a CSS-only tooltip on hover or keyboard focus.
*
* Server component (no "use client"); shares .dynref-* base classes from
* ReferenceStyles.tsx and carries only its own .dynref-heat-* layout rules.
Expand Down Expand Up @@ -104,6 +103,7 @@ const HEAT_CSS = `
}

.dynref-heat-cell {
position: relative;
box-sizing: border-box;
height: 26px;
border-radius: 6px;
Expand All @@ -112,7 +112,14 @@ const HEAT_CSS = `
justify-content: center;
}

.dynref-heat-cell--titled { cursor: help; }
.dynref-heat-cell--titled {
cursor: help;
}

.dynref-heat-cell--titled:focus-visible {
outline: 2px solid var(--dynref-blue-fg);
outline-offset: 2px;
}

.dynref-heat-cell--yes {
background: var(--dynref-green-bg);
Expand Down Expand Up @@ -148,21 +155,91 @@ const HEAT_CSS = `

.dynref-heat-dash { color: var(--pst-color-text-muted); }

.dynref-heat-fn {
margin-left: 2px;
font-size: 11px;
font-weight: 600;
.dynref-heat-note-mark {
display: inline-flex;
align-items: center;
justify-content: center;
width: 12px;
height: 12px;
margin-left: 3px;
border: 1px solid currentColor;
border-radius: 999px;
font-size: 8px;
font-weight: 700;
line-height: 1;
}

.dynref-heat-footnotes {
margin: 12px 0 0;
padding-left: 20px;
.dynref-heat-tooltip {
position: absolute;
z-index: 10;
bottom: calc(100% + 8px);
left: 50%;
width: min(280px, calc(100vw - 48px));
padding: 8px 10px;
border: 1px solid var(--border, var(--grayscale-a5));
border-radius: 7px;
background: var(--pst-color-surface);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.16);
color: var(--pst-color-text-base);
font-size: 12px;
color: var(--pst-color-text-muted);
font-weight: 400;
line-height: 1.4;
text-align: left;
transform: translate(-50%, 3px);
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity 120ms ease, transform 120ms ease, visibility 120ms ease;
}

.dark .dynref-heat-tooltip {
background: #202020;
border-color: #3a3a3a;
}

.dynref-heat-tooltip::after {
position: absolute;
top: 100%;
left: 0;
width: 100%;
height: 8px;
content: "";
}

.dynref-heat-cell[data-backend="SGLang"] .dynref-heat-tooltip {
left: 0;
transform: translate(0, 3px);
}

.dynref-heat-cell[data-backend="vLLM"] .dynref-heat-tooltip {
right: 0;
left: auto;
Comment thread
dagil-nvidia marked this conversation as resolved.
Resolved
transform: translate(0, 3px);
}

.dynref-heat-footnotes li { margin: 2px 0; }
.dynref-heat-cell--titled:hover,
.dynref-heat-cell--titled:focus-visible {
z-index: 9;
}

.dynref-heat-cell--titled:hover .dynref-heat-tooltip,
.dynref-heat-cell--titled:focus-visible .dynref-heat-tooltip {
opacity: 1;
visibility: visible;
transform: translate(-50%, 0);
pointer-events: auto;
}

.dynref-heat-cell--titled[data-backend="SGLang"]:hover .dynref-heat-tooltip,
.dynref-heat-cell--titled[data-backend="SGLang"]:focus-visible .dynref-heat-tooltip,
.dynref-heat-cell--titled[data-backend="vLLM"]:hover .dynref-heat-tooltip,
.dynref-heat-cell--titled[data-backend="vLLM"]:focus-visible .dynref-heat-tooltip {
transform: translate(0, 0);
}

@media (prefers-reduced-motion: reduce) {
.dynref-heat-tooltip { transition: none; }
}
`;

const BACKENDS = [
Expand All @@ -180,26 +257,6 @@ const STATUS_LABEL: Record<FeatureCell["status"], string> = {
no: "Not supported",
};

interface Footnote {
feature: string;
backend: string;
note: string;
}

/** Every noted cell, numbered in row-major grid order (derived, never hardcoded). */
const FOOTNOTES: Footnote[] = FEATURES.flatMap((feature) =>
BACKENDS.flatMap((backend) => {
const note = feature[backend.key].note;
return note ? [{ feature: feature.name, backend: backend.label, note }] : [];
}),
);

/** 1-based footnote number for a noted cell; undefined when the cell has no note. */
function footnoteIndex(feature: string, backend: string): number | undefined {
const i = FOOTNOTES.findIndex((fn) => fn.feature === feature && fn.backend === backend);
return i === -1 ? undefined : i + 1;
}

function coverageScore(key: BackendKey): string {
const supported = FEATURES.filter((feature) => {
const status = feature[key].status;
Expand Down Expand Up @@ -281,11 +338,25 @@ function StatusCell({ cell, feature, backend }: { cell: FeatureCell; feature: st
.filter(Boolean)
.join(" ");
const label = `${feature} on ${backend}: ${STATUS_LABEL[cell.status]}${cell.note ? ` — ${cell.note}` : ""}`;
const index = cell.note ? footnoteIndex(feature, backend) : undefined;
return (
<div className={classes} title={cell.note} role="img" aria-label={label}>
<div
className={classes}
data-backend={backend}
role="img"
aria-label={label}
tabIndex={cell.note ? 0 : undefined}
>
<StatusCellContent status={cell.status} />
{index !== undefined && <sup className="dynref-heat-fn">{index}</sup>}
{cell.note && (
<>
<span className="dynref-heat-note-mark" aria-hidden="true">
i
</span>
<span className="dynref-heat-tooltip" aria-hidden="true">
{cell.note}
</span>
</>
)}
</div>
);
}
Expand Down Expand Up @@ -337,16 +408,7 @@ export function FeatureHeatmap() {
</Fragment>
))}
</div>
{FOOTNOTES.length > 0 && (
<ol className="dynref-heat-footnotes">
{FOOTNOTES.map((fn) => (
<li key={`${fn.feature}-${fn.backend}`}>
{fn.feature} &middot; {fn.backend}: {fn.note}
</li>
))}
</ol>
)}
<p className="dynref-grid-note">Superscripts reference the numbered notes above; full per-backend detail follows.</p>
<p className="dynref-grid-note">Hover a noted cell or focus it with the keyboard to view its compatibility note.</p>
</div>
);
}
53 changes: 53 additions & 0 deletions docs/fern/components/InteractionStatus.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* InteractionStatus — one status mark in the pairwise Feature Interactions
* tables on the Compatibility reference page. Carries the accessible label
* for the status so the tables read as text, not as bare glyphs, and adds an
* information marker when the cell has a note for a wrapping <Tooltip>.
*
* Server component (no "use client"); the .dynref-interaction-* rules that
* tint the enclosing cell live in ReferenceStyles.tsx.
*/

type InteractionStatusKind = "yes" | "wip" | "no" | "na";

interface InteractionStatusProps {
status: InteractionStatusKind;
noteLabel?: string;
}

const STATUS_LABEL: Record<InteractionStatusKind, string> = {
yes: "Supported",
wip: "Work in progress",
no: "Not supported",
na: "Not applicable",
};

const STATUS_MARK: Record<InteractionStatusKind, string> = {
yes: "✓",
wip: "WIP",
no: "×",
na: "—",
};

export function InteractionStatus({ status, noteLabel }: InteractionStatusProps) {
const label = noteLabel ? `${STATUS_LABEL[status]} — ${noteLabel}` : STATUS_LABEL[status];

return (
<span
className={`dynref-interaction dynref-interaction--${status}`}
role="img"
aria-label={label}
tabIndex={noteLabel ? 0 : undefined}
>
Comment thread
dagil-nvidia marked this conversation as resolved.
Resolved
<span aria-hidden="true">{STATUS_MARK[status]}</span>
{noteLabel && (
<span className="dynref-interaction-note-mark" aria-hidden="true">
i
</span>
)}
</span>
);
}
Loading
Loading