Skip to content

fix: align FlashInfer wheel metadata with vLLM - #633

Merged
binaryaaron merged 2 commits into
mainfrom
binaryaaron/fix-wheel-flashinfer-metadata
Jul 10, 2026
Merged

fix: align FlashInfer wheel metadata with vLLM#633
binaryaaron merged 2 commits into
mainfrom
binaryaaron/fix-wheel-flashinfer-metadata

Conversation

@binaryaaron

@binaryaaron binaryaaron commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • align the CPU and CUDA FlashInfer requirements with vLLM 0.24.0 at 0.6.12
  • remove repository-only overrides and source mappings that masked the published-wheel conflict
  • regenerate uv.lock with the matching Python, cubin, and CUDA JIT-cache artifacts
  • add a release checklist covering exact-SHA promotion, clean public-index installation, RC container aliases, stable verification, and manual downstream follow-ups
  • correct the Linux CPU uv install command and the internal Artifactory publication note

Why

The 0.1.6 wheel requires FlashInfer 0.6.13 while vLLM 0.24.0 requires 0.6.12. Source uv sync accepted the combination only because [tool.uv].override-dependencies masked vLLM's wheel metadata. Ordinary uv and pip users therefore cannot resolve [cpu,engine] or [cu129,engine] from the published wheel.

Validation

Follow-up

Run the GPU smoke/E2E workflow before using this change for the next release candidate.

Summary by CodeRabbit

  • Documentation

    • Expanded the release workflow in the contributing guide with step-by-step candidate/stable tagging, verification, and post-release validations.
    • Clarified that internal Artifactory publishing is a manual action and does not run as part of the tag-triggered release workflow.
    • Updated Linux CPU uv install instructions to use --index-strategy unsafe-best-match.
  • Dependency Updates

    • Updated FlashInfer pins to 0.6.12 for CPU and CUDA (including the CUDA JIT cache variant).
    • Adjusted uv configuration by removing overrides/source mappings related to FlashInfer version forcing.

Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Changes

Release process documentation

Layer / File(s) Summary
Tag release checklist
CONTRIBUTING.md
Documents candidate and stable tag workflows, validation checks, post-release verification, and manual Artifactory publishing requirements.

Dependency and installation configuration

Layer / File(s) Summary
CPU uv installation command
docs/user-guide/getting-started.md
Adds --index-strategy unsafe-best-match to the Linux CPU installation command.
FlashInfer dependency resolution
pyproject.toml
Pins Linux FlashInfer packages to 0.6.12 and removes obsolete uv overrides and source mappings.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested labels: bug

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: aligning FlashInfer wheel metadata with vLLM.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch binaryaaron/fix-wheel-flashinfer-metadata

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

@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@binaryaaron
binaryaaron force-pushed the binaryaaron/fix-wheel-flashinfer-metadata branch from 0485f51 to 3cc4ddf Compare July 10, 2026 03:47
@binaryaaron
binaryaaron marked this pull request as ready for review July 10, 2026 03:57
@binaryaaron
binaryaaron requested a review from a team as a code owner July 10, 2026 03:57
@binaryaaron
binaryaaron requested a review from mckornfield July 10, 2026 03:58
@coderabbitai coderabbitai Bot added bug Defects in shipped behavior docs Documentation-only change labels Jul 10, 2026
mckornfield
mckornfield previously approved these changes Jul 10, 2026
@greptile-apps

greptile-apps Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR resolves a dependency conflict between the published wheel metadata and vLLM 0.24.0 by downgrading the pinned FlashInfer packages (flashinfer-python, flashinfer-cubin, flashinfer-jit-cache) from 0.6.13 to 0.6.12, removing the override-dependencies block that hid the conflict from uv sync, and removing the incorrect [tool.uv.sources] entries that routed flashinfer-python and flashinfer-cubin through the CUDA-specific flashinfer index instead of PyPI.

  • pyproject.toml / uv.lock: FlashInfer downgraded to 0.6.12 in both cpu and cu129 extras; override-dependencies and erroneous source mappings removed; lock file regenerated with correct PyPI hashes and flashinfer-jit-cache CUDA wheels.
  • CONTRIBUTING.md: Replaces the brief releasing section with a detailed checklist (tag trigger, smoke-test validation, stable promotion, post-publish verification) and clarifies that Artifactory publication is a manual step not triggered by the tag workflow.
  • docs/user-guide/getting-started.md: Adds --index-strategy unsafe-best-match to the Linux CPU install command so uv can resolve PyPI-hosted FlashInfer packages alongside the PyTorch CPU wheel index.

Confidence Score: 5/5

Safe to merge — the change is a targeted version pin correction and cleanup of masking overrides with no logic changes.

All four changed files are dependency metadata or documentation. The version downgrade from 0.6.13 to 0.6.12 is the correct alignment with vLLM 0.24.0's published wheel metadata, the lockfile hashes are updated consistently, and the override removal exposes rather than introduces risk. The PR description documents passing uv lock --check and 1,634 tests.

CONTRIBUTING.md — the hardcoded vLLM commit SHA in the smoke-test index URL will need updating whenever vLLM is bumped; no other files require special attention.

Important Files Changed

Filename Overview
pyproject.toml Downgrades FlashInfer from 0.6.13 to 0.6.12 in both cpu and cu129 extras, removes the override-dependencies block that masked vLLM's conflicting requirement, and removes the incorrect source mappings that routed flashinfer-python and flashinfer-cubin through the flashinfer-jit-cache index instead of PyPI.
uv.lock Regenerated lock file updating all FlashInfer artifacts (flashinfer-python, flashinfer-cubin, flashinfer-jit-cache) from 0.6.13 to 0.6.12, removing the override block, and dropping the now-unnecessary index/conflict annotations from flashinfer-cubin and flashinfer-python in the cu129 extra.
CONTRIBUTING.md Replaces the brief releasing section with a detailed release checklist covering tag triggers, smoke-test validation, promotion to stable, and post-publish steps; corrects the Artifactory note to clarify it is a manual action. Contains a hardcoded vLLM commit SHA in the smoke-test index URL that will need updating with each vLLM upgrade.
docs/user-guide/getting-started.md Adds --index-strategy unsafe-best-match to the Linux CPU uv pip install command, which is required so uv can satisfy PyPI-hosted FlashInfer packages alongside pytorch's CPU wheel index.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["uv pip install nemo-safe-synthesizer[cu129,engine]"] --> B{Index Strategy\nunsafe-best-match}
    B --> C[PyPI\npypi.org/simple]
    B --> D[flashinfer.ai/whl/cu129]
    B --> E[download.pytorch.org/whl/cu129]
    B --> F[wheels.vllm.ai/.../cu129]

    C --> G["flashinfer-python==0.6.12\n(PyPI)"]
    C --> H["flashinfer-cubin==0.6.12\n(PyPI)"]
    D --> I["flashinfer-jit-cache==0.6.12+cu129\n(flashinfer index)"]
    F --> J["vllm==0.24.0+cu129\n(requires flashinfer 0.6.12 ✅)"]
    E --> K["torch==2.11.0+cu129"]

    G & H & I & J & K --> L["Resolved environment\n252 packages — no conflict"]

    subgraph BEFORE
        M["flashinfer-python==0.6.13\n(override masked conflict)"]
        N["vllm==0.24.0 requires ==0.6.12"]
        M -. "conflict hidden by override-dependencies" .-> N
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["uv pip install nemo-safe-synthesizer[cu129,engine]"] --> B{Index Strategy\nunsafe-best-match}
    B --> C[PyPI\npypi.org/simple]
    B --> D[flashinfer.ai/whl/cu129]
    B --> E[download.pytorch.org/whl/cu129]
    B --> F[wheels.vllm.ai/.../cu129]

    C --> G["flashinfer-python==0.6.12\n(PyPI)"]
    C --> H["flashinfer-cubin==0.6.12\n(PyPI)"]
    D --> I["flashinfer-jit-cache==0.6.12+cu129\n(flashinfer index)"]
    F --> J["vllm==0.24.0+cu129\n(requires flashinfer 0.6.12 ✅)"]
    E --> K["torch==2.11.0+cu129"]

    G & H & I & J & K --> L["Resolved environment\n252 packages — no conflict"]

    subgraph BEFORE
        M["flashinfer-python==0.6.13\n(override masked conflict)"]
        N["vllm==0.24.0 requires ==0.6.12"]
        M -. "conflict hidden by override-dependencies" .-> N
    end
Loading

Reviews (2): Last reviewed commit: "docs: add release verification checklist" | Re-trigger Greptile

@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: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5b577214-c987-480d-abba-a37bb958bb98

📥 Commits

Reviewing files that changed from the base of the PR and between 1eb318c and 3cc4ddf.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock, !uv.lock
📒 Files selected for processing (3)
  • CONTRIBUTING.md
  • docs/user-guide/getting-started.md
  • pyproject.toml
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: Greptile Review
  • GitHub Check: CodeRabbit / Review
  • GitHub Check: GPU Smoke Tests (3.13)
🧰 Additional context used
📓 Path-based instructions (9)
**/*.{md,markdown,py}

📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)

**/*.{md,markdown,py}: Avoid decorative bold (**text**) in list items, body text, and docstrings; use structural cues (headers, list markers, colons, backticks) for emphasis instead
Use backticks for code identifiers, paths, and CLI commands in markdown and docstrings

Files:

  • docs/user-guide/getting-started.md
  • CONTRIBUTING.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)

**/*.{md,markdown}: Bold is acceptable only in markdown tables where it's the conventional way to mark header-like cells in the body
Use ## headers to segment markdown sections instead of bold text
Use -- (em-dash) instead of - (hyphen) for asides in markdown

Files:

  • docs/user-guide/getting-started.md
  • CONTRIBUTING.md
docs/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/writing-docs.mdc)

docs/**/*.md: Use MkDocs Material admonition syntax (!!! note, !!! warning, ??? tip) for highlighting important information and collapsible sections in documentation
Use MkDocs Material tabs syntax (=== "Label") to present alternative views or language-specific examples in documentation
Use code block syntax with title and highlight line parameters (title="filename", hl_lines="2 3") for code examples in documentation
Use Mermaid diagram syntax (```mermaid flowchart, etc.) for visualizations in documentation

Classify documentation pages as tutorial, how-to, explanation, or reference, and use MkDocs Material syntax such as admonitions, tabs, and titled/highlighted code blocks.

docs/**/*.md: Documentation pages must be placed under the appropriate docs/ subdirectory according to the Diataxis structure.
When adding or editing a documentation page, add it to the nav: section of mkdocs.yml.

Files:

  • docs/user-guide/getting-started.md
**/*.md

📄 CodeRabbit inference engine (STYLE_GUIDE.md)

**/*.md: Use single backticks for code identifiers, paths, and CLI commands in Markdown, and use -- for asides rather than a hyphen.
Do not use decorative bold in Markdown body text or list items; bold is acceptable only in table-header-like cells and MkDocs Material card-grid titles.
For Mermaid diagrams, avoid spaces in node IDs, quote labels containing special characters, and do not use explicit colors or styles.

Use the repository's Markdown style and documentation conventions, including supported MkDocs Material features where appropriate.

Files:

  • docs/user-guide/getting-started.md
  • CONTRIBUTING.md
**/*

📄 CodeRabbit inference engine (STYLE_GUIDE.md)

**/*: Every source file must include the required SPDX copyright and license header; use HTML comments for Markdown, hash comments for .py, .sh, .yaml, and .yml, and hash-comment headers inside YAML frontmatter for Markdown files with frontmatter.
Ensure files end with a newline and have no trailing whitespace; use a single space between sentences.

Files:

  • docs/user-guide/getting-started.md
  • pyproject.toml
  • CONTRIBUTING.md

⚙️ CodeRabbit configuration file

**/*: Review as a senior maintainer for NeMo Safe Synthesizer. Prioritize issues that can change behavior, break user workflows, weaken privacy guarantees, hide failures, make tests unreliable, or create maintenance risk. Avoid generic style commentary unless it points to a concrete project convention that automated tools will not catch.
Comment only when the finding is actionable and tied to changed code. For each finding, state the impact, the condition that triggers it, and the smallest practical fix. Prefer one precise comment over broad advice. Do not ask for refactors outside the PR scope unless the changed code creates the problem.
Review type guidance: - Potential issue: use for correctness bugs, data loss, privacy leaks,
security risks, broken public APIs, invalid config behavior, missing
validation, hidden failures, nondeterministic tests, or CI breakage.

  • Refactor suggestion: use for local maintainability problems introduced
    by the diff when they have clear future cost, such as duplicated setup,
    unclear boundaries, over-mocking, avoidable complexity, or opaque test
    helpers.
  • Nitpick: avoid in chill mode. Do not emit formatting, import-order,
    wording, or style-only comments unless automated tools cannot catch the
    issue and it affects maintainability.

Severity guidance: - Critical: security/privacy leaks, data loss, training/test/holdout
contamination, or broken release/package/core pipeline execution.

  • Major: incorrect generation/training/evaluation behavior, broken
    CLI/SDK public API, invalid config defaults or validators, or GPU/vLLM
    cleanup and process-isolation bugs likely to fail CI or production
    runs.
  • Minor: localized bugs, missing focused tests for changed behavior, or
    bad test patterns that weaken regression coverage.
  • Trivial: small cleanup with no behavior impact. Usually suppress in
    chill mode.
  • Info: context only. Avoid unless it helps reviewers understand risk.
    Safe-Synthesizer-specific review focus: - Data ...

Files:

  • docs/user-guide/getting-started.md
  • pyproject.toml
  • CONTRIBUTING.md
**/*.{py,sh,yaml,yml,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{py,sh,yaml,yml,md}: All source files with .py, .sh, .yaml, .yml, or .md extensions must include SPDX copyright headers.
Run the repository's pinned formatting and linting tasks through mise run format and mise run check rather than invoking Ruff or ty directly.

Files:

  • docs/user-guide/getting-started.md
  • CONTRIBUTING.md
**

⚙️ CodeRabbit configuration file

**:

AGENTS.md

Guide for AI agents (Cursor, Windsurf, Claude Code, etc.) working in the Safe-Synthesizer repo.

This project loads local developer preferences from @AGENTS.local.md. You MUST read this file if it exists and give its instructions top priority.

Skills

Repo-specific skills live in .agents/skills/; see .agents/README.md for the catalog. Read a skill when the task matches its scope instead of copying workflow details into this file.

Durable implementation guidance belongs with the code it describes: function and class docstrings for public contracts and source comments for local invariants. Test-suite guidance belongs in tests/TESTING.md.

Repo Conventions

See STYLE_GUIDE.md for detailed code style conventions (Python, markdown, Dockerfiles, shell scripts, testing, config files, docstrings).

Use uv for everything -- never pip or raw python. Python 3.11–3.13 with modern syntax (X | Y, list[str], Self). Python 3.14+ is not supported.

Common commands: mise run test (unit tests), mise run format (auto-fix formatting + lint + copyright), mise run check (read-only local quality checks), mise run validate (pre-PR quality, lock, and CI unit checks), mise run typecheck (ty only). Always use mise tasks or the wrapper scripts in tools/ instead of running ruff or ty directly. Use uv run for Python execution. When in doubt, inspect mise tasks and pytest --markers.

The canonical uv sync command for a full GPU/dev environment is:

uv sync --frozen --extra cu129 --extra engine --group dev

Bare uv sync --frozen (without extras) installs an incomplete environment -- ty, import checks, and GPU tests will fail.

Feature branches off main. Branch names often include an issue number prefix (e.g., <author>/123-short-name).

Do ...

Files:

  • docs/user-guide/getting-started.md
  • pyproject.toml
  • CONTRIBUTING.md
docs/**

⚙️ CodeRabbit configuration file

Review documentation as MkDocs Material content. Check Diataxis fit, accurate commands, internal links, code fences, and markdown style from STYLE_GUIDE.md.

Files:

  • docs/user-guide/getting-started.md
pyproject.toml

📄 CodeRabbit inference engine (.cursor/rules/repo-navigation.mdc)

Configure package metadata, dependencies, extras (cpu/cu129/engine), and uv configuration in pyproject.toml

In pyproject.toml, order sections as [project], [dependency-groups], [project.optional-dependencies], [tool.uv], [build-system], then [tool.*]; use spaces around = and # comment style comments.

Files:

  • pyproject.toml

⚙️ CodeRabbit configuration file

Treat pyproject.toml as high-risk. Check package metadata, uv indexes, dependency groups, optional extras, Python version bounds, hatch config, ty config, script entry points, dependency consistency, and whether changes require regenerating uv.lock.

Files:

  • pyproject.toml
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer

Timestamp: 2026-07-10T03:58:13.043Z
Learning: All contributions must include DCO sign-off and a cryptographic commit signature; both requirements are independent.
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer

Timestamp: 2026-07-10T03:58:13.043Z
Learning: Commits merged to `main` must follow Conventional Commits syntax with a valid lowercase type, optional scope, description of at most 100 characters, and optional breaking-change marker.
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer

Timestamp: 2026-07-10T03:58:13.043Z
Learning: Branches other than `main` must use the lowercase `<author>/<description>`, `<author>/<issue-id>-<description>`, or optional-type variants defined by the branch naming convention.
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer

Timestamp: 2026-07-10T03:58:13.043Z
Learning: Before submitting a pull request, run formatting, checks, and tests; all existing tests must pass, new features must include tests, and bug fixes must include regression tests.
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer

Timestamp: 2026-07-10T03:58:13.043Z
Learning: Use `mise` tasks with the pinned tool versions for repository setup, formatting, linting, type checking, testing, and validation.
🪛 LanguageTool
CONTRIBUTING.md

[uncategorized] ~686-~686: The official name of this software platform is spelled with a capital “H”.
Context: ...ushing a v* tag starts two workflows. release.yml publishes the wh...

(GITHUB)


[uncategorized] ~688-~688: The official name of this software platform is spelled with a capital “H”.
Context: ...oned documentation for stable releases. container-build.yml publishe...

(GITHUB)


[style] ~788-~788: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...elease is not marked as a prerelease. - Confirm versioned documentation is available at...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (2)
CONTRIBUTING.md (1)

686-695: LGTM!

pyproject.toml (1)

116-117: LGTM!

Also applies to: 140-142, 181-181, 240-240

Comment thread CONTRIBUTING.md
Comment thread docs/user-guide/getting-started.md
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
@binaryaaron
binaryaaron force-pushed the binaryaaron/fix-wheel-flashinfer-metadata branch from 3cc4ddf to c20669d Compare July 10, 2026 04:22
@coderabbitai coderabbitai Bot removed the docs Documentation-only change label Jul 10, 2026
Comment thread CONTRIBUTING.md

@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


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0009daec-9bd5-475b-b9ac-24d181e513cb

📥 Commits

Reviewing files that changed from the base of the PR and between 3cc4ddf and c20669d.

📒 Files selected for processing (2)
  • CONTRIBUTING.md
  • docs/user-guide/getting-started.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/user-guide/getting-started.md
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Greptile Review
  • GitHub Check: CodeRabbit / Review
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{md,markdown,py}

📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)

**/*.{md,markdown,py}: Avoid decorative bold (**text**) in list items, body text, and docstrings; use structural cues (headers, list markers, colons, backticks) for emphasis instead
Use backticks for code identifiers, paths, and CLI commands in markdown and docstrings

Files:

  • CONTRIBUTING.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)

**/*.{md,markdown}: Bold is acceptable only in markdown tables where it's the conventional way to mark header-like cells in the body
Use ## headers to segment markdown sections instead of bold text
Use -- (em-dash) instead of - (hyphen) for asides in markdown

Files:

  • CONTRIBUTING.md
**/*.md

📄 CodeRabbit inference engine (STYLE_GUIDE.md)

**/*.md: Use single backticks for code identifiers, paths, and CLI commands in Markdown, and use -- for asides rather than a hyphen.
Do not use decorative bold in Markdown body text or list items; bold is acceptable only in table-header-like cells and MkDocs Material card-grid titles.
For Mermaid diagrams, avoid spaces in node IDs, quote labels containing special characters, and do not use explicit colors or styles.

Follow the repository’s Markdown style conventions documented in STYLE_GUIDE.md.

Files:

  • CONTRIBUTING.md
**/*

📄 CodeRabbit inference engine (STYLE_GUIDE.md)

**/*: Every source file must include the required SPDX copyright and license header; use HTML comments for Markdown, hash comments for .py, .sh, .yaml, and .yml, and hash-comment headers inside YAML frontmatter for Markdown files with frontmatter.
Ensure files end with a newline and have no trailing whitespace; use a single space between sentences.

Files:

  • CONTRIBUTING.md

⚙️ CodeRabbit configuration file

**/*: Review as a senior maintainer for NeMo Safe Synthesizer. Prioritize issues that can change behavior, break user workflows, weaken privacy guarantees, hide failures, make tests unreliable, or create maintenance risk. Avoid generic style commentary unless it points to a concrete project convention that automated tools will not catch.
Comment only when the finding is actionable and tied to changed code. For each finding, state the impact, the condition that triggers it, and the smallest practical fix. Prefer one precise comment over broad advice. Do not ask for refactors outside the PR scope unless the changed code creates the problem.
Review type guidance: - Potential issue: use for correctness bugs, data loss, privacy leaks,
security risks, broken public APIs, invalid config behavior, missing
validation, hidden failures, nondeterministic tests, or CI breakage.

  • Refactor suggestion: use for local maintainability problems introduced
    by the diff when they have clear future cost, such as duplicated setup,
    unclear boundaries, over-mocking, avoidable complexity, or opaque test
    helpers.
  • Nitpick: avoid in chill mode. Do not emit formatting, import-order,
    wording, or style-only comments unless automated tools cannot catch the
    issue and it affects maintainability.

Severity guidance: - Critical: security/privacy leaks, data loss, training/test/holdout
contamination, or broken release/package/core pipeline execution.

  • Major: incorrect generation/training/evaluation behavior, broken
    CLI/SDK public API, invalid config defaults or validators, or GPU/vLLM
    cleanup and process-isolation bugs likely to fail CI or production
    runs.
  • Minor: localized bugs, missing focused tests for changed behavior, or
    bad test patterns that weaken regression coverage.
  • Trivial: small cleanup with no behavior impact. Usually suppress in
    chill mode.
  • Info: context only. Avoid unless it helps reviewers understand risk.
    Safe-Synthesizer-specific review focus: - Data ...

Files:

  • CONTRIBUTING.md
**/*.{py,sh,yaml,yml,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Include SPDX copyright headers in all Python, shell, YAML, YML, and Markdown source files, except files listed in .copyrightignore.

Files:

  • CONTRIBUTING.md
**

⚙️ CodeRabbit configuration file

**:

AGENTS.md

Guide for AI agents (Cursor, Windsurf, Claude Code, etc.) working in the Safe-Synthesizer repo.

This project loads local developer preferences from @AGENTS.local.md. You MUST read this file if it exists and give its instructions top priority.

Skills

Repo-specific skills live in .agents/skills/; see .agents/README.md for the catalog. Read a skill when the task matches its scope instead of copying workflow details into this file.

Durable implementation guidance belongs with the code it describes: function and class docstrings for public contracts and source comments for local invariants. Test-suite guidance belongs in tests/TESTING.md.

Repo Conventions

See STYLE_GUIDE.md for detailed code style conventions (Python, markdown, Dockerfiles, shell scripts, testing, config files, docstrings).

Use uv for everything -- never pip or raw python. Python 3.11–3.13 with modern syntax (X | Y, list[str], Self). Python 3.14+ is not supported.

Common commands: mise run test (unit tests), mise run format (auto-fix formatting + lint + copyright), mise run check (read-only local quality checks), mise run validate (pre-PR quality, lock, and CI unit checks), mise run typecheck (ty only). Always use mise tasks or the wrapper scripts in tools/ instead of running ruff or ty directly. Use uv run for Python execution. When in doubt, inspect mise tasks and pytest --markers.

The canonical uv sync command for a full GPU/dev environment is:

uv sync --frozen --extra cu129 --extra engine --group dev

Bare uv sync --frozen (without extras) installs an incomplete environment -- ty, import checks, and GPU tests will fail.

Feature branches off main. Branch names often include an issue number prefix (e.g., <author>/123-short-name).

Do ...

Files:

  • CONTRIBUTING.md
🪛 LanguageTool
CONTRIBUTING.md

[uncategorized] ~686-~686: The official name of this software platform is spelled with a capital “H”.
Context: ...ushing a v* tag starts two workflows. release.yml publishes the wh...

(GITHUB)


[uncategorized] ~688-~688: The official name of this software platform is spelled with a capital “H”.
Context: ...oned documentation for stable releases. container-build.yml publishe...

(GITHUB)


[style] ~788-~788: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...elease is not marked as a prerelease. - Confirm versioned documentation is available at...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (1)
CONTRIBUTING.md (1)

686-750: LGTM!

Also applies to: 767-770, 781-812

Comment thread CONTRIBUTING.md
@binaryaaron
binaryaaron requested a review from mckornfield July 10, 2026 05:35
@binaryaaron

binaryaaron commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator Author

GPU run 29067928772 passed

@seayang-nv seayang-nv 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.

Looks good! Thanks!

@binaryaaron
binaryaaron added this pull request to the merge queue Jul 10, 2026
Merged via the queue into main with commit 12b6990 Jul 10, 2026
24 of 26 checks passed
@binaryaaron
binaryaaron deleted the binaryaaron/fix-wheel-flashinfer-metadata branch July 10, 2026 16:10
fork-the-planet-automation Bot pushed a commit to fork-the-planet/NVIDIA-NeMo___Safe-Synthesizer that referenced this pull request Jul 18, 2026
## Summary

- add a standard-library `release:prepare` task that previews the next
release's initial `rc0` tag without mutating Git
- add a reusable no-config built-wheel verifier with a real CPU install
and CUDA dependency resolution
- run the verifier in PR CI for package/release-tooling changes and in
the tag workflow before either PyPI upload
- keep uv cache reuse while removing project, resolver, source, and
index configuration from verification subprocesses

## Stack

This PR is stacked on NVIDIA-NeMo#633. Its own diff contains only the semver
helper, release-tool documentation, wheel verification tooling/tests,
and workflow integration. Retarget it to `main` after NVIDIA-NeMo#633 merges; the
PR workflow only runs automatically for pull requests whose base is
`main`.

## Validation

- `mise run validate`: 1,648 tests and 3 subtests passed
- 15 focused release-tool tests passed after the final council fixes
- `mise run release:prepare -- --ref origin/main --json` produced
`v0.1.7rc0` without creating a tag or syncing the project
- clean CPU wheel install resolved and installed 239 packages;
dependency check, import, and CLI help passed
- clean CUDA wheel resolution selected 252 packages with the intended
public indexes and versions
- `mise run format-check`, type checking, lock checking, and `git diff
--check` passed
- independent three-seat council review found no critical blocker


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added an end-user clean-container wheel verification step to CI and
release workflows.
* Introduced release planning for PEP 440 versions, including release
candidates and post-releases.
* Added a release preparation helper for generating the next release
candidate/tag plan.
* **Documentation**
* Updated production release and contributor release-process guidance,
including post-release procedures.
* Expanded container test image documentation with wheel verification
steps.
* **Bug Fixes**
* Improved CI change detection so dependency/CI-related changes trigger
the right checks.
* **Chores**
* Adjusted Docker artifact inclusion rules and updated Docker image
tagging to use PEP 440.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:build-dist area:dev-ex Affects build or dev experience area:docs bug Defects in shipped behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants