feat: normalize portable adapter configuration - #117
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Enterprise Run ID: 📒 Files selected for processing (9)
WalkthroughThis PR moves instructions, runtime limits, model endpoints, environment variables, and tool policies into typed normalized configuration. Core planning validates adapter compatibility, runtime processes propagate environment and timeout data, adapters consume normalized fields, and SDKs, schemas, examples, tests, and documentation are updated. ChangesNormalized configuration pipeline
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Fern docs preview: https://nvidia-preview-pull-request-117.docs.buildwithfern.com/nemo/fabric |
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
crates/fabric-cli/src/scaffold.rs (1)
417-433: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winCover the newly rendered normalized fields.
This test only checks
temperatureandbase_url; setsystem_prompt,max_turns,runtime.timeout_seconds, andenvironment.env, then assert both generated launchers preserve them. As per coding guidelines, “Run tests for every affected language surface.”🤖 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 `@crates/fabric-cli/src/scaffold.rs` around lines 417 - 433, Extend renderers_preserve_model_base_url_and_temperature by setting system_prompt, max_turns, runtime.timeout_seconds, and environment.env on the configuration, then assert the generated Python and Rust launchers contain each normalized field with its expected value. Run the relevant tests for both affected language renderers.Source: Coding guidelines
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
328-334: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAlign the fallback state path with the root-based layout
state_dir()returns<root>/.fabric/deepagentswhenartifacts.root/FABRIC_ARTIFACTSis set, but falls back to<base_dir>/artifacts/deepagents/.fabricotherwise. That swaps the.fabricanddeepagentssegments, so persisted checkpointer files land in different layouts depending on config. Make the fallback mirror the root branch (<base_dir>/artifacts/.fabric/deepagents).🤖 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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py` around lines 328 - 334, The fallback branch in state_dir must match the root-based layout: change its returned path to place .fabric before deepagents, yielding <base_dir>/artifacts/.fabric/deepagents. Leave the artifacts.root and FABRIC_ARTIFACTS branch unchanged.
🤖 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/README.md`:
- Line 64: Update the user-facing prose in the Core definition to use “NVIDIA
NeMo Fabric” on first reference and “NeMo Fabric” thereafter, replacing the
standalone product reference “Fabric” while preserving the sentence’s meaning.
In `@crates/fabric-cli/src/examples.rs`:
- Around line 139-144: Update the example configuration logic around the
preset.name check so the default scripted variant also sets config.skills to
reference skills/code-review.md, ensuring the staged skill is used. Preserve the
existing SkillConfig paths and extensions values, and update any related example
metadata or tests only if needed to reflect this behavior.
In `@docs/sdk/python.mdx`:
- Around line 240-245: Replace the combined capability_config example with
separate adapter-specific examples: one demonstrating tools.blocked for Claude
and Deep Agents, and another demonstrating tools.toolsets for Hermes. Ensure
each example uses only the policy fields supported by its adapter and does not
combine blocked tools with toolsets.
In `@examples/harbor/README.md`:
- Around line 80-88: Update the field-mapping table in the README to use the
canonical FabricConfig paths: models.default.base_url, system_prompt, max_turns,
runtime.timeout_seconds, environment.env, tools.blocked, tools.toolsets.enabled,
tools.toolsets.blocked, and harness.settings. Replace the current descriptive
labels, remove the duplicate fabric_blocked_tools row, and retain one row per
field.
In `@python/src/nemo_fabric/models.py`:
- Line 114: Update the timeout_seconds field constraint in the model to reject
non-finite values such as positive infinity while retaining the existing
requirement that values be greater than zero. Use the model’s supported
finite-float constraint or add an isfinite() validator associated with
timeout_seconds.
In `@tests/e2e/test_codex.py`:
- Line 42: Preserve the custom Relay command in the _run_relay flow by passing
the resolved FABRIC_TEST_NEMO_RELAY_COMMAND value into with_relay or assigning
it to config.harness.settings["nemo_relay_command"] before runtime execution.
Ensure the adapter-owned harness setting remains unchanged and is not silently
discarded.
In `@tests/python/test_sdk_contract.py`:
- Around line 253-266: Update the ValidationError match in the FabricConfig test
to use a raw regex that escapes the dots and targets the emitted
models.<role>.settings.base_url path, such as the requested escaped pattern;
leave the test setup and validation behavior unchanged.
---
Outside diff comments:
In `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py`:
- Around line 328-334: The fallback branch in state_dir must match the
root-based layout: change its returned path to place .fabric before deepagents,
yielding <base_dir>/artifacts/.fabric/deepagents. Leave the artifacts.root and
FABRIC_ARTIFACTS branch unchanged.
In `@crates/fabric-cli/src/scaffold.rs`:
- Around line 417-433: Extend renderers_preserve_model_base_url_and_temperature
by setting system_prompt, max_turns, runtime.timeout_seconds, and
environment.env on the configuration, then assert the generated Python and Rust
launchers contain each normalized field with its expected value. Run the
relevant tests for both affected language renderers.
🪄 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: 4b312b67-42b5-48b4-9470-09325d7915c0
📒 Files selected for processing (130)
README.mdadapters/README.mdadapters/claude/README.mdadapters/claude/fabric-adapter.jsonadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/README.mdadapters/codex/fabric-adapter.jsonadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/README.mdadapters/deepagents/fabric-adapter.jsonadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/README.mdadapters/hermes/fabric-adapter.jsonadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/codex/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/src/examples.rscrates/fabric-cli/src/presets.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/python/main.py.tmplcrates/fabric-cli/templates/rust/main.rs.tmplcrates/fabric-core/src/config.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rsdocs/getting-started/quickstart.mdxdocs/integrations/claude.mdxdocs/integrations/codex.mdxdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsetconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexamples/code_review_agent/config.pyexamples/harbor/README.mdexamples/harbor/calculator/README.mdexamples/harbor/swebench/README.mdexamples/harbor/swebench/adapters/claude/fabric-adapter.jsonexamples/harbor/swebench/adapters/hermes/fabric-adapter.jsonexamples/notebooks/01_quickstart.ipynbpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/integrations/harbor/fabric_agent.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/environment-handle.schema.jsonschemas/run-plan.schema.jsonschemas/runtime-context.schema.jsonschemas/runtime-handle.schema.jsonskills/nemo-fabric-integrate/SKILL.mdskills/nemo-fabric-integrate/references/config-mapping.mdtests/_utils/configs.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/e2e/test_claude.pytests/e2e/test_codex.pytests/e2e/test_deepagents.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_e2e.pytests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.jsontests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.pytests/integrations/test_harbor_runner.pytests/python/test_native_sdk.pytests/python/test_sdk_contract.pytests/python/test_typed_config.py
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (2)
278-278: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winForce the terminal environment to
local.
setdefaultdoes not enforce"local": an inherited or normalizedTERMINAL_ENV=remoteremains active. Becauseenvironment.envis forwarded to the adapter host, this can bypass the adapter’s local-only terminal boundary. Assign the value unconditionally or reject conflicting environment keys.🤖 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/hermes/src/nemo_fabric_adapters/hermes/adapter.py` at line 278, Update the environment construction near the "local" terminal setting to unconditionally assign TERMINAL_ENV as "local" rather than using setdefault, ensuring inherited or normalized remote values cannot reach the adapter host.
120-127: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winRemove the legacy
harness.settings.cwdfallback.The terminal configuration still falls back to
self._settings["cwd"]when no normalized environment workspace is present. That preserves an unsupported adapter-specific override and can resolve the same configuration to different working directories across adapters. Use only the resolved config-root-relative workspace or a fixed config-root-relative default, and rejectcwdat the settings boundary.As per path instructions, normalized configuration and resolved runtime context are authoritative; harness settings are reserved for harness-specific behavior.
Based on learnings,
harness.settings.cwdis explicitly unsupported and adapter paths must remain config-root-relative.🤖 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/hermes/src/nemo_fabric_adapters/hermes/adapter.py` around lines 120 - 127, Update the terminal configuration construction near the "terminal" mapping to remove any fallback to self._settings["cwd"]; derive cwd only from the normalized environment workspace or the fixed config-root-relative default. Also reject the cwd key at the harness settings boundary so unsupported adapter-specific overrides cannot influence runtime paths.Sources: Path instructions, Learnings
crates/fabric-core/src/config.rs (1)
1067-1156: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winReject malformed environment entries before spawn.
environment.envonly blocks empty keys;runtime.rsforwards the map straight intoCommand::envs, so NUL-containing names or values can still fail the adapter host at spawn time. AddInvalidConfigchecks for names and values and a regression test.🤖 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 `@crates/fabric-core/src/config.rs` around lines 1067 - 1156, Extend environment validation in the config validation function’s environment.env loop to reject names and values containing NUL bytes before they reach Command::envs. Return InvalidConfig identifying environment.env and the offending entry, while preserving the existing empty-name validation; add a regression test covering malformed names and values.docs/reference/api/python-library-reference/nemo_fabric.models.md (1)
1507-1512: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse the required NeMo Fabric product name in this generated prose.
Lines 1509-1511 use standalone capitalized
Fabricfor the product. Update the source docstring to useNVIDIA NeMo Fabricon first use andNeMo Fabricthereafter, then regenerate this page instead of editing generated output directly.As per path instructions, documentation must use the full product name on first use and generated API pages must be regenerated from their source.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/reference/api/python-library-reference/nemo_fabric.models.md` around lines 1507 - 1512, Update the FabricConfig source docstring so the first product reference uses “NVIDIA NeMo Fabric” and subsequent references use “NeMo Fabric”; then regenerate the API reference page from its source rather than editing the generated output directly.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx`:
- Line 4: Update the source Rust documentation comment for AdapterConfigField so
its first product-name usage is “NVIDIA NeMo Fabric,” then regenerate the
corresponding API documentation with `just docs`; do not edit the generated
files under docs/reference/api directly.
---
Outside diff comments:
In `@adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py`:
- Line 278: Update the environment construction near the "local" terminal
setting to unconditionally assign TERMINAL_ENV as "local" rather than using
setdefault, ensuring inherited or normalized remote values cannot reach the
adapter host.
- Around line 120-127: Update the terminal configuration construction near the
"terminal" mapping to remove any fallback to self._settings["cwd"]; derive cwd
only from the normalized environment workspace or the fixed config-root-relative
default. Also reject the cwd key at the harness settings boundary so unsupported
adapter-specific overrides cannot influence runtime paths.
In `@crates/fabric-core/src/config.rs`:
- Around line 1067-1156: Extend environment validation in the config validation
function’s environment.env loop to reject names and values containing NUL bytes
before they reach Command::envs. Return InvalidConfig identifying
environment.env and the offending entry, while preserving the existing
empty-name validation; add a regression test covering malformed names and
values.
In `@docs/reference/api/python-library-reference/nemo_fabric.models.md`:
- Around line 1507-1512: Update the FabricConfig source docstring so the first
product reference uses “NVIDIA NeMo Fabric” and subsequent references use “NeMo
Fabric”; then regenerate the API reference page from its source rather than
editing the generated output directly.
🪄 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: 1183b192-f685-4f86-9c16-2fe191744d5b
📒 Files selected for processing (25)
adapters/README.mdadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/src/examples.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/sdk/python.mdxexamples/harbor/README.mdpython/src/nemo_fabric/models.pyschemas/adapter-descriptor.schema.jsonschemas/agent.schema.jsonschemas/run-plan.schema.jsonscripts/generate_api_docs.shtests/adapters/test_hermes_adapter.pytests/e2e/test_codex.pytests/python/test_sdk_contract.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (45)
**/*.{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:
examples/harbor/README.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdadapters/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.md
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep package names, repository references, and build commands current in documentation and examples.
Files:
examples/harbor/README.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.
Files:
examples/harbor/README.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.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:
examples/harbor/README.mdscripts/generate_api_docs.shdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxschemas/adapter-descriptor.schema.jsondocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdcrates/fabric-cli/src/examples.rsdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxcrates/fabric-core/src/schema.rsdocs/reference/api/python-library-reference/nemo_fabric.errors.mdtests/e2e/test_codex.pydocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxtests/python/test_sdk_contract.pyschemas/agent.schema.jsondocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxadapters/README.mdpython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pyschemas/run-plan.schema.jsondocs/reference/api/python-library-reference/nemo_fabric.models.mdcrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{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:
examples/harbor/README.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxadapters/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.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:
examples/harbor/README.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdadapters/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.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:
examples/harbor/README.mdadapters/README.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.Update corresponding documentation when public behavior, adapters, examples, or workspace structure changes.
Files:
examples/harbor/README.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxadapters/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.md
**/*.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML/Markdown source files must use the specified HTML-comment SPDX header format.
Files:
examples/harbor/README.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdadapters/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.md
**/*.{py,toml,lock,json,md,yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Keep package wiring, descriptors, dependencies, installation, catalogs, CI enumerations, documentation, examples, fixtures, and generated artifacts consistent with the adapter implementation.
Files:
examples/harbor/README.mdschemas/adapter-descriptor.schema.jsondocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdtests/e2e/test_codex.pydocs/reference/api/python-library-reference/nemo_fabric.types.mdtests/python/test_sdk_contract.pyschemas/agent.schema.jsonadapters/README.mdpython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pyschemas/run-plan.schema.jsondocs/reference/api/python-library-reference/nemo_fabric.models.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:
examples/harbor/README.mdadapters/README.mdadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
{*.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:
examples/harbor/README.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxadapters/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.md
scripts/generate_api_docs.sh
📄 CodeRabbit inference engine (AGENTS.md)
Keep the stable public wrapper
scripts/generate_api_docs.shat thescripts/root and reference it in docs and examples; use namespaced paths underscripts/docs/only for internal maintenance documentation.For Python API reference changes, update
scripts/generate_api_docs.shwhen the generator itself requires changes.
Files:
scripts/generate_api_docs.sh
**/*.{toml,yaml,yml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
TOML, YAML, and shell source files must use the specified
#SPDX header format.
Files:
scripts/generate_api_docs.sh
**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
In MDX files, use JSX comment delimiters (
{/*and*/}) for top-of-file comments, including SPDX headers; do not use HTML comments.Use
{/* ... */}delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.
**/*.mdx: For documentation-site changes, runjust docsto regenerate Python and Rust API references and validate Fern configuration.
MDX files must use the specified JSX-comment SPDX header format.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
docs/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Update Fern documentation under
docs/when public behavior, thenemo-fabricpackage, examples, or supported bindings change.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
docs/reference/api/**
📄 CodeRabbit inference engine (AGENTS.md)
Regenerate or update generated API references under
docs/reference/api/when the public API changes.Treat all files under
docs/reference/api/as generated output and do not modify them directly.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/sdk/python.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
**/*.{rs,py,pyi,json,yaml,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Determine and update every affected public surface, including the CLI, PyO3 bindings, Python SDK, type stubs, schemas, and adapter contract, so they remain in parity.
Files:
schemas/adapter-descriptor.schema.jsoncrates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rstests/e2e/test_codex.pytests/python/test_sdk_contract.pyschemas/agent.schema.jsonpython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pyschemas/run-plan.schema.jsoncrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{json,jsonschema}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Keep checked-in JSON Schema snapshots synchronized with public contract changes.
Files:
schemas/adapter-descriptor.schema.jsonschemas/agent.schema.jsonschemas/run-plan.schema.json
schemas/**/*
⚙️ CodeRabbit configuration file
schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.
Files:
schemas/adapter-descriptor.schema.jsonschemas/agent.schema.jsonschemas/run-plan.schema.json
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Implement new runtime or binding behavior in the shared Rust core first.
**/*.rs: Format Rust code withcargo fmt --alland ensurecargo fmt --all -- --checkpasses.
Runcargo check --workspace --lockedwhen changing the Rust core, CLI, or native Python extension.
Rust files must use the specified Rust//SPDX header format.
Files:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{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:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
**/*.{rs,py}: Usesnake_casefor functions and variables; usePascalCasefor Rust types and Python classes.
Run tests for every affected language surface; changes to the Rust core or public schemas require both Rust and Python test suites.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.
Files:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rstests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pycrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{rs,rmeta}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Rust code changes, run
cargo fmt --all -- --checkandjust test-rust.
Files:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests injust test-rustpass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes underschemas/and generated API references.
Files:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rstests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pycrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{py,pyi,rs}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For Python SDK or PyO3 binding changes, use
python-tests, run focused pytest tests first, thenjust test-python; rebuild withjust build-pythonwhen native code or packaging changes.
Files:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rstests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pycrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{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:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rstests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pycrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{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:
crates/fabric-cli/src/examples.rscrates/fabric-core/src/schema.rstests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.pycrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
crates/fabric-core/**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes under
crates/fabric-coremust run both the Rust and Python test suites.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
crates/fabric-core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Rust API reference changes, update Rust documentation comments under
crates/fabric-core/instead of editing generated reference output.If
crates/fabric-corechanges in a way exposed through Python, run both the Rust and Python suites.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
crates/fabric-core/src/**/*.rs
⚙️ CodeRabbit configuration file
crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rs
**/*.{py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Python code or a Python-facing adapter changes, run
just test-python.
Files:
tests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.py
tests/**/*.py
📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)
tests/**/*.py: Use Pytest to run Python tests.
Do not add@pytest.mark.asyncioto tests; async tests are automatically detected and run by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorunittest.mock.AsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files inconftest.py.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a function named<fixture_name>_fixture; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused or it does not return a value.
Use the autouserestore_environ_fixturefromtests/conftest.pyto restore environment variables; modify variables withos.environand do not usemonkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
Files:
tests/e2e/test_codex.pytests/python/test_sdk_contract.pytests/adapters/test_hermes_adapter.py
**/*.py
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.py: Use type annotations for public Python APIs and keep native binding declarations synchronized with their Rust implementations.
Python files must use the specified Python#SPDX header format.
Files:
tests/e2e/test_codex.pytests/python/test_sdk_contract.pypython/src/nemo_fabric/models.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pytests/adapters/test_hermes_adapter.py
**/tests/**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or relevant
tests/area.
Files:
tests/e2e/test_codex.pytests/python/test_sdk_contract.pytests/adapters/test_hermes_adapter.py
{tests/**,python/tests/**}
⚙️ CodeRabbit configuration file
{tests/**,python/tests/**}: Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.
Files:
tests/e2e/test_codex.pytests/python/test_sdk_contract.pytests/adapters/test_hermes_adapter.py
docs/sdk/python.mdx
📄 CodeRabbit inference engine (AGENTS.md)
Keep
docs/sdk/python.mdxcurrent when the public Python API changes.
Files:
docs/sdk/python.mdx
python/src/nemo_fabric/**
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Ensure the editable maturin build continues to produce the native extension at
nemo_fabric._native, with generated artifacts placed where downstream consumers expect.
Files:
python/src/nemo_fabric/models.py
python/src/nemo_fabric/**/*.py
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Python API reference changes, update source docstrings under
python/src/nemo_fabric/instead of editing generated reference output.
Files:
python/src/nemo_fabric/models.py
python/src/**/*.py
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Use the complete Fabric invocation and normalized public request/result contracts when implementing Python adapter integrations.
Files:
python/src/nemo_fabric/models.py
python/src/nemo_fabric/**/*
⚙️ CodeRabbit configuration file
python/src/nemo_fabric/**/*: Review Python SDK changes for typed API consistency, import-time dependency neutrality, async/session behavior, and parity with the native extension.
Stubs and runtime implementations should stay aligned.
Files:
python/src/nemo_fabric/models.py
adapters/*/src/**/*.py
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
adapters/*/src/**/*.py: Implement adapters using the existing Fabricpythonorprocessrunner and normalized request/result contracts; do not add a runner or one-off abstraction for a single adapter.
Treatconfig,capability_plan,telemetry_plan, andruntime_contextas authoritative; reserveharness.settingsfor harness-specific behavior and apply precedence as normalized config, resolved plans/context, harness settings, then descriptor/default values.
Reject conflicting duplicate declarations and unsupported behavior with an actionable error naming the field and supported alternatives; never silently drop configuration.
Run dependency and authentication preflight before invocation, and never expose credential values in output, errors, events, logs, or fixtures.
Forward only required system variables, selected credential variables, telemetry variables, and documented harness-specific environment; never forward or log unrelated environment values.
Maintain one local adapter host per Fabric runtime for orderedstart→invoke*→stop; emit one JSON lifecycle response per request on stdout and diagnostics on stderr.
Represent harness-level invoke failures as successful lifecycle responses withresponse: null,failed: true, and structurederrorfields includingcode,message, andretryable.
Scope workspace, generated configuration, state, sessions, and artifacts to the resolved runtime context; stateful adapters must isolate Fabric runtime IDs.
Map supported model settings and credential-variable names, enforce blocked tools when claimingtools.blocked, support only native MCP transports actually implemented, validate and stage skill paths without cross-runtime collisions, and declare only implemented telemetry and artifact outputs.
Files:
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
tests/adapters/**/*.py
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
tests/adapters/**/*.py: If an adapter or integration changes, run its focused tests.
For adapter behavior changes, run focused adapter tests undertests/adapters, then runjust test-python.
Files:
tests/adapters/test_hermes_adapter.py
🧠 Learnings (3)
📚 Learning: 2026-07-24T16:07:22.255Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 118
File: docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx:5-5
Timestamp: 2026-07-24T16:07:22.255Z
Learning: In this repo, files generated under `docs/reference/api/**` are NVIDIA NeMo Fabric API reference output. When reviewing changes to these generated pages, do not treat sidebar `position`/ordering updates as direct manual edits—these can be regenerated by running `just docs` after adding public types. Only flag substantive content changes that are not explained by generation.
Applied to files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
📚 Learning: 2026-06-28T04:03:32.877Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 26
File: python/tests/smoke_typed_config.py:163-177
Timestamp: 2026-06-28T04:03:32.877Z
Learning: In NVIDIA NeMo Fabric Python SDK serialization of `RuntimeCapabilities` (to satisfy the “parity contract” with Rust core and the CLI), do not emit metadata keys when the corresponding metadata is absent. Instead, omit those fields entirely so the produced JSON matches the Rust/CLI output (e.g., avoid `null`, empty objects, or placeholder metadata). During review, verify the serializer/builders follow this omission rule and that Python outputs/parity tests reflect the same shape.
Applied to files:
python/src/nemo_fabric/models.py
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.
Applied to files:
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
🔇 Additional comments (26)
crates/fabric-core/src/config.rs (1)
19-23: LGTM!Also applies to: 35-41, 70-94, 359-361, 370-409, 478-480, 501-504, 535-537, 1213-1218, 1234-1315, 1433-1433, 1445-1447, 1461-1461, 1486-1505, 1524-1560, 1583-1584, 1615-1615, 1804-1806, 1850-1855, 1885-1894, 2040-2375
schemas/adapter-descriptor.schema.json (1)
3-62: LGTM!Also applies to: 63-70
schemas/agent.schema.json (1)
39-45: LGTM!Also applies to: 208-214, 874-882, 930-973, 994-1002, 1055-1061
schemas/run-plan.schema.json (1)
3-70: LGTM!Also applies to: 450-456, 523-529, 565-565, 582-590, 643-649, 819-825, 1544-1552, 1663-1678, 1687-1726
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx (1)
5-20: LGTM!crates/fabric-core/src/runtime.rs (2)
23-24: LGTM!Also applies to: 245-247, 481-533, 540-560, 570-579, 648-673, 1358-1386, 2395-2398, 2490-2490, 2525-2533, 2553-2572, 2587-2587
910-919: 🩺 Stability & AvailabilityNo change needed here.
Duration::try_from_secs_f64already returns an error for out-of-range finite values, so large finiteruntime.timeout_secondsinputs won’t panic.> Likely an incorrect or invalid review comment.crates/fabric-core/src/schema.rs (1)
215-224: LGTM!adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)
26-83: LGTM!Also applies to: 93-93, 104-108, 144-145, 208-224, 264-268, 304-308, 321-334, 345-348, 388-388, 522-530
adapters/README.md (1)
46-61: LGTM!Also applies to: 62-102
docs/sdk/python.mdx (1)
141-152: LGTM!Also applies to: 172-222, 242-264, 517-533
tests/python/test_sdk_contract.py (1)
46-46: LGTM!Also applies to: 147-160, 210-273, 282-307, 474-474, 1249-1263
docs/reference/api/python-library-reference/nemo_fabric.types.md (1)
18-18: LGTM!Also applies to: 88-88, 161-161, 232-232, 302-302, 371-371, 442-442, 513-513, 581-581, 652-652, 723-723, 798-798, 867-867
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx (1)
5-5: LGTM!Also applies to: 26-26, 52-56
python/src/nemo_fabric/models.py (2)
114-118: LGTM!Also applies to: 147-176, 187-220, 439-495, 571-584
559-568: 🎯 Functional CorrectnessNo change needed here.
FabricBaseModelsetsvalidate_assignment=True, so assigningself.tools.blockedstill runs theToolsConfigvalidator;block_tools("")cannot bypass field validation.> Likely an incorrect or invalid review comment.examples/harbor/README.md (1)
78-87: LGTM!docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx (1)
4-16: LGTM!Also applies to: 36-43
crates/fabric-cli/src/examples.rs (1)
122-122: LGTM!Also applies to: 139-144, 170-183
tests/adapters/test_hermes_adapter.py (1)
12-12: LGTM!Also applies to: 185-217, 253-295, 297-306, 362-364, 559-562, 643-668
tests/e2e/test_codex.py (1)
20-20: LGTM!Also applies to: 42-49, 83-89
scripts/generate_api_docs.sh (1)
42-43: LGTM!docs/reference/api/python-library-reference/nemo_fabric.errors.md (1)
18-18: LGTM!Also applies to: 65-65, 101-101, 137-137, 173-173, 209-209
docs/reference/api/python-library-reference/nemo_fabric.models.md (1)
4-4: LGTM!Also applies to: 19-1292, 1385-1445, 1581-1595
docs/reference/api/python-library-reference/nemo_fabric.runtime.md (1)
18-18: LGTM!Also applies to: 31-31
docs/reference/api/python-library-reference/nemo_fabric.client.md (1)
4-4: LGTM!Also applies to: 18-18
e5ebf04 to
2d45ae3
Compare
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
756-761: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRemove stale
base_instructionsfrom the settings-shape validation loop.
_validate_settings_boundary(settings)(line 748) already rejectsharness.settings.base_instructionsviaNORMALIZED_SETTING_FIELDS(line 95), so by the time this loop runs,settingscan never containbase_instructions.service_namewas correctly dropped from this loop for the same reason, butbase_instructionswas left behind — it's dead code that misleadingly implies the key is still a valid optional Codex setting.♻️ Proposed cleanup
for name in ( - "base_instructions", "developer_instructions", "service_tier", ): _optional_string(settings, name)🤖 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/src/nemo_fabric_adapters/codex/adapter.py` around lines 756 - 761, Remove "base_instructions" from the settings-shape validation loop that calls _optional_string, leaving only currently valid optional Codex settings such as "developer_instructions" and "service_tier". Do not change _validate_settings_boundary or NORMALIZED_SETTING_FIELDS.adapters/common/src/nemo_fabric_adapters/common/utils.py (1)
269-272: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse the existing
runtime_id()helper instead of raw dict indexing.
runtime_context(payload)["runtime_id"]bypasses the module's ownruntime_id(payload)helper, which already validates presence and raises a clearValueError("runtime_context.runtime_id is required"). Raw indexing here raises an unclearKeyErrorifruntime_idis missing, and duplicates validation logic that already exists in this same file.base_dir(payload)a few lines above correctly uses its helper — this should match.♻️ Proposed fix
- runtime_id = runtime_context(payload)["runtime_id"] + runtime_id_value = runtime_id(payload)(and update the two
str(runtime_id)usages below tostr(runtime_id_value))🤖 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/common/src/nemo_fabric_adapters/common/utils.py` around lines 269 - 272, Update normalize_relay_output_dirs to obtain the identifier through the existing runtime_id(payload) helper instead of indexing runtime_context(payload) directly, preserving its validation behavior. Rename the local value as needed and update both downstream str(runtime_id) usages to reference the new runtime_id_value.python/src/nemo_fabric/models.py (1)
300-310: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winRaise the pydantic minimum to
>=2.12. The lockfile is on2.13.4, butpython/pyproject.tomlstill allows2.10/2.11, so published installs can missexclude_ifand stop omitting emptyheaders/header_env.🤖 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/src/nemo_fabric/models.py` around lines 300 - 310, Update the Pydantic dependency constraint in python/pyproject.toml to require version >=2.12, ensuring RelayAtofStreamSinkConfig’s exclude_if fields for headers and header_env are supported. Keep the existing lockfile-compatible version range otherwise unchanged.tests/adapters/test_adapaters_common_utils.py (1)
472-473: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winReplace hard-coded temporary paths.
Ruff S108 fails on both fixture paths. Use
tmp_path / "atof"so tests remain isolated and lint passes.
tests/adapters/test_adapaters_common_utils.py#L472-L473: deriveoutput_directoryfrom atmp_pathfixture.tests/adapters/test_adapaters_common_utils.py#L577-L578: deriveoutput_directoryfrom the existingtmp_pathfixture.🤖 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 `@tests/adapters/test_adapaters_common_utils.py` around lines 472 - 473, Replace the hard-coded /tmp/atof output_directory in both fixture sites with a path derived from the existing tmp_path fixture, using the "atof" child directory. Update tests/adapters/test_adapaters_common_utils.py lines 472-473 and 577-578; ensure both affected tests receive or reuse tmp_path while preserving the fixture structure.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@adapters/claude/README.md`:
- Around line 37-42: Update the NVIDIA model configuration documentation in the
adapter README to state that models.<role>.base_url is required and must be
explicitly configured; remove wording that implies the public NVIDIA API Catalog
endpoint is used as a fallback, while preserving the credential and endpoint
translation details.
In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Line 4: Update the source documentation description to use “NVIDIA NeMo
Fabric” on first use, then regenerate the API reference page instead of editing
the generated file directly. Preserve the remaining description text and ensure
the regenerated page reflects the updated product name.
In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx`:
- Around line 22-24: Update the Rust source documentation for the
ToolsetConfig/toolsets field to describe toolset selection and blocking policy
as harness-defined rather than adapter-native, preserving the distinction from
adapter-native tools.blocked. Then regenerate the API reference page using just
docs; do not edit the generated MDX directly.
In
`@tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py`:
- Line 90: Update the workspace derivation in environment_payload() to use the
same environment fallback order as the shared environment handling, including
fabric_config(payload)["environment"] before reading workspace. Ensure a missing
workspace is rejected rather than allowing run_swebench_shim() to default to
Path(".").
---
Outside diff comments:
In `@adapters/codex/src/nemo_fabric_adapters/codex/adapter.py`:
- Around line 756-761: Remove "base_instructions" from the settings-shape
validation loop that calls _optional_string, leaving only currently valid
optional Codex settings such as "developer_instructions" and "service_tier". Do
not change _validate_settings_boundary or NORMALIZED_SETTING_FIELDS.
In `@adapters/common/src/nemo_fabric_adapters/common/utils.py`:
- Around line 269-272: Update normalize_relay_output_dirs to obtain the
identifier through the existing runtime_id(payload) helper instead of indexing
runtime_context(payload) directly, preserving its validation behavior. Rename
the local value as needed and update both downstream str(runtime_id) usages to
reference the new runtime_id_value.
In `@python/src/nemo_fabric/models.py`:
- Around line 300-310: Update the Pydantic dependency constraint in
python/pyproject.toml to require version >=2.12, ensuring
RelayAtofStreamSinkConfig’s exclude_if fields for headers and header_env are
supported. Keep the existing lockfile-compatible version range otherwise
unchanged.
In `@tests/adapters/test_adapaters_common_utils.py`:
- Around line 472-473: Replace the hard-coded /tmp/atof output_directory in both
fixture sites with a path derived from the existing tmp_path fixture, using the
"atof" child directory. Update tests/adapters/test_adapaters_common_utils.py
lines 472-473 and 577-578; ensure both affected tests receive or reuse tmp_path
while preserving the fixture structure.
🪄 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: 8ea0ceda-9665-416a-90b0-73885b01b9a9
📒 Files selected for processing (136)
README.mdadapters/README.mdadapters/claude/README.mdadapters/claude/fabric-adapter.jsonadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/README.mdadapters/codex/fabric-adapter.jsonadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/README.mdadapters/deepagents/fabric-adapter.jsonadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/README.mdadapters/hermes/fabric-adapter.jsonadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/codex/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/src/examples.rscrates/fabric-cli/src/presets.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/python/main.py.tmplcrates/fabric-cli/templates/rust/main.rs.tmplcrates/fabric-core/src/config.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/getting-started/quickstart.mdxdocs/integrations/claude.mdxdocs/integrations/codex.mdxdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsetconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexamples/code_review_agent/config.pyexamples/harbor/README.mdexamples/harbor/calculator/README.mdexamples/harbor/swebench/README.mdexamples/harbor/swebench/adapters/claude/fabric-adapter.jsonexamples/harbor/swebench/adapters/hermes/fabric-adapter.jsonexamples/notebooks/01_quickstart.ipynbpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/integrations/harbor/fabric_agent.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/environment-handle.schema.jsonschemas/run-plan.schema.jsonschemas/runtime-context.schema.jsonschemas/runtime-handle.schema.jsonscripts/generate_api_docs.shskills/nemo-fabric-integrate/SKILL.mdskills/nemo-fabric-integrate/references/config-mapping.mdtests/_utils/configs.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/e2e/test_claude.pytests/e2e/test_codex.pytests/e2e/test_deepagents.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_e2e.pytests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.jsontests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.pytests/integrations/test_harbor_runner.pytests/python/test_native_sdk.pytests/python/test_sdk_contract.pytests/python/test_typed_config.py
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)
crates/fabric-core/src/config.rs (1)
1304-1327: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftValidate every configured model role.
The compatibility check only inspects
default(or the sole model). If multiple roles are configured anddefaultexists, unsupportedbase_urlortemperaturevalues on other roles pass planning and can be silently ignored when those aliases are selected. Iterate over every configured role, or explicitly reject unsupported settings on non-selected roles.🤖 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 `@crates/fabric-core/src/config.rs` around lines 1304 - 1327, Update the model compatibility validation around selected_model to inspect every configured role, not only the default or sole model. Apply the existing base_url and temperature accepts checks to each entry in config.models, reporting the corresponding models.{role} field; preserve the existing multiple-role/no-default incompatible error.
🤖 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 `@crates/fabric-core/src/config.rs`:
- Around line 1304-1327: Update the model compatibility validation around
selected_model to inspect every configured role, not only the default or sole
model. Apply the existing base_url and temperature accepts checks to each entry
in config.models, reporting the corresponding models.{role} field; preserve the
existing multiple-role/no-default incompatible error.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: 41c8d3b4-74dd-4466-a44d-88e0ca9d53f1
📒 Files selected for processing (5)
crates/fabric-core/src/config.rsdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxschemas/adapter-descriptor.schema.jsonschemas/run-plan.schema.json
📜 Review details
🧰 Additional context used
📓 Path-based instructions (26)
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep package names, repository references, and build commands current in documentation and examples.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
In MDX files, use JSX comment delimiters (
{/*and*/}) for top-of-file comments, including SPDX headers; do not use HTML comments.Use
{/* ... */}delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.
**/*.mdx: For documentation-site changes, runjust docsto regenerate Python and Rust API references and validate Fern configuration.
MDX files must use the specified JSX-comment SPDX header format.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
**/*
📄 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:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxschemas/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsoncrates/fabric-core/src/config.rs
**/*.{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:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
docs/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Update Fern documentation under
docs/when public behavior, thenemo-fabricpackage, examples, or supported bindings change.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
docs/reference/api/**
📄 CodeRabbit inference engine (AGENTS.md)
Regenerate or update generated API references under
docs/reference/api/when the public API changes.Treat all files under
docs/reference/api/as generated output and do not modify them directly.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
**/*.{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.Update corresponding documentation when public behavior, adapters, examples, or workspace structure changes.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
Files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
{*.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:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
**/*.{rs,py,pyi,json,yaml,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Determine and update every affected public surface, including the CLI, PyO3 bindings, Python SDK, type stubs, schemas, and adapter contract, so they remain in parity.
Files:
schemas/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsoncrates/fabric-core/src/config.rs
**/*.{json,jsonschema}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Keep checked-in JSON Schema snapshots synchronized with public contract changes.
Files:
schemas/adapter-descriptor.schema.jsonschemas/run-plan.schema.json
**/*.{py,toml,lock,json,md,yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Keep package wiring, descriptors, dependencies, installation, catalogs, CI enumerations, documentation, examples, fixtures, and generated artifacts consistent with the adapter implementation.
Files:
schemas/adapter-descriptor.schema.jsonschemas/run-plan.schema.json
schemas/**/*
⚙️ CodeRabbit configuration file
schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.
Files:
schemas/adapter-descriptor.schema.jsonschemas/run-plan.schema.json
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Implement new runtime or binding behavior in the shared Rust core first.
**/*.rs: Format Rust code withcargo fmt --alland ensurecargo fmt --all -- --checkpasses.
Runcargo check --workspace --lockedwhen changing the Rust core, CLI, or native Python extension.
Rust files must use the specified Rust//SPDX header format.
Files:
crates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/config.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
**/*.{rs,py}: Usesnake_casefor functions and variables; usePascalCasefor Rust types and Python classes.
Run tests for every affected language surface; changes to the Rust core or public schemas require both Rust and Python test suites.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.
Files:
crates/fabric-core/src/config.rs
crates/fabric-core/**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes under
crates/fabric-coremust run both the Rust and Python test suites.
Files:
crates/fabric-core/src/config.rs
crates/fabric-core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Rust API reference changes, update Rust documentation comments under
crates/fabric-core/instead of editing generated reference output.If
crates/fabric-corechanges in a way exposed through Python, run both the Rust and Python suites.
Files:
crates/fabric-core/src/config.rs
**/*.{rs,rmeta}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Rust code changes, run
cargo fmt --all -- --checkandjust test-rust.
Files:
crates/fabric-core/src/config.rs
**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests injust test-rustpass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes underschemas/and generated API references.
Files:
crates/fabric-core/src/config.rs
**/*.{py,pyi,rs}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For Python SDK or PyO3 binding changes, use
python-tests, run focused pytest tests first, thenjust test-python; rebuild withjust build-pythonwhen native code or packaging changes.
Files:
crates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/config.rs
crates/fabric-core/src/**/*.rs
⚙️ CodeRabbit configuration file
crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.
Files:
crates/fabric-core/src/config.rs
🧠 Learnings (1)
📚 Learning: 2026-07-24T16:07:22.255Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 118
File: docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx:5-5
Timestamp: 2026-07-24T16:07:22.255Z
Learning: In this repo, files generated under `docs/reference/api/**` are NVIDIA NeMo Fabric API reference output. When reviewing changes to these generated pages, do not treat sidebar `position`/ordering updates as direct manual edits—these can be regenerated by running `just docs` after adding public types. Only flag substantive content changes that are not explained by generation.
Applied to files:
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
🔇 Additional comments (6)
crates/fabric-core/src/config.rs (2)
1270-1328: 🎯 Functional CorrectnessVerify provider-aware telemetry compatibility validation.
AdapterConfigField::Telemetryis part of the public contract, but this validator does not checkconfig.telemetry. Ensure native telemetry configuration is routed through an adapter support check and rejected when unsupported; relay-only telemetry should remain independently handled if that is the intended contract.
19-23: LGTM!Also applies to: 35-41, 70-94, 359-409, 478-480, 501-504, 535-537, 1083-1172, 1229-1234, 1250-1268, 1449-1449, 1461-1477, 1502-1521, 1540-1576, 1599-1600, 1631-1631, 1820-1822, 1866-1871, 1901-1908, 2086-2421
schemas/adapter-descriptor.schema.json (1)
3-70: LGTM!schemas/run-plan.schema.json (1)
3-70: LGTM!Also applies to: 450-456, 523-529, 565-565, 582-590, 643-649, 819-825, 1582-1590, 1701-1717, 1725-1741, 1756-1764
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx (1)
5-5: LGTM!Also applies to: 26-26, 51-55
docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx (1)
1-27: LGTM!Also applies to: 28-97, 98-234
586b0c8 to
23bcd05
Compare
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
139-145: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winHonor normalized environment credentials.
Both adapters reject credentials supplied through
FabricConfig.environment.env; consultcommon_utils.environment_env(payload)before falling back toos.environ, in both preflight and runtime model construction.
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py#L139-L145: use the normalized environment when checking the required credential.adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py#L173-L176: use the same lookup when constructing the chat model.adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py#L268-L272: use the normalized environment when loading the Hermes credential.🤖 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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py` around lines 139 - 145, Use common_utils.environment_env(payload) as the normalized credential source before falling back to os.environ. Update the deepagents preflight check around selected_model_config and resolve_api_key_env, the deepagents runtime chat-model construction, and the Hermes credential-loading logic; apply the same lookup consistently at adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py lines 139-145, 173-176, and adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py lines 268-272.
♻️ Duplicate comments (2)
adapters/claude/README.md (1)
37-42: 🎯 Functional Correctness | 🟡 MinorDocument
base_urlas required for NVIDIA models.This wording still implies a public endpoint fallback. For an NVIDIA model,
models.<role>.base_urlmust be configured explicitly; omission fails configuration. This reintroduces the previously reported issue.As per path instructions, documentation must be technically accurate against the current API.
🤖 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/claude/README.md` around lines 37 - 42, Update the NVIDIA model documentation to state that models.<role>.base_url is required and must be configured explicitly; remove any wording that suggests a public NVIDIA API Catalog endpoint is used as a fallback. Keep the existing description of endpoint translation and request-scoped environment behavior accurate.Source: Path instructions
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx (1)
22-24: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winDescribe toolsets as harness-defined.
AdapterConfigFielddistinguishes adapter-nativetools.blockedfrom harness-defined toolsets. The current wording conflates these policy surfaces.
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx#L22-L24: Update the Rust source documentation fortoolsets, then regenerate this page.docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx#L22-L24: Update theToolsPlansource documentation to use the same terminology.docs/reference/api/python-library-reference/nemo_fabric.models.md#L1624-L1633: UpdateFabricConfig.configure_toolsets()source documentation to match the contract.As per path instructions, regenerate generated API references from their source documentation. Based on learnings, use
just docsfor generated reference output.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx` around lines 22 - 24, Update the source documentation for Rust toolset configuration, including ToolsConfig and ToolsPlan, to describe toolsets as harness-defined and distinguish them from adapter-native tools.blocked policy; update FabricConfig.configure_toolsets() to use the same terminology. Apply changes in docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx (lines 22-24), docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx (lines 22-24), and docs/reference/api/python-library-reference/nemo_fabric.models.md (lines 1624-1633), then regenerate the API references with just docs.Sources: Path instructions, Learnings
🤖 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/claude/src/nemo_fabric_adapters/claude/adapter.py`:
- Around line 223-265: The child_environment flow must not silently replace
explicit normalized keys from common_utils.environment_env(payload) with
_model_environment values. Before applying the model-derived environment, detect
conflicts for ANTHROPIC_BASE_URL, ANTHROPIC_API_KEY, and ANTHROPIC_AUTH_TOKEN,
and raise AdapterConfigError identifying the conflicting field and supported
configuration alternatives; otherwise preserve the existing model-environment
behavior.
In `@adapters/common/src/nemo_fabric_adapters/common/utils.py`:
- Around line 92-95: Update environment_payload to check
fabric_config(payload).get("environment") after runtime_context(payload) and
before the legacy top-level payload.get("environment") fallback, preserving the
empty-dict default. Add a regression case covering a config-only environment and
verify its cwd resolves to the configured workspace path.
In `@adapters/deepagents/README.md`:
- Around line 49-52: Update the earlier Model and Authentication section to
document configuration through the selected models role rather than
models.default. Align its terminology and configuration paths with the mapping
that identifies model, provider, api_key_env, base_url, and temperature as
values supplied by the selected role.
In `@adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py`:
- Around line 243-246: Update the environment setup in the Hermes adapter to
assign TERMINAL_ENV to "local" unconditionally instead of using setdefault,
ensuring inherited values such as "docker" are overridden.
In `@crates/fabric-core/src/config.rs`:
- Around line 532-534: Update the documentation for the `env` field in
`FabricConfig` to warn that values are serialized into `RunPlan` and may appear
in schema dumps or logs. Recommend using `api_key_env`-style
environment-variable-name indirection for credentials instead of placing secrets
directly in `environment.env`.
In `@docs/reference/api/python-library-reference/nemo_fabric.models.md`:
- Line 4: Update the source description for the documented models to use the
full product name “NVIDIA NeMo Fabric” on first use, then regenerate the Python
library API reference so the generated documentation reflects the updated
description.
- Around line 1549-1550: Update the documentation sentence to replace “see” with
“refer to” and link descriptive anchor text to the normalized configuration
compatibility table in the rendered Python SDK documentation, rather than
referencing the repository path directly.
- Around line 1424-1484: Update the generated documentation for ToolsetConfig to
include field semantics for enabled and blocked: state that enabled=None
preserves the adapter default, an empty enabled sequence exposes no toolsets,
and describe how blocked affects toolsets. Regenerate the ToolsetConfig
reference page so these descriptions appear in the published API documentation.
In `@docs/sdk/python.mdx`:
- Around line 537-539: Separate request context from normalized FabricConfig
fields: in docs/sdk/python.mdx at lines 537-539, remove it from the portable
configuration list and describe it as request-scoped invocation data; make the
same update in skills/nemo-fabric-integrate/references/config-mapping.md at
lines 86-88. Preserve all other listed fields and guidance.
In `@skills/nemo-fabric-integrate/SKILL.md`:
- Around line 97-103: Update the job configuration mapping around ToolsConfig so
it no longer populates both tools.blocked and tools.toolsets indiscriminately.
Add adapter-specific mappings or conditionally populate only the policy
supported by the selected adapter, ensuring Claude and Deep Agents receive
toolsets without per-tool blocking while Hermes receives per-tool blocking
without toolsets.
---
Outside diff comments:
In `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py`:
- Around line 139-145: Use common_utils.environment_env(payload) as the
normalized credential source before falling back to os.environ. Update the
deepagents preflight check around selected_model_config and resolve_api_key_env,
the deepagents runtime chat-model construction, and the Hermes
credential-loading logic; apply the same lookup consistently at
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py lines
139-145, 173-176, and adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
lines 268-272.
---
Duplicate comments:
In `@adapters/claude/README.md`:
- Around line 37-42: Update the NVIDIA model documentation to state that
models.<role>.base_url is required and must be configured explicitly; remove any
wording that suggests a public NVIDIA API Catalog endpoint is used as a
fallback. Keep the existing description of endpoint translation and
request-scoped environment behavior accurate.
In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx`:
- Around line 22-24: Update the source documentation for Rust toolset
configuration, including ToolsConfig and ToolsPlan, to describe toolsets as
harness-defined and distinguish them from adapter-native tools.blocked policy;
update FabricConfig.configure_toolsets() to use the same terminology. Apply
changes in
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
(lines 22-24),
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
(lines 22-24), and
docs/reference/api/python-library-reference/nemo_fabric.models.md (lines
1624-1633), then regenerate the API references with just docs.
🪄 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: 3c4b4d63-617a-4916-9357-2bd0e593f0dd
📒 Files selected for processing (133)
README.mdadapters/README.mdadapters/claude/README.mdadapters/claude/fabric-adapter.jsonadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/README.mdadapters/codex/fabric-adapter.jsonadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/README.mdadapters/deepagents/fabric-adapter.jsonadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/README.mdadapters/hermes/fabric-adapter.jsonadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/codex/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/src/examples.rscrates/fabric-cli/src/presets.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/python/main.py.tmplcrates/fabric-cli/templates/rust/main.rs.tmplcrates/fabric-core/src/config.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/getting-started/quickstart.mdxdocs/integrations/claude.mdxdocs/integrations/codex.mdxdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsetconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexamples/code_review_agent/config.pyexamples/harbor/README.mdexamples/harbor/calculator/README.mdexamples/harbor/swebench/README.mdexamples/harbor/swebench/adapters/claude/fabric-adapter.jsonexamples/harbor/swebench/adapters/hermes/fabric-adapter.jsonexamples/notebooks/01_quickstart.ipynbpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/integrations/harbor/fabric_agent.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/environment-handle.schema.jsonschemas/run-plan.schema.jsonschemas/runtime-context.schema.jsonschemas/runtime-handle.schema.jsonscripts/generate_api_docs.shskills/nemo-fabric-integrate/SKILL.mdskills/nemo-fabric-integrate/references/config-mapping.mdtests/_utils/configs.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/e2e/test_claude.pytests/e2e/test_codex.pytests/e2e/test_deepagents.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_e2e.pytests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.jsontests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.pytests/integrations/test_harbor_runner.pytests/python/test_native_sdk.pytests/python/test_sdk_contract.pytests/python/test_typed_config.py
💤 Files with no reviewable changes (1)
- tests/python/test_typed_config.py
zhongxuanwang-nv
left a comment
There was a problem hiding this comment.
Used powerful AIs to help review, and I think it looks good to me!
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
…ze-adapter-config Signed-off-by: Ajay Thorve <athorve@nvidia.com> # Conflicts: # examples/harbor/swebench/README.md
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
…ze-adapter-config # Conflicts: # tests/e2e/test_hermes_e2e.py
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
721-742: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winReject removed
base_instructionsinstead of silently discarding it.Line 733 accepts
harness.settings.base_instructions, but Line 880 always sources the value frominstructions.system. Existing configurations therefore start without their system prompt. Raise a migration error or retain an explicit compatibility mapping, with a regression test.Proposed fix
def validate_runtime_payload(payload: dict[str, Any]) -> str: settings = _settings(payload) + if "base_instructions" in settings: + raise AdapterConfigError( + "codex_invalid_configuration", + "harness.settings.base_instructions is unsupported; use instructions.system", + ) _native_skill_paths(payload)🤖 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/src/nemo_fabric_adapters/codex/adapter.py` around lines 721 - 742, Update validate_runtime_payload to reject harness.settings.base_instructions with a clear migration error, or explicitly map it to the instructions.system value consumed later instead of discarding it. Ensure the chosen behavior is covered by a regression test, while preserving validation for the other optional settings.crates/fabric-cli/src/app.rs (1)
51-51: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse the Full Product Name in CLI Help
Change this to
Print the NVIDIA NeMo Fabric core version.This is the first user-facing product reference in this command definition.🤖 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 `@crates/fabric-cli/src/app.rs` at line 51, Update the doc comment describing the CLI version output to use the full product name “NVIDIA NeMo Fabric,” preserving the existing “core version” wording and capitalization.Source: Coding guidelines
🤖 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/hermes/fabric-adapter.json`:
- Around line 12-20: Remove models.temperature and instructions.system from
config.accepts in adapters/hermes/fabric-adapter.json so the allowlist only
advertises fields consumed by build_hermes_config. Update the corresponding
mapping claims in adapters/hermes/README.md to remove or correct those
unsupported fields; no mapping implementation is required.
In `@adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py`:
- Around line 206-211: Update _artifact_root so a configured runtime_context
artifacts root is resolved relative to common_utils.base_dir(payload) when it is
not absolute, then call resolve() on that path. Preserve absolute roots as-is
and retain the existing base_dir/artifacts fallback when no root is configured.
In `@crates/fabric-core/src/config.rs`:
- Around line 1301-1319: Update validate_capability_plan_compatibility to accept
the configured harness adapter ID as an argument, and pass
config.harness.adapter_id from its call site. Use that value instead of the
"unknown" fallback when descriptor is None, while preserving
descriptor.adapter_id when available.
In `@crates/fabric-core/src/runtime.rs`:
- Around line 910-915: Update the timeout handling in run_local_host_adapter to
reject timeout_seconds values less than or equal to zero before calling
Duration::try_from_secs_f64. Return the existing InvalidConfig error for these
values, while preserving the current conversion and error handling for positive,
finite durations.
In `@docs/reference/api/python-library-reference/nemo_fabric.models.md`:
- Around line 1865-1866: Update the source docstring for ToolsConfig.blocked to
state that it contains adapter-native tool names to deny, then regenerate the
API reference so the blocked row is populated. Do not edit the generated page
under docs/reference/api/ directly.
In `@examples/notebooks/02_variations.ipynb`:
- Around line 189-193: Update the preceding Markdown narrative in the notebook
to state that Hermes, Deep Agents, and Claude receive prompts through
instructions.system, matching the builder’s InstructionConfig usage. Retain the
existing distinction that Codex receives input differently, and verify the
adapter/API wording against the current repository or documentation.
In `@python/src/nemo_fabric/types.py`:
- Around line 231-239: Update the content field initialization in
InstructionConfig to call _required_text(content, "instruction content")
unconditionally, so empty strings and other invalid values are rejected
consistently with other required-text fields. Add a regression test in the
existing SDK contract tests verifying that InstructionConfig(content="") raises.
In `@tests/python/test_typed_config.py`:
- Line 147: Escape the dot in the pytest.raises match pattern for
runtime.max_turns so it is treated literally and satisfies RUF043. Update the
assertion around FabricConfigError without changing the expected error message
or test behavior.
---
Outside diff comments:
In `@adapters/codex/src/nemo_fabric_adapters/codex/adapter.py`:
- Around line 721-742: Update validate_runtime_payload to reject
harness.settings.base_instructions with a clear migration error, or explicitly
map it to the instructions.system value consumed later instead of discarding it.
Ensure the chosen behavior is covered by a regression test, while preserving
validation for the other optional settings.
In `@crates/fabric-cli/src/app.rs`:
- Line 51: Update the doc comment describing the CLI version output to use the
full product name “NVIDIA NeMo Fabric,” preserving the existing “core version”
wording and capitalization.
🪄 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: d392a307-4354-4f27-89e0-0b45c571e3c2
📒 Files selected for processing (175)
README.mdadapters/README.mdadapters/claude/README.mdadapters/claude/fabric-adapter.jsonadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/README.mdadapters/codex/fabric-adapter.jsonadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/relay_gateway.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/README.mdadapters/deepagents/fabric-adapter.jsonadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/README.mdadapters/hermes/fabric-adapter.jsonadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/codex/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/src/app.rscrates/fabric-cli/src/examples.rscrates/fabric-cli/src/presets.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/python/main.py.tmplcrates/fabric-cli/templates/rust/main.rs.tmplcrates/fabric-cli/tests/frontier_presets.rscrates/fabric-core/src/config.rscrates/fabric-core/src/doctor.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rscrates/fabric-python/src/lib.rsdocs/getting-started/quickstart.mdxdocs/integrations/harness/claude.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/constant-adapter-contract-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/enum-errorstage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/enum-runstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/fn-stop-runtime.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-artifactmanifest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-artifactref.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-errorinfo.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-fabricevent.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-invocationhandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimehandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimetelemetrycontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-telemetryref.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/fn-generate-all-schemas.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/fn-generate-schema-json.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/fn-write-schema-snapshots.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexamples/code_review_agent/config.pyexamples/harbor/README.mdexamples/harbor/calculator/README.mdexamples/harbor/swebench/README.mdexamples/harbor/swebench/adapters/claude/fabric-adapter.jsonexamples/harbor/swebench/adapters/hermes/fabric-adapter.jsonexamples/notebooks/01_quickstart.ipynbexamples/notebooks/02_variations.ipynbpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/client.pypython/src/nemo_fabric/integrations/harbor/fabric_agent.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/environment-handle.schema.jsonschemas/run-plan.schema.jsonschemas/runtime-context.schema.jsonschemas/runtime-handle.schema.jsonskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdskills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.mdtests/_utils/configs.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_adapters_common_relay_gateway.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/adapters/test_hermes_config_builder.pytests/e2e/test_claude.pytests/e2e/test_codex.pytests/e2e/test_deepagents.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_e2e.pytests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.jsontests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.pytests/integrations/test_harbor_runner.pytests/python/test_native_sdk.pytests/python/test_notebook_examples.pytests/python/test_sdk_contract.pytests/python/test_typed_config.py
💤 Files with no reviewable changes (1)
- tests/adapters/test_hermes_config_builder.py
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
|
Addressed the two CodeRabbit findings that were reported only in the review body:
Validation on commit
|
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 (3)
crates/fabric-core/src/runtime.rs (1)
570-583: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftRevalidate scalar adapter compatibility at the runtime boundary.
This checks only unsupported capability routes. A deserialized
RunPlanwith, for example, Codex plusruntime.max_turnshas no unsupported route and bypasses the scalarAdapterConfigSupport.acceptscheck performed during planning. Reuse or extract the config compatibility validator before start/invoke so untrusted plans remain fail-closed.🤖 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 `@crates/fabric-core/src/runtime.rs` around lines 570 - 583, Update validate_adapter_compatibility to also validate the plan’s scalar adapter configuration using the existing AdapterConfigSupport.accepts logic, not only unsupported capability routes. Reuse or extract the planner’s compatibility validator and invoke it at the runtime start/invoke boundary so deserialized plans such as Codex with runtime.max_turns are rejected fail-closed.crates/fabric-core/src/config.rs (1)
1114-1158: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winAlign the published schema with config validation.
validate_config()rejects whitespace-onlyinstructions.system.contentand blankenvironment.envkeys, butschemas/agent.schema.jsonandschemas/run-plan.schema.jsonstill accept both. Add matching schema constraints and regenerate the snapshots so schema-valid configs don't fail in planning.🤖 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 `@crates/fabric-core/src/config.rs` around lines 1114 - 1158, Update schemas/agent.schema.json and schemas/run-plan.schema.json to reject whitespace-only instructions.system.content and blank environment.env property names, matching validate_config(). Add the appropriate non-empty/string and property-name constraints, then regenerate the corresponding schema snapshots without changing unrelated validation behavior.Source: Coding guidelines
python/src/nemo_fabric/models.py (1)
134-139: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winKeep
max_turnswithin the Rustu32range across both Python validation layers.Both validators accept any positive Python integer, while the Rust core accepts only 1 through 4,294,967,295. Reject larger values before serialization and add boundary tests.
python/src/nemo_fabric/models.py#L134-L139: add an upper bound of2**32 - 1to the public field.python/src/nemo_fabric/types.py#L312-L330: reject values above the same bound in_RuntimeConfig.🤖 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/src/nemo_fabric/models.py` around lines 134 - 139, Restrict max_turns to the Rust u32 range in both validators: add an upper bound of 2**32 - 1 to the public max_turns field in python/src/nemo_fabric/models.py:134-139 and enforce the same maximum in _RuntimeConfig in python/src/nemo_fabric/types.py:312-330. Add boundary tests covering the maximum accepted value and values above it.Source: Coding guidelines
🤖 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 `@crates/fabric-core/src/config.rs`:
- Around line 1114-1158: Update schemas/agent.schema.json and
schemas/run-plan.schema.json to reject whitespace-only
instructions.system.content and blank environment.env property names, matching
validate_config(). Add the appropriate non-empty/string and property-name
constraints, then regenerate the corresponding schema snapshots without changing
unrelated validation behavior.
In `@crates/fabric-core/src/runtime.rs`:
- Around line 570-583: Update validate_adapter_compatibility to also validate
the plan’s scalar adapter configuration using the existing
AdapterConfigSupport.accepts logic, not only unsupported capability routes.
Reuse or extract the planner’s compatibility validator and invoke it at the
runtime start/invoke boundary so deserialized plans such as Codex with
runtime.max_turns are rejected fail-closed.
In `@python/src/nemo_fabric/models.py`:
- Around line 134-139: Restrict max_turns to the Rust u32 range in both
validators: add an upper bound of 2**32 - 1 to the public max_turns field in
python/src/nemo_fabric/models.py:134-139 and enforce the same maximum in
_RuntimeConfig in python/src/nemo_fabric/types.py:312-330. Add boundary tests
covering the maximum accepted value and values above it.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: 71b003d4-b2df-4a6f-8bd8-ad53f22b0cde
📒 Files selected for processing (16)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/src/app.rscrates/fabric-core/src/config.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.mdexamples/notebooks/02_variations.ipynbpython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/agent.schema.jsonschemas/run-plan.schema.jsontests/adapters/test_hermes_adapter.pytests/python/test_sdk_contract.pytests/python/test_typed_config.py
💤 Files with no reviewable changes (1)
- adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
📜 Review details
⏰ Context from checks skipped due to timeout. (10)
- GitHub Check: Preview docs
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.12, linux-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Test (Python 3.12, macos-arm64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.14, macos-arm64)
- GitHub Check: Test (Python 3.11, macos-arm64)
- GitHub Check: Test (Python 3.13, macos-arm64)
🧰 Additional context used
📓 Path-based instructions (40)
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Implement new runtime or binding behavior in the shared Rust core first.
**/*.rs: Format Rust code withcargo fmt --all; Rust formatting checks must pass withcargo fmt --all -- --check.
Rust workspace changes must passcargo check --workspace --locked.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/config.rs
**/*.{rs,py,pyi,json,yaml,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Determine and update every affected public surface, including the CLI, PyO3 bindings, Python SDK, type stubs, schemas, and adapter contract, so they remain in parity.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rsschemas/agent.schema.jsontests/python/test_typed_config.pyschemas/run-plan.schema.jsontests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*
📄 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:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rsexamples/notebooks/02_variations.ipynbdocs/integrations/harness/codex.mdxschemas/agent.schema.jsontests/python/test_typed_config.pydocs/reference/api/python-library-reference/nemo_fabric.models.mdschemas/run-plan.schema.jsontests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/config.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
**/*.{rs,py}: When changing the Rust core or public schemas, run both the Rust and Python test suites.
When adding functionality, include tests in the corresponding Rust crate or the relevant area undertests/.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rstests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
crates/fabric-core/**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes under
crates/fabric-coremust run both the Rust and Python test suites.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/config.rs
crates/fabric-core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Rust API reference changes, update Rust documentation comments under
crates/fabric-core/instead of editing generated reference output.If
crates/fabric-corechanges in a way exposed through Python, run both the Rust and Python suites.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/config.rs
**/*.{rs,rmeta}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Rust code changes, run
cargo fmt --all -- --checkandjust test-rust.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/config.rs
**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests injust test-rustpass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes underschemas/and generated API references.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rstests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*.{py,pyi,rs}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For Python SDK or PyO3 binding changes, use
python-tests, run focused pytest tests first, thenjust test-python; rebuild withjust build-pythonwhen native code or packaging changes.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rstests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rstests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rstests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*.{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:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rsdocs/integrations/harness/codex.mdxtests/python/test_typed_config.pydocs/reference/api/python-library-reference/nemo_fabric.models.mdtests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
**/*.{py,rs}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{py,rs}: Keep native Python binding declarations synchronized with their Rust implementations.
Usesnake_casefor functions and variables; usePascalCasefor Rust types and Python classes.
Files:
crates/fabric-core/src/schema.rscrates/fabric-cli/src/app.rstests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pycrates/fabric-core/src/runtime.rstests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-core/src/config.rs
crates/fabric-core/src/**/*.rs
⚙️ CodeRabbit configuration file
crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/config.rs
{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:
examples/notebooks/02_variations.ipynbadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
{*.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:
examples/notebooks/02_variations.ipynbdocs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep package names, repository references, and build commands current in documentation and examples.
Files:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.
Files:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
In MDX files, use JSX comment delimiters (
{/*and*/}) for top-of-file comments, including SPDX headers; do not use HTML comments.Use
{/* ... */}delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.
Files:
docs/integrations/harness/codex.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.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:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
docs/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Update Fern documentation under
docs/when public behavior, thenemo-fabricpackage, examples, or supported bindings change.
Files:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.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:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant documentation when changes affect public behavior, adapters, examples, or workspace structure.
Files:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.
Files:
docs/integrations/harness/codex.mdxdocs/reference/api/python-library-reference/nemo_fabric.models.md
**/*.{json,jsonschema}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Public contract changes must keep checked-in JSON Schema snapshots synchronized.
Files:
schemas/agent.schema.jsonschemas/run-plan.schema.json
schemas/**/*
⚙️ CodeRabbit configuration file
schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.
Files:
schemas/agent.schema.jsonschemas/run-plan.schema.json
**/*.{py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Python code or a Python-facing adapter changes, run
just test-python.
Files:
tests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pytests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
tests/**/*.py
📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)
tests/**/*.py: Use Pytest to run Python tests.
Do not add@pytest.mark.asyncioto tests; async tests are automatically detected and run by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorunittest.mock.AsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files inconftest.py.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a function named<fixture_name>_fixture; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused or it does not return a value.
Use the autouserestore_environ_fixturefromtests/conftest.pyto restore environment variables; modify variables withos.environand do not usemonkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
Files:
tests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pytests/python/test_sdk_contract.py
**/*.py
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use type annotations for public Python APIs.
Files:
tests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pytests/python/test_sdk_contract.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
{tests/**,python/tests/**}
⚙️ CodeRabbit configuration file
{tests/**,python/tests/**}: Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.
Files:
tests/python/test_typed_config.pytests/adapters/test_hermes_adapter.pytests/python/test_sdk_contract.py
**/*.{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:
docs/reference/api/python-library-reference/nemo_fabric.models.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:
docs/reference/api/python-library-reference/nemo_fabric.models.md
docs/reference/api/**
📄 CodeRabbit inference engine (AGENTS.md)
Regenerate or update generated API references under
docs/reference/api/when the public API changes.Treat all files under
docs/reference/api/as generated output and do not modify them directly.
Files:
docs/reference/api/python-library-reference/nemo_fabric.models.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:
docs/reference/api/python-library-reference/nemo_fabric.models.md
tests/adapters/**/*.py
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
tests/adapters/**/*.py: If an adapter or integration changes, run its focused tests.
For adapter behavior changes, run focused adapter tests undertests/adapters, then runjust test-python.
Files:
tests/adapters/test_hermes_adapter.py
python/src/nemo_fabric/**
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Ensure the editable maturin build continues to produce the native extension at
nemo_fabric._native, with generated artifacts placed where downstream consumers expect.
Files:
python/src/nemo_fabric/models.pypython/src/nemo_fabric/types.py
python/src/nemo_fabric/**/*.py
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Python API reference changes, update source docstrings under
python/src/nemo_fabric/instead of editing generated reference output.
Files:
python/src/nemo_fabric/models.pypython/src/nemo_fabric/types.py
python/src/nemo_fabric/**/*
⚙️ CodeRabbit configuration file
python/src/nemo_fabric/**/*: Review Python SDK changes for typed API consistency, import-time dependency neutrality, async/session behavior, and parity with the native extension.
Stubs and runtime implementations should stay aligned.
Files:
python/src/nemo_fabric/models.pypython/src/nemo_fabric/types.py
🧠 Learnings (2)
📚 Learning: 2026-06-28T04:03:32.877Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 26
File: python/tests/smoke_typed_config.py:163-177
Timestamp: 2026-06-28T04:03:32.877Z
Learning: In NVIDIA NeMo Fabric Python SDK serialization of `RuntimeCapabilities` (to satisfy the “parity contract” with Rust core and the CLI), do not emit metadata keys when the corresponding metadata is absent. Instead, omit those fields entirely so the produced JSON matches the Rust/CLI output (e.g., avoid `null`, empty objects, or placeholder metadata). During review, verify the serializer/builders follow this omission rule and that Python outputs/parity tests reflect the same shape.
Applied to files:
python/src/nemo_fabric/models.pypython/src/nemo_fabric/types.py
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.
Applied to files:
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
🪛 Ruff (0.16.0)
python/src/nemo_fabric/models.py
[warning] 118-118: Avoid specifying long messages outside the exception class
(TRY003)
🔇 Additional comments (15)
crates/fabric-core/src/config.rs (1)
74-83: LGTM!Also applies to: 377-418, 490-514, 555-555, 1973-1978, 2159-2473
schemas/agent.schema.json (1)
256-262: LGTM!Also applies to: 942-1043
schemas/run-plan.schema.json (1)
3-73: LGTM!Also applies to: 331-377, 513-519, 553-664, 852-858, 1595-1635, 1738-1783
crates/fabric-core/src/runtime.rs (1)
247-247: LGTM!Also applies to: 472-537, 661-693, 910-925, 2502-2502, 2537-2545, 2579-2594, 2754-2771
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)
206-214: LGTM!Also applies to: 242-347, 372-405, 551-560
tests/python/test_sdk_contract.py (1)
253-263: LGTM!Also applies to: 274-296
tests/python/test_typed_config.py (1)
66-80: LGTM!Also applies to: 135-169
tests/adapters/test_hermes_adapter.py (1)
495-501: LGTM!Also applies to: 565-663
crates/fabric-core/src/schema.rs (1)
219-222: LGTM!crates/fabric-cli/src/app.rs (1)
8-10: LGTM!Also applies to: 51-51, 242-245
examples/notebooks/02_variations.ipynb (1)
107-108: LGTM!Also applies to: 157-159, 190-194, 208-214, 225-226
docs/integrations/harness/codex.mdx (1)
33-35: LGTM!Also applies to: 73-84, 127-145
docs/reference/api/python-library-reference/nemo_fabric.models.md (1)
11-11: LGTM!Also applies to: 193-333, 367-367, 380-381, 456-456, 521-521, 535-535, 1865-1866, 1928-1929, 1943-1949, 2019-2019
python/src/nemo_fabric/models.py (1)
4-4: LGTM!Also applies to: 27-27, 108-119, 168-175, 197-236, 321-323, 435-437, 450-452, 483-509, 512-532, 597-600, 634-646
python/src/nemo_fabric/types.py (1)
217-276: LGTM!Also applies to: 278-301, 342-343, 355-377, 387-393, 409-409, 466-512, 673-676, 693-693, 712-712, 728-732, 747-747, 779-779, 865-865
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
|
Addressed the three final outside-diff findings in
Validation: |
|
/merge |
#### 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 #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 #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: #105
#### 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 #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 #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: #105 Signed-off-by: Zhongxuan (Daniel) Wang <daniewang@nvidia.com>
Overview
Replace the pre-0.1 portable adapter configuration with one typed, fail-closed
FabricConfigcontract across Claude, Codex, Deep Agents, and Hermes Agent.This change:
instructions.system=InstructionConfig(content=..., mode="replace");runtime.max_turns;ToolsConfig(enabled=..., blocked=...);selected adapter descriptor;
plan(...), runtime start, andrun(...)strict while allowingdoctor(...)to return structured failed checks for all detectedincompatibilities;
network routing; and
descriptors, Harbor integration, examples, schemas, consumer skill, adapter
documentation, and generated API references.
The v0.1 semantics are deliberate:
InstructionConfig.modesupports onlyreplace.runtime.max_turns=Nonepreserves the adapter-native default and remainsportable. An explicit value requires adapter support; Claude and Hermes map
it, while Codex and Deep Agents reject it.
tools.enabled=Nonepreserves the harness default;tools.enabled=[]disables every executable tool. A name cannot be both enabled and blocked.
FabricConfigvariants when harnesses name the same logical tool differently.it because no complete SDK-native mapping exists yet.
0.1 release.
Custom Claude, Codex, and non-native Deep Agents providers must set both
models.<role>.api_key_envandmodels.<role>.base_url. Native Anthropic andOpenAI authentication remains available. NeMo Fabric does not infer an NVIDIA
endpoint or credential in shared adapter code; maintained NVIDIA presets supply
those values explicitly.
Compatibility
Coremeans NeMo Fabric owns the behavior and applies it uniformly.Yesmeans the adapter translates and enforces the normalized field.
Nomeans anexplicitly configured value fails planning instead of being ignored.
FabricConfigfieldschema_versionmetadata.name,.descriptionharness.adapter_id,.resolutionharness.settingsmodels.<role>.providermodels.<role>.modelmodels.<role>.api_key_envmodels.<role>.base_urlmodels.<role>.temperaturemodels.<role>.settings.<key>instructions.systemruntime.input_schema,.output_schemaruntime.artifacts,.timeout_secondsruntime.max_turnsenvironment.provider,.control_location,.ownershipenvironment.workspace,.artifacts,.envenvironment.connection,.metadata,.settingstools.enabled,.blockedskills.pathstelemetry.providers.relaytelemetry.providers.nativerelay.project,.output_dir,.observabilityrelay.components,.policyBreaking changes
This intentionally replaces unreleased pre-0.1 names rather than preserving
aliases:
system_promptbecomesinstructions.system.max_turnsbecomesruntime.max_turns.ToolsetConfigandtools.toolsetsare removed;ToolsConfigownsenabledandblockeddirectly.fabric_system_instructionandfabric_enabled_tools.Validation
just test-rust— passed: 22 CLI tests, 1 frontier preset test, 36 coretests, and Rust doc tests.
just test-python— passed after merging currentrelease/0.1: 501 passed,15 skipped.
cargo check -p fabric-python --locked— passed.just docs— generated Python and Rust references, Fern validation, andstrict broken-link validation passed. The authenticated redirect check was
skipped because
FERN_TOKENis not available locally.checks passed for the relevant staged changes.
cargo fmt --all -- --checkandgit diff --check— passed.Where should the reviewer start?
Start with
crates/fabric-core/src/config.rsfor the public shape, descriptorcompatibility, tool routing, and strict planning behavior. Then review
crates/fabric-core/src/doctor.rsfor diagnostic planning,python/src/nemo_fabric/models.pyfor the SDK surface, and the Claude and DeepAgents adapters for execution-time tool enforcement. The canonical adapter
matrix is in
adapters/README.md; the consumer contract is indocs/sdk/python.mdx.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Closes FABRIC-131
Relates to FABRIC-64
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
instructions.system,runtime.timeout_seconds/runtime.max_turns, modelbase_url, harness-visibleenvironment.env, and adapter-native toolenabled/blockedpolicy.doctordiagnostics and support for custom provider endpoints via relay base-URL configuration.