docs: Create separate pypi.md files for each Python package - #155
docs: Create separate pypi.md files for each Python package#155dagardner-nv wants to merge 16 commits into
pypi.md files for each Python package#155Conversation
#### Overview Slim the Python adapter dependency boundary for the `release/0.1` line without changing adapter behavior. - `nemo-fabric` remains a metadata-only package that unconditionally installs the exact matching `nemo-fabric-runtime`. - Root harness extras delegate to the matching adapter package's `harness` extra. - Bare adapter distributions contain only adapter-owned runtime dependencies. - Every adapter provides `harness` and `full`; only Deep Agents and Hermes provide the Python `relay` extra. Claude and Codex continue to use the separately installed `nemo-relay` CLI. - Wrapped harness packages required by repository tests remain in the non-published `adapter-tests` dependency group. #### Details The supported install modes are now explicit: - `nemo-fabric[<harness>]`: Runtime, adapter, and supported harness dependencies in one environment. - `nemo-fabric` plus a bare adapter package: Runtime and adapter with an existing host-managed harness. - `nemo-fabric-adapters-<adapter>[harness]`: Adapter and supported harness without Runtime, for a separate adapter interpreter. - Bare `nemo-fabric-adapters-<adapter>`: Adapter-owned dependencies only. - Adapter `full`: All package-installable dependencies; for Claude and Codex this equals `harness` because Relay is an external CLI. The README, package description, install guide, adapter guides, Harbor examples, CI, consumer skill, and maintainer packaging skills now describe the same matrix. Metadata tests guard the root-to-adapter delegation and the exact adapter dependency boundaries. #### Validation - Focused metadata, README, and Harbor checks: `55 passed` - Full Python suite: `529 passed, 15 skipped` - Latest upstream Hermes streaming coverage plus metadata checks: `21 passed` - Root and all adapter lockfiles: `uv lock --check` - `just build-python` - `cargo check -p fabric-python --locked` - `just docs` (all checks passed; unauthenticated redirect check skipped with the expected warning) - `just wheels`, followed by root and adapter wheel `METADATA` inspection - License diff against `upstream/release/0.1`: no Rust or Python additions, removals, or changes - Full `pre-commit run --all-files` - `just --fmt --check` - `git diff --check` #### Where should the reviewer start? Start with `pyproject.toml`, the four adapter `pyproject.toml` files, and `tests/adapters/test_adapter_package_metadata.py`. Then review `docs/getting-started/install.mdx`, `.github/workflows/ci_python.yml`, and `.agents/skills/contribute-adapter/SKILL.md`. The branch is rebased onto the latest `release/0.1`. It includes and preserves the adapter configuration changes from NVIDIA#117. #### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) - Closes [FABRIC-125](https://linear.app/nvidia/issue/FABRIC-125/slim-adapter-runtime-dependencies) - Relates to NVIDIA#117 - [x] I confirm this contribution is my own work, or I have the right to submit it under this project's license. - [x] I searched existing issues and open pull requests, and this does not duplicate existing work. ## Summary by CodeRabbit * **Documentation** * Clarified installation options for runtime, adapters, harnesses, and Relay integrations. * Added supported Python version guidance and separate-environment setup instructions. * Updated Hermes, Claude, Codex, and Deep Agents quick starts and deployment scenarios. * Improved Harbor setup and command examples, including version-alignment guidance. * **Bug Fixes** * Improved Hermes configuration writing when YAML support is unavailable. * Clarified Relay CLI requirements and adapter-specific integration behavior. * **Tests** * Added validation for package dependency boundaries, installation metadata, and adapter configuration behavior. Authors: - Zhongxuan (Daniel) Wang (https://github.com/zhongxuanwang-nv) Approvers: - Anuradha Karuppiah (https://github.com/AnuradhaKaruppiah) - David Gardner (https://github.com/dagardner-nv) URL: NVIDIA#105
…ase/0.1 Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
WalkthroughThe change reorganizes package-facing documentation, moves Claude and Codex testing guidance into their READMEs, adds per-package PyPI pages, updates package metadata and repository URLs, and replaces the root PyPI badges with a hero image. ChangesPackaging documentation and metadata
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
pypi.md files for each Python package
|
Fern docs preview: https://nvidia-preview-pull-request-155.docs.buildwithfern.com/nemo/fabric |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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 `@adapters/codex/README.md`:
- Around line 156-162: Update the README command examples to use quoted
angle-bracketed placeholders for both executable paths: replace the Nemo Relay
and Codex path values with placeholders such as “<path-to-nemo-relay>” and
“<path-to-codex>”, keeping them inside the existing shell assignments and code
formatting.
In `@python/pypi.md`:
- Around line 23-25: Replace the “Is equivalent to:” lead-in in the Python
package installation documentation with a complete sentence that clearly
introduces the direct runtime installation command, such as instructing the
reader to run it.
- Line 35: Update the NVIDIA NeMo Fabric repository link in the PyPI
documentation to use the canonical URL casing
`https://github.com/NVIDIA/NeMo-Fabric`, matching the package metadata and
official repository naming.
🪄 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: ASSERTIVE
Plan: Enterprise
Run ID: 2a3e99fc-a1a8-4bd3-aa07-86ce898ed162
📒 Files selected for processing (18)
adapters/claude/README.mdadapters/claude/pypi.mdadapters/claude/pyproject.tomladapters/claude/testing.mdadapters/codex/README.mdadapters/codex/pypi.mdadapters/codex/pyproject.tomladapters/codex/testing.mdadapters/common/pypi.mdadapters/common/pyproject.tomladapters/deepagents/pypi.mdadapters/deepagents/pyproject.tomladapters/hermes/pypi.mdadapters/hermes/pyproject.tomlpypi.mdpyproject.tomlpython/pypi.mdpython/pyproject.toml
💤 Files with no reviewable changes (2)
- adapters/codex/testing.md
- adapters/claude/testing.md
📜 Review details
⏰ Context from checks skipped due to timeout. (18)
- GitHub Check: Preview docs
- GitHub Check: Test (Python 3.12, linux-amd64)
- GitHub Check: Test (Python 3.11, linux-amd64)
- GitHub Check: Test (Python 3.14, macos-arm64)
- GitHub Check: Test (Python 3.14, linux-amd64)
- GitHub Check: Test (Python 3.12, macos-arm64)
- GitHub Check: Test (Python 3.13, macos-arm64)
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Test (Python 3.14, linux-arm64)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.11, macos-arm64)
- GitHub Check: Test (Python 3.13, linux-amd64)
- GitHub Check: Test (Python 3.13, linux-arm64)
- GitHub Check: Test (Python 3.12, linux-arm64)
- GitHub Check: Test (Python 3.11, linux-arm64)
- GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (25)
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
python/pyproject.tomlpypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.tomladapters/common/pypi.md
{Cargo.toml,python/pyproject.toml,pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep Rust workspace/package metadata and Python/maturin package metadata internally consistent, including package names, versions, import paths, and module names.
Files:
python/pyproject.tomlpyproject.toml
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}: Keep workspace, Python, and lockfile dependency versions aligned where required, and review both direct and transitive dependency changes from resolved lockfiles.
Inspect resolved transitive licenses, explicitly surface UNKNOWN, non-SPDX/custom, proprietary, source-available, copyleft, or network-copyleft terms, and route unresolved licensing questions to dependency approvers with distribution and linkage context.
Document the functional need, alternatives considered, rationale for the selected dependency, and any unresolved licensing question when introducing dependencies.
Files:
python/pyproject.tomlpyproject.toml
{Cargo.toml,pyproject.toml,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Before adding a dependency, prefer the standard library, an existing dependency, or a small local implementation when appropriate; otherwise select a maintained, narrow-fit dependency with clear SPDX metadata and a permissive license where possible.
Files:
python/pyproject.tomlpyproject.toml
{pyproject.toml,python/pyproject.toml,Cargo.toml,docs/package.json,.github/workflows/*.yml,justfile}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Reflect public packaging changes in release-facing documentation and ensure CI references the same package names and commands used by local workflows.
Files:
python/pyproject.tomlpyproject.toml
**/*.{rs,toml}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For any Rust change, run
just test-rustandcargo fmt --all -- --check.For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, and add Python tests when behavior is exposed through the SDK.
Files:
python/pyproject.tomlpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
**/{Cargo.toml,Cargo.lock,pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.
Files:
python/pyproject.tomlpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
**/*.{toml,lock}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If a manifest or lockfile changes, run the license-diff script against
origin/main, review transitive license changes, and run theattributions-rustandattributions-pythonpre-commit hooks.
Files:
python/pyproject.tomlpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
**/*.{yml,yaml,toml,lock}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For CI or packaging changes, use
maintain-ciormaintain-packaging, then run recipes and checks whose behavior changed.
Files:
python/pyproject.tomlpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
python/pyproject.toml
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Keep
project.dynamic = ["version"]; do not add a literalproject.version, because Maturin derives the runtime version from Cargo metadata.
Files:
python/pyproject.toml
**/*.{rs,py,toml}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
When editing version helpers, verify every
nemo-fabric-*workspace package through Cargo metadata and reject a static version inpython/pyproject.toml.
Files:
python/pyproject.tomlpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
**/*.{toml,rs,py}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Avoid blind repository-wide replacement of version-like strings; distinguish package-version references from examples and unrelated dependency versions.
Files:
python/pyproject.tomlpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
**/*.{rs,py,html,md,mdx,toml,yml,yaml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
All Rust, Python, HTML, Markdown, MDX, TOML, YAML, and shell source files must include the project SPDX copyright and Apache-2.0 license headers using the comment syntax appropriate to each file type.
Files:
python/pyproject.tomlpypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdpyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.tomladapters/common/pypi.md
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such ashereorread more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.
**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
**/*.{md,rst,txt,adoc}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-language-mechanics.md)
**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 12:30 to 1:00 p.m.for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon its first usage, typically in the title or H1; useNeMo Fabricthereafter.
Usefabricby itself only when referring to the CLI tool, and surround those references with backticks.
CapitalizeNVIDIAcorrectly in public documentation.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case consistently for headings in technical documentation.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive anchor text instead of raw URLs or generic link text such ashere.
Prefer active voice, present tense, short sentences, and plain English.
Use consistent terminology for the same concept throughout a document.
Write procedures as imperative, parallel, easy-to-scan steps, and split long sequences into smaller tasks.
Useafterinstead ofoncewhen expressing temporal sequence.
Usecaninstead ofmaywhen the intended meaning is possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
Introduce examples' code blocks with full sentences and ensure examples match current APIs and build commands.For docs site changes, run
just docsto regenerate Python and Rust API references and validate the Fern configuration.
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant documentation when changes affect public behavior, adapters, examples, or workspace structure.
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
**/*.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Documentation and examples must be updated consistently with changes to public behavior and reviewed for NVIDIA technical-writing style.
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
pypi.mdadapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/codex/README.mdadapters/codex/pypi.mdpython/pypi.mdadapters/deepagents/pypi.mdadapters/common/pypi.md
adapters/*/README.md
📄 CodeRabbit inference engine (AGENTS.md)
Update adapter README files when public behavior, examples, or supported bindings change.
Files:
adapters/claude/README.mdadapters/codex/README.md
**/README.md
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Update relevant package, crate, adapter, and integration README files when public behavior or entry-point documentation changes.
Files:
adapters/claude/README.mdadapters/codex/README.md
{adapters/**,examples/**}
⚙️ CodeRabbit configuration file
{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.
Files:
adapters/claude/README.mdadapters/claude/pypi.mdadapters/hermes/pypi.mdadapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/codex/README.mdadapters/codex/pypi.mdadapters/deepagents/pypi.mdadapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.tomladapters/common/pypi.md
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
After updating manifests or lockfiles, run
uv run --no-project python scripts/licensing/license_diff.py --base-ref origin/mainand review added packages and license changes.
Files:
pyproject.toml
{pyproject.toml,adapters/**/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
{pyproject.toml,adapters/**/pyproject.toml}: Update the literalproject.versionin the root setuptools project and every adapterpyproject.toml.
Keep internal exact-version requirements aligned: rootnemo-fabric-* == <version>optional dependencies and each adapter'snemo-fabric-adapters-common == <version>dependency.
Files:
pyproject.tomladapters/claude/pyproject.tomladapters/codex/pyproject.tomladapters/deepagents/pyproject.tomladapters/common/pyproject.tomladapters/hermes/pyproject.toml
🔇 Additional comments (15)
adapters/hermes/pyproject.toml (1)
25-25: LGTM!Also applies to: 45-47
python/pyproject.toml (1)
22-22: LGTM!Also applies to: 31-33
pypi.md (1)
11-12: LGTM!pyproject.toml (1)
32-34: LGTM!adapters/claude/README.md (1)
249-249: 🎯 Functional Correctness
FABRIC_NEMO_RELAY_COMMANDis the right variable here The Claude relay test reads it intests/e2e/test_claude.pyand forwards it toFABRIC_TEST_NEMO_RELAY_COMMAND, so the README command does select the installednemo-relayCLI.> Likely an incorrect or invalid review comment.adapters/claude/pypi.md (1)
27-27: 📐 Maintainability & Code QualityRemove this note. The sentence is already split correctly, and
#nemo-relay-clipoints to theNeMo Relay CLIsection in the install guide.> Likely an incorrect or invalid review comment.adapters/claude/pyproject.toml (1)
25-25: LGTM!Also applies to: 41-43
adapters/codex/pypi.md (2)
1-17: LGTM!
18-29: 🗄️ Data Integrity & IntegrationVerify the advertised adapter installation contracts before publishing.
The new PyPI pages document extras and Python compatibility that are not established by the supplied metadata changes. Confirm each command, extra, relay combination, and Python range against the corresponding project metadata and the root
nemo-fabricextras.
adapters/codex/pypi.md#L18-L29: verify thecodex,harness,full, and relay-related commands.adapters/deepagents/pypi.md#L18-L33: verify thedeepagents,relay,harness, andfullcommands and relay behavior.adapters/hermes/pypi.md#L18-L34: verify Python 3.11–3.13 support and all Hermes and relay installation options.As per coding guidelines, verify documentation claims against the current repository or public API. As per path instructions, verify adapter command correctness and compatibility with public NeMo Fabric contracts.
Sources: Coding guidelines, Path instructions
adapters/codex/pyproject.toml (1)
25-25: LGTM!Also applies to: 41-43
adapters/common/pypi.md (1)
1-28: LGTM!adapters/common/pyproject.toml (1)
25-25: LGTM!Also applies to: 29-31
adapters/deepagents/pypi.md (1)
1-17: LGTM!adapters/deepagents/pyproject.toml (1)
25-25: LGTM!Also applies to: 53-55
adapters/hermes/pypi.md (1)
1-17: LGTM!
| RUN_FABRIC_CODEX_RELAY_INTEGRATION=1 \ | ||
| FABRIC_TEST_NEMO_RELAY_COMMAND=/path/to/nemo-relay \ | ||
| uv run pytest tests/e2e/test_codex.py -q | ||
| ``` | ||
|
|
||
| Set `FABRIC_TEST_CODEX_BIN=/path/to/codex` on either opt-in command to validate | ||
| an explicit app-server override instead of the SDK-pinned runtime. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Use explicit angle-bracketed path placeholders.
/path/to/nemo-relay and /path/to/codex should be represented as placeholders, not literal paths. Quote them so the commands remain valid shell examples.
Proposed wording
- FABRIC_TEST_NEMO_RELAY_COMMAND=/path/to/nemo-relay \
+ FABRIC_TEST_NEMO_RELAY_COMMAND="<path-to-nemo-relay>" \
...
-Set `FABRIC_TEST_CODEX_BIN=/path/to/codex` on either opt-in command to validate
+Set `FABRIC_TEST_CODEX_BIN="<path-to-codex>"` on either opt-in command to validateAs per coding guidelines, represent path placeholders as angle-bracketed values inside monospace.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| RUN_FABRIC_CODEX_RELAY_INTEGRATION=1 \ | |
| FABRIC_TEST_NEMO_RELAY_COMMAND=/path/to/nemo-relay \ | |
| uv run pytest tests/e2e/test_codex.py -q | |
| ``` | |
| Set `FABRIC_TEST_CODEX_BIN=/path/to/codex` on either opt-in command to validate | |
| an explicit app-server override instead of the SDK-pinned runtime. | |
| RUN_FABRIC_CODEX_RELAY_INTEGRATION=1 \ | |
| FABRIC_TEST_NEMO_RELAY_COMMAND="<path-to-nemo-relay>" \ | |
| uv run pytest tests/e2e/test_codex.py -q | |
| Set `FABRIC_TEST_CODEX_BIN="<path-to-codex>"` on either opt-in command to validate | |
| an explicit app-server override instead of the SDK-pinned runtime. |
🤖 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 `@adapters/codex/README.md` around lines 156 - 162, Update the README command
examples to use quoted angle-bracketed placeholders for both executable paths:
replace the Nemo Relay and Codex path values with placeholders such as
“<path-to-nemo-relay>” and “<path-to-codex>”, keeping them inside the existing
shell assignments and code formatting.
Source: Coding guidelines
| Is equivalent to: | ||
|
|
||
| ```bash |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Use a complete lead-in for the direct runtime install.
Is equivalent to: is a sentence fragment and does not clearly introduce the command. Rewrite it as a complete sentence, such as “To install the runtime package directly, run:”.
As per coding guidelines, introduce every code block with a complete sentence.
🤖 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 `@python/pypi.md` around lines 23 - 25, Replace the “Is equivalent to:” lead-in
in the Python package installation documentation with a complete sentence that
clearly introduces the direct runtime installation command, such as instructing
the reader to run it.
Source: Coding guidelines
|
|
||
| Refer to the [NeMo Fabric documentation](https://nvidia-nemo-fabric.docs.buildwithfern.com/nemo/fabric) | ||
| for installation and usage guidance. Source code is available in the | ||
| [NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/nemo-fabric/). |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Use the canonical repository URL casing.
The new page links to https://github.com/NVIDIA/nemo-fabric/, while the package metadata uses https://github.com/NVIDIA/NeMo-Fabric. Keep the PyPI documentation consistent with the official repository URL.
Proposed fix
-[NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/nemo-fabric/).
+[NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/NeMo-Fabric/).As per coding guidelines, verify official capitalization and spelling for NVIDIA and third-party product names.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| [NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/nemo-fabric/). | |
| [NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/NeMo-Fabric/). |
🤖 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 `@python/pypi.md` at line 35, Update the NVIDIA NeMo Fabric repository link in
the PyPI documentation to use the canonical URL casing
`https://github.com/NVIDIA/NeMo-Fabric`, matching the package metadata and
official repository naming.
Source: Coding guidelines
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
pypi.md (1)
12-12: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winPin the hero image to the published release.
The image uses the mutable
mainbranch, so historical PyPI pages can display a changed or missing asset. Use the release tag or an immutable commit that matches the published package.🤖 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 `@pypi.md` at line 12, Update the hero image URL in the README content near the diagram reference to replace the mutable main branch with the immutable tag or commit corresponding to the published package release, while preserving the existing image path and alt text.
🤖 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.
Outside diff comments:
In `@pypi.md`:
- Line 12: Update the hero image URL in the README content near the diagram
reference to replace the mutable main branch with the immutable tag or commit
corresponding to the published package release, while preserving the existing
image path and alt text.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: c7540fd8-cc3b-47ba-bb3f-15a1b7caa658
📒 Files selected for processing (1)
pypi.md
📜 Review details
⏰ Context from checks skipped due to timeout. (18)
- GitHub Check: Preview docs
- GitHub Check: Test (Python 3.14, linux-arm64)
- GitHub Check: Test (Python 3.14, macos-arm64)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.13, linux-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Test (Python 3.12, macos-arm64)
- GitHub Check: Test (Python 3.12, linux-amd64)
- GitHub Check: Test (Python 3.13, linux-arm64)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.12, linux-arm64)
- GitHub Check: Test (Python 3.11, linux-amd64)
- GitHub Check: Test (Python 3.13, macos-arm64)
- GitHub Check: Test (Python 3.14, linux-amd64)
- GitHub Check: Test (Python 3.11, linux-arm64)
- GitHub Check: Test (Python 3.11, macos-arm64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (9)
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Files:
pypi.md
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
pypi.md
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such ashereorread more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.
**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...
Files:
pypi.md
**/*.{md,rst,txt,adoc}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-language-mechanics.md)
**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 12:30 to 1:00 p.m.for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...
Files:
pypi.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon its first usage, typically in the title or H1; useNeMo Fabricthereafter.
Usefabricby itself only when referring to the CLI tool, and surround those references with backticks.
CapitalizeNVIDIAcorrectly in public documentation.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case consistently for headings in technical documentation.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive anchor text instead of raw URLs or generic link text such ashere.
Prefer active voice, present tense, short sentences, and plain English.
Use consistent terminology for the same concept throughout a document.
Write procedures as imperative, parallel, easy-to-scan steps, and split long sequences into smaller tasks.
Useafterinstead ofoncewhen expressing temporal sequence.
Usecaninstead ofmaywhen the intended meaning is possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
Introduce examples' code blocks with full sentences and ensure examples match current APIs and build commands.For docs site changes, run
just docsto regenerate Python and Rust API references and validate the Fern configuration.
Files:
pypi.md
**/*.{rs,py,html,md,mdx,toml,yml,yaml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
All Rust, Python, HTML, Markdown, MDX, TOML, YAML, and shell source files must include the project SPDX copyright and Apache-2.0 license headers using the comment syntax appropriate to each file type.
Files:
pypi.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant documentation when changes affect public behavior, adapters, examples, or workspace structure.
Files:
pypi.md
**/*.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Documentation and examples must be updated consistently with changes to public behavior and reviewed for NVIDIA technical-writing style.
Files:
pypi.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
pypi.md
🔇 Additional comments (1)
pypi.md (1)
39-46: 🗄️ Data Integrity & IntegrationPairing guidance is already present below. Bare adapter installs do not include the runtime, and the following note tells users to install
nemo-fabricwith a bare adapter only in a compatible environment.> Likely an incorrect or invalid review comment.
zhongxuanwang-nv
left a comment
There was a problem hiding this comment.
Thanks David!! Now the docs are also cleaner :)
Overview
README.mdfiles remain developer focusedpypi.mdprovides brief install instructions appropriate for presentation on pypi.orgtesting.mdfiles back into theREADME.mdfilesproject.urlsettings inpyproject.tomlfilesRelated Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Closes FABRIC-119
I confirm this contribution is my own work, or I have the right to submit it under this project's license.
I searched existing issues and open pull requests, and this does not duplicate existing work.
Summary by CodeRabbit
Documentation
Chores