Skip to content

feat: validate adapter model providers - #118

Open
AjayThorve wants to merge 1 commit into
NVIDIA:mainfrom
AjayThorve:feat/validate-model-compatibility
Open

feat: validate adapter model providers#118
AjayThorve wants to merge 1 commit into
NVIDIA:mainfrom
AjayThorve:feat/validate-model-compatibility

Conversation

@AjayThorve

@AjayThorve AjayThorve commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Overview

Add fail-fast model/provider compatibility checks to planning and doctor(...) on top of the typed AgentConfig and descriptor-owned schema contract now on main.

This refresh replaces the earlier config.native_model_providers list with an optional descriptor-owned model_schema, reusing the existing self-contained JSON Schema validation path. Claude declares anthropic as its native provider and Codex declares openai. Other provider identifiers remain supported when the model supplies both base_url and api_key_env, and the endpoint implements the protocol expected by the adapter.

The schema is applied to every configured model role, not only the selected/default role. It also closes ModelConfig.settings for Claude and Codex, so undeclared model-scoped settings fail planning and appear as field-specific doctor(...) checks. An adapter that omits model_schema preserves its existing dynamic-provider behavior, including Deep Agents and Hermes.

This is an additive descriptor change with intentionally stricter preflight behavior. It preserves the contract ownership boundary: Fabric validates static model shape and adapter compatibility before startup, while adapters retain environment-dependent checks such as credential validity, endpoint reachability, and model availability. NVIDIA provider defaults remain outside FABRIC-64 and are tracked separately by FABRIC-93.

Details

  • Add optional AdapterDescriptor::model_schema and validate it as a self-contained object schema when descriptors are loaded.
  • Validate every normalized ModelConfig against the selected descriptor while leaving separately validated extensions out of the model-schema payload.
  • Publish matching Claude and Codex schemas in repository, packaged CLI, and Harbor descriptor copies.
  • Preserve native-provider behavior and require base_url plus api_key_env for explicit custom-provider paths.
  • Reject undeclared Claude/Codex ModelConfig.settings before adapter startup.
  • Regenerate committed JSON Schema and Rust API reference snapshots.
  • Update adapter-contract, SDK, maintainer-skill, and consumer-skill guidance.
  • Cover Rust-core behavior, Python SDK planning/doctor parity, descriptor copies, generated schemas, and unchanged dynamic-provider behavior.

No dependencies or lockfiles change.

Validation

  • cargo fmt --all -- --check — passed.
  • cargo check -p fabric-python --locked — passed.
  • just test-rust — 96 workspace tests passed, plus doc-tests.
  • just test-python — 712 passed, 16 skipped.
  • cargo run -p nemo-fabric-core --example generate-schemas --locked -- schemas — generated snapshots match the Rust contract.
  • just docs — API generation and Fern validation passed; authenticated redirect validation was unavailable locally.
  • uv run --with pre-commit pre-commit run --all-files — passed, including attribution and license-diff hooks.
  • git diff --check — passed.
  • main integration check (9f0881e6) — conflict-free; schema regeneration produced no diff, and just test-rust, just test-python, and cargo check -p fabric-python --locked passed on the merged tree (96 Rust tests; 719 Python tests passed, 16 skipped).

Where should the reviewer start?

Start with AdapterDescriptor::model_schema and adapter_config_compatibility_issues(...) in crates/fabric-core/src/config.rs. Then review the Claude/Codex descriptor schemas and the planning/doctor cases in tests/python/test_typed_config.py.

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

Summary by CodeRabbit

  • New Features

    • Added model configuration validation for Claude and Codex adapters.
    • Custom model providers now require an explicit endpoint and API-key environment variable.
    • Unsupported model settings and unknown configuration fields are rejected during planning.
    • Configuration issues are reported by doctor before adapter startup.
  • Documentation

    • Updated adapter compatibility, configuration, descriptor, and SDK documentation with the new validation and provider requirements.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Claude and Codex descriptors now publish model_schema definitions. Fabric Core validates normalized model roles during planning and doctor(...). Tests and documentation cover native providers, custom provider connection fields, and closed model settings.

Changes

Adapter model-provider compatibility

Layer / File(s) Summary
Descriptor model-schema contracts
adapters/*/fabric-adapter.json, crates/fabric-cli/assets/adapters/*, schemas/*, crates/fabric-core/src/schema.rs, tests/adapters/*
Claude and Codex descriptors define typed model fields, provider-specific connection requirements, and closed settings objects. Descriptor schemas and tests expose the new contract.
Core planning validation
crates/fabric-core/src/config.rs, tests/python/test_typed_config.py, tests/python/test_native_sdk.py
Fabric Core validates each configured model against model_schema, reports role-specific errors, preserves dynamic behavior without a schema, and rejects undeclared settings.
Codex runtime contract updates
tests/adapters/test_codex_adapter.py
Codex tests update runtime environment, binary selection, NVIDIA endpoints, telemetry, timeout placement, capability mappings, descriptor fields, and removed harness settings.
Compatibility documentation and guidance
adapters/README.md, docs/adapter-contract/*, docs/sdk/python.mdx, docs/reference/*, skills/*
Documentation defines model-schema scope, native and custom provider requirements, planning validation, and doctor(...) diagnostics.

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

Sequence Diagram(s)

sequenceDiagram
  participant FabricConfig
  participant AdapterDescriptor
  participant FabricCore
  participant PlanOrDoctor
  FabricConfig->>AdapterDescriptor: select adapter and model roles
  AdapterDescriptor->>FabricCore: provide model_schema
  FabricCore->>PlanOrDoctor: validate normalized model entries
  PlanOrDoctor-->>FabricConfig: return plan or doctor diagnostics
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 28.74% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title follows Conventional Commits format, uses an allowed lowercase type, clearly describes the change, and is under 72 characters.
Description check ✅ Passed The description includes all required sections, explains the implementation and validation, identifies review entry points, and includes related issues and confirmations.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 9

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)

328-334: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

state_dir() is not scoped by runtime ID, unlike Hermes's equivalent fix.

This function's own removal message for harness.settings.state_dir claims state is "derived from the Fabric artifact root and runtime ID," and the README says the same, but the returned path never includes the runtime ID. Runtimes sharing an artifact root/base_dir will share the same .fabric/deepagents directory, colliding on LangGraph checkpointer/session state across concurrent Fabric runtimes. Hermes's equivalent code in this same PR (adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py:264-269) correctly wraps its home directory with common_utils.runtime_state_directory(...).

🐛 Proposed fix
 def state_dir(payload: dict[str, Any]) -> Path:
     base_dir = Path(common_utils.base_dir(payload)).resolve()
     artifacts = common_utils.runtime_context(payload).get("artifacts") or {}
     root = artifacts.get("root") or os.environ.get("FABRIC_ARTIFACTS")
-    if root:
-        return Path(str(root)).resolve() / ".fabric" / "deepagents"
-    return base_dir / "artifacts" / "deepagents" / ".fabric"
+    if root:
+        base = Path(str(root)).resolve() / ".fabric" / "deepagents"
+    else:
+        base = base_dir / "artifacts" / "deepagents" / ".fabric"
+    return common_utils.runtime_state_directory(base, 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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py` around
lines 328 - 334, Update state_dir() to scope the resolved Fabric artifact or
base directory through common_utils.runtime_state_directory(...), matching
Hermes's equivalent implementation, before appending the deepagents state path.
Ensure the returned path includes the current runtime ID while preserving the
existing artifact-root and fallback-directory selection.
🤖 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/src/nemo_fabric_adapters/hermes/adapter.py`:
- Around line 47-51: Update the Hermes adapter’s terminal backend handling so
the configured terminal_backend is honored throughout, including TERMINAL_ENV
and build_hermes_config()["terminal"]["backend"], or revise
REMOVED_SETTING_FIELDS to explicitly document that only local execution is
supported. Keep validation and runtime configuration consistent so accepted
settings are not silently overridden.

In `@crates/fabric-core/src/runtime.rs`:
- Around line 577-581: The AdapterCompatibility error path in resolve_run_plan
currently reports route.name directly for unsupported MCP routes; map the field
through the existing CapabilityKind-to-field logic used by
validate_capability_plan_compatibility so MCP routes emit the canonical
mcp.servers.{name} path. Preserve the existing adapter_id and reason handling.

In `@docs/reference/api/python-library-reference/nemo_fabric.models.md`:
- Around line 1364-1365: Regenerate the API reference documentation so the
ToolsetConfig heading has the required blank lines before and after it,
resolving markdownlint MD022. Do not edit the generated file under
docs/reference/api/ directly; update the source or generation inputs and run the
established reference-generation process.

In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx`:
- Line 5: Regenerate the generated API reference output rather than editing it
directly: update the relevant source or generator for the position changes, then
run just docs. Apply the regeneration to
docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx:5-5
and
docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx:5-5.

In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx`:
- Line 20: Update the Rust documentation source descriptions to use the
product-qualified naming: in
docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx:20,
use “NVIDIA NeMo Fabric” for the first mention; in
docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx:58,
use “NeMo Fabric” thereafter. Regenerate the API references after updating the
source.

In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx`:
- Line 5: Do not edit the generated AdapterDescriptor API reference directly;
apply the position ordering change in the source documentation or generator that
produces it, then regenerate the affected docs/reference/api output.

In `@examples/harbor/README.md`:
- Around line 80-88: Update the FabricConfig field column in the README table to
use the exact paths models.default.base_url, system_prompt, max_turns,
runtime.timeout_seconds, environment.env, tools.toolsets.enabled,
tools.toolsets.blocked, and harness.settings; remove the duplicate
fabric_blocked_tools row while preserving the corresponding descriptions and
command syntax.

In `@schemas/agent.schema.json`:
- Around line 993-1001: Update the Rust source contract for max_turns to require
values greater than zero by setting its minimum to 1, then regenerate
schemas/agent.schema.json so the snapshot matches. Add or update the
schema-parity assertion to verify max_turns rejects 0 and accepts valid positive
values.

In `@schemas/run-plan.schema.json`:
- Around line 1631-1637: Update the Rust/Python contract for timeout_seconds to
reject negative values while preserving nullability, then regenerate the
schemas/run-plan.schema.json snapshot. Add invalid-input coverage demonstrating
that negative invocation timeouts are rejected, using the existing
timeout_seconds contract and validation tests.

---

Outside diff comments:
In `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py`:
- Around line 328-334: Update state_dir() to scope the resolved Fabric artifact
or base directory through common_utils.runtime_state_directory(...), matching
Hermes's equivalent implementation, before appending the deepagents state path.
Ensure the returned path includes the current runtime ID while preserving the
existing artifact-root and fallback-directory selection.
🪄 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: 0c7e7cf5-75a4-4ac5-ab0c-593c7e93f734

📥 Commits

Reviewing files that changed from the base of the PR and between c8bc400 and 7d8db50.

📒 Files selected for processing (144)
  • README.md
  • adapters/README.md
  • adapters/claude/README.md
  • adapters/claude/fabric-adapter.json
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/README.md
  • adapters/codex/fabric-adapter.json
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • adapters/deepagents/README.md
  • adapters/deepagents/fabric-adapter.json
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/fabric-adapter.json
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • crates/fabric-cli/src/scaffold.rs
  • crates/fabric-cli/templates/python/main.py.tmpl
  • crates/fabric-cli/templates/rust/main.rs.tmpl
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • docs/getting-started/quickstart.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adaptersettingtype.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptermodelconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptersettingschema.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofendpointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsetconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • examples/code_review_agent/config.py
  • examples/harbor/README.md
  • examples/harbor/calculator/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • examples/notebooks/01_quickstart.ipynb
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/integrations/harbor/fabric_agent.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/types.py
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/agent.schema.json
  • schemas/environment-handle.schema.json
  • schemas/run-plan.schema.json
  • schemas/runtime-context.schema.json
  • schemas/runtime-handle.schema.json
  • skills/nemo-fabric-integrate/SKILL.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • tests/_utils/configs.py
  • tests/adapters/test_adapaters_common_utils.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_claude.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_deepagents.py
  • tests/e2e/test_hermes_config_mapping.py
  • tests/e2e/test_hermes_e2e.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/integrations/test_harbor_runner.py
  • tests/python/test_native_sdk.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_typed_config.py

Comment thread adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py Outdated
Comment thread crates/fabric-core/src/runtime.rs
Comment thread docs/reference/api/python-library-reference/nemo_fabric.models.md Outdated
Comment thread examples/harbor/README.md Outdated
Comment thread schemas/agent.schema.json Outdated
Comment thread schemas/run-plan.schema.json
@AjayThorve
AjayThorve force-pushed the feat/validate-model-compatibility branch from 7d8db50 to 08fa625 Compare July 24, 2026 16:05
@AjayThorve
AjayThorve force-pushed the feat/validate-model-compatibility branch from 08fa625 to de79c72 Compare July 24, 2026 16:08

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
docs/reference/api/python-library-reference/nemo_fabric.client.md (1)

4-4: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the full product name on first use.

The new description says “with NeMo Fabric” without the required first-use “NVIDIA” qualifier. Update the source docstring or generator to emit “with NVIDIA NeMo Fabric,” then regenerate this page. As per coding guidelines, user-facing prose must use “NVIDIA NeMo Fabric” on first use and “NeMo Fabric” thereafter. As per path instructions, generated API references must be regenerated rather than edited directly.

🤖 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.client.md` at line 4,
Update the source docstring or generator responsible for the API page
description to use “with NVIDIA NeMo Fabric” on first use, then regenerate the
generated reference page rather than editing it directly; retain “NeMo Fabric”
for subsequent mentions.

Sources: Coding guidelines, Path instructions

docs/sdk/python.mdx (1)

178-182: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use NeMo Fabric for the product name.

The new definition says “Fabric owns the behavior,” using standalone capitalized “Fabric” for the product. Change it to “NeMo Fabric owns the behavior.” As per path instructions, user-facing prose must use “NVIDIA NeMo Fabric” on first use and “NeMo Fabric” thereafter, and must not use standalone capitalized “Fabric” for the product.

🤖 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/sdk/python.mdx` around lines 178 - 182, Update the definition containing
“Fabric owns the behavior” to use “NeMo Fabric owns the behavior,” preserving
the rest of the documentation text and terminology.

Source: Path instructions

docs/reference/api/python-library-reference/nemo_fabric.models.md (3)

1385-1445: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Document the ToolsetConfig fields and semantics.

The new class section exposes inherited helpers but does not document enabled or blocked, including the important None versus empty-list behavior and overlap validation. Add this to the source model documentation, then regenerate the API reference.

As per path instructions, files under docs/reference/api/ are generated output and must not be edited directly.

🤖 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 1385 - 1445, Document the enabled and blocked fields and their semantics
in the source definition of ToolsetConfig, including the distinction between
None and empty lists and the validation behavior for overlapping entries. Then
regenerate the API reference so the generated ToolsetConfig section reflects
this documentation; do not edit docs/reference/api files directly.

Source: Path instructions


4-4: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use NVIDIA NeMo Fabric on first use across generated API references.

  • docs/reference/api/python-library-reference/nemo_fabric.models.md#L4-L4: update the new frontmatter description to use the full product name.
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx#L4-L4: update the MDX description to use the full product name.
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx#L28-L28: update the generated body description consistently.

As per path instructions, update the source documentation and regenerate these files rather than editing generated output directly.

🤖 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` at line 4,
Update the source documentation descriptions to use “NVIDIA NeMo Fabric” on
first use, then regenerate the affected outputs. Apply this to
docs/reference/api/python-library-reference/nemo_fabric.models.md lines 4-4,
docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
lines 4-4, and the generated body description at lines 28-28; do not edit
generated files directly.

Source: Path instructions


1586-1595: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document configure_toolsets as keyword-only.

The source API defines configure_toolsets(*, enabled=..., blocked=...), but this generated signature omits * and implies positional arguments are accepted. Update the generator/source documentation and regenerate the reference with just docs.

As per path instructions, files under docs/reference/api/ are generated output and must not be edited directly.

🤖 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 1586 - 1595, Update the source or documentation generator definition for
configure_toolsets so enabled and blocked are documented as keyword-only by
including the keyword-only marker in the generated signature. Do not edit the
generated file under docs/reference/api; regenerate the reference documentation
with just docs and verify the signature matches the source API.

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 `@adapters/README.md`:
- Around line 101-105: The documentation overstates model-setting validation as
covering every configured role; update the corresponding guidance to specify
validation of the selected model role’s settings, preserving the existing
selected-role behavior. Apply this wording correction in adapters/README.md
lines 101-105 and docs/sdk/python.mdx lines 217-221; no core resolver change is
required.

In `@tests/python/test_typed_config.py`:
- Around line 164-175: Extend the tests in
test_plan_rejects_undeclared_model_setting_without_exposing_value with an async
Fabric().doctor counterpart using the same undeclared regionn value, and assert
the resulting FabricConfigError diagnostic contains
models.default.settings.regionn but not secret-setting-value. Mark the new test
async and await Fabric().doctor(config) to cover the doctor error path.

---

Outside diff comments:
In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Line 4: Update the source docstring or generator responsible for the API page
description to use “with NVIDIA NeMo Fabric” on first use, then regenerate the
generated reference page rather than editing it directly; retain “NeMo Fabric”
for subsequent mentions.

In `@docs/reference/api/python-library-reference/nemo_fabric.models.md`:
- Around line 1385-1445: Document the enabled and blocked fields and their
semantics in the source definition of ToolsetConfig, including the distinction
between None and empty lists and the validation behavior for overlapping
entries. Then regenerate the API reference so the generated ToolsetConfig
section reflects this documentation; do not edit docs/reference/api files
directly.
- Line 4: Update the source documentation descriptions to use “NVIDIA NeMo
Fabric” on first use, then regenerate the affected outputs. Apply this to
docs/reference/api/python-library-reference/nemo_fabric.models.md lines 4-4,
docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
lines 4-4, and the generated body description at lines 28-28; do not edit
generated files directly.
- Around line 1586-1595: Update the source or documentation generator definition
for configure_toolsets so enabled and blocked are documented as keyword-only by
including the keyword-only marker in the generated signature. Do not edit the
generated file under docs/reference/api; regenerate the reference documentation
with just docs and verify the signature matches the source API.

In `@docs/sdk/python.mdx`:
- Around line 178-182: Update the definition containing “Fabric owns the
behavior” to use “NeMo Fabric owns the behavior,” preserving the rest of the
documentation text and terminology.
🪄 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: 33357197-5440-4e66-a37c-34481fd1587e

📥 Commits

Reviewing files that changed from the base of the PR and between 7d8db50 and de79c72.

📒 Files selected for processing (100)
  • adapters/README.md
  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adaptersettingtype.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptermodelconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptersettingschema.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofendpointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsetconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • examples/harbor/README.md
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • python/src/nemo_fabric/models.py
  • schemas/adapter-descriptor.schema.json
  • schemas/agent.schema.json
  • schemas/run-plan.schema.json
  • scripts/generate_api_docs.sh
  • skills/nemo-fabric-integrate/SKILL.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_codex.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_typed_config.py

Comment thread adapters/README.md Outdated
Comment thread tests/python/test_typed_config.py Outdated
@AjayThorve
AjayThorve force-pushed the feat/validate-model-compatibility branch from de79c72 to d088452 Compare July 24, 2026 16:40
@AjayThorve
AjayThorve force-pushed the feat/validate-model-compatibility branch from d088452 to bc43fc6 Compare July 24, 2026 16:45

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 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/common/src/nemo_fabric_adapters/common/utils.py`:
- Around line 142-144: Update timeout_seconds() to reject boolean and other
non-numeric timeout_seconds values before coercion, while preserving the default
when the value is absent. Return a validated float only for supported numeric
values, and raise the established configuration error used by the adapters so
invalid settings produce a clean fail-closed diagnostic; keep max_turns()
behavior as the validation model and ensure downstream boolean guards remain
meaningful.

In `@adapters/hermes/README.md`:
- Around line 34-51: Update the Hermes adapter documentation around
build_hermes_config to remove the claim that runtime.timeout_seconds controls
invocation timeouts, since the adapter does not consume it. Document the
supported harness.settings.terminal_timeout configuration instead, matching the
existing Hermes configuration behavior.

In `@docs/integrations/claude.mdx`:
- Around line 11-14: Update the documentation text around the environment
configuration and SDK pin so the configuration key `environment.env` and package
specification `claude-agent-sdk==0.2.120` use inline code formatting, preserving
the surrounding prose.

In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Line 4: The first-use descriptions in
docs/reference/api/python-library-reference/nemo_fabric.client.md:4 and
docs/reference/api/python-library-reference/nemo_fabric.models.md:4 must use
“NVIDIA NeMo Fabric” instead of “NeMo Fabric”; update the source or generator
for both API references, then regenerate the files.

In `@docs/reference/api/python-library-reference/nemo_fabric.models.md`:
- Around line 1647-1656: Update the source or documentation generator for
configure_toolsets so its rendered signature preserves the keyword-only marker
after self, matching the source definition in models.py. Do not edit the
generated reference page directly; rerun just docs and verify the output shows
enabled and blocked as keyword-only parameters.
🪄 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: 3fd3b73f-50ed-47f0-9e33-d68d4ff28f9a

📥 Commits

Reviewing files that changed from the base of the PR and between de79c72 and bc43fc6.

📒 Files selected for processing (149)
  • README.md
  • adapters/README.md
  • adapters/claude/README.md
  • adapters/claude/fabric-adapter.json
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/README.md
  • adapters/codex/fabric-adapter.json
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • adapters/deepagents/README.md
  • adapters/deepagents/fabric-adapter.json
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/fabric-adapter.json
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • crates/fabric-cli/src/scaffold.rs
  • crates/fabric-cli/templates/python/main.py.tmpl
  • crates/fabric-cli/templates/rust/main.rs.tmpl
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • docs/getting-started/quickstart.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adaptersettingtype.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptermodelconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptersettingschema.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsetconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • examples/code_review_agent/config.py
  • examples/harbor/README.md
  • examples/harbor/calculator/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • examples/notebooks/01_quickstart.ipynb
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/integrations/harbor/fabric_agent.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/types.py
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/agent.schema.json
  • schemas/environment-handle.schema.json
  • schemas/run-plan.schema.json
  • schemas/runtime-context.schema.json
  • schemas/runtime-handle.schema.json
  • scripts/generate_api_docs.sh
  • skills/nemo-fabric-integrate/SKILL.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • tests/_utils/configs.py
  • tests/adapters/test_adapaters_common_utils.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_claude.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_deepagents.py
  • tests/e2e/test_hermes_config_mapping.py
  • tests/e2e/test_hermes_e2e.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/integrations/test_harbor_runner.py
  • tests/python/test_native_sdk.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_typed_config.py

Comment thread adapters/common/src/nemo_fabric_adapters/common/utils.py
Comment thread adapters/hermes/README.md Outdated
Comment thread docs/integrations/claude.mdx Outdated
Comment thread docs/reference/api/python-library-reference/nemo_fabric.client.md Outdated
Comment thread docs/reference/api/python-library-reference/nemo_fabric.models.md Outdated
rapids-bot Bot pushed a commit that referenced this pull request Jul 27, 2026
#### Overview

Prevent the `claude` and `codex` CLI presets and example variants from constructing or planning a configuration unless `NVIDIA_FRONTIER_BASE_URL` contains a non-empty endpoint. These presets require NVIDIA Frontier and must not inherit a public NVIDIA Catalog default from downstream normalization.

`Preset::config()` is now the authoritative fallible construction path, and staging and maintained examples propagate its validation error. This intentionally changes that public experimentation-CLI method from returning `FabricConfig` to returning `Result<FabricConfig, String>`; there are no core schema or Python SDK API changes. Existing CLI documentation already describes the Frontier endpoint as explicit and without a default.

#### Details

- Reuse each preset's existing `required_env` metadata instead of adding a second configuration-environment field.
- Validate the Frontier endpoint before direct config construction, preset staging, planning, doctoring, running, or maintained-example generation.
- Keep `NVIDIA_API_KEY` as a runtime credential requirement rather than a planning requirement.
- Leave the Catalog-native `hermes` and `deepagents` presets unchanged.
- Keep one integration test that invokes the compiled CLI for both affected presets, rejects a missing endpoint, and parses the emitted plan to prove the exact Frontier URL was preserved.
- Leave legacy nested endpoint handling unchanged; PR #118 already owns its migration validation.

#### Validation

- `cargo fmt --all -- --check`
- `just --fmt --check`
- `cargo check --workspace --locked`
- `just test-rust`
- `git diff --check`
- `cargo build -p nemo-fabric-cli --locked`, followed by a compiled-binary matrix covering Claude/Codex preset and example plan/init failures and successes plus Hermes/DeepAgents Catalog defaults
- `uv run --no-sync python -` E2E: compiled CLI plan → `FabricConfig.from_mapping()` → public `Fabric.run()` → Claude adapter → mock Claude CLI; child received `https://frontier-e2e.invalid`, and Catalog was absent
- `uv run --no-sync pytest -q tests/adapters/test_codex_adapter.py -k 'nvidia_provider'` (5 passed, 45 deselected)

A full Codex child-process E2E was not run because the repository has no deterministic Codex CLI fixture. The focused adapter tests cover its NVIDIA endpoint mapping and missing-endpoint rejection. `just test-python` was not rerun because the final diff contains no Python, SDK, binding, or adapter changes.

#### Where should the reviewer start?

Start with the fallible `Preset::config()` path in `crates/fabric-cli/src/presets.rs`, then review the actual CLI boundary test in `crates/fabric-cli/tests/frontier_presets.rs`.

#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

- Relates to #118

- [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

* **Bug Fixes**
  * Improved configuration validation for Claude and Codex presets.
  * The NVIDIA Frontier endpoint must now be set when required; missing or blank values produce a clear error.
  * Configured Frontier endpoint settings are now preserved in generated plans.
  * Configuration failures are reported cleanly instead of being silently assumed valid.

* **Tests**
  * Added regression coverage for missing and configured Frontier endpoint scenarios.

Authors:
  - Zhongxuan (Daniel) Wang (https://github.com/zhongxuanwang-nv)

Approvers:
  - Ajay Thorve (https://github.com/AjayThorve)

URL: #120
@AnuradhaKaruppiah
AnuradhaKaruppiah self-requested a review July 27, 2026 18:53
@AjayThorve
AjayThorve changed the base branch from main to release/0.1 July 28, 2026 21:00
@AjayThorve
AjayThorve force-pushed the feat/validate-model-compatibility branch from bc43fc6 to 201399e Compare July 28, 2026 21:05
@AjayThorve AjayThorve changed the title feat: validate adapter model compatibility feat: validate adapter model providers Jul 28, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 (1)
crates/fabric-core/src/config.rs (1)

374-389: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Implement the typed descriptor model-support contract.

config.models is absent from AdapterConfigSupport; because extensions is flattened, descriptor model/provider-setting declarations are silently ignored rather than validated. This omits the PR’s provider-specific settings contract and its fail-closed behavior.

  • crates/fabric-core/src/config.rs#L374-L389: add typed model-provider and setting-schema fields, then validate providers, required settings, and JSON types during planning.
  • schemas/adapter-descriptor.schema.json#L53-L80: regenerate the snapshot with the typed models contract.
  • schemas/run-plan.schema.json#L53-L80: regenerate the corresponding run-plan snapshot.

As per path instructions, schemas are generated public contract snapshots that must stay aligned with Rust changes.

🤖 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 374 - 389, Implement the typed
model-provider and setting-schema contract in AdapterConfigSupport, including
validation during planning for supported providers, required settings, and JSON
value types; do not let these declarations fall through extensions. Update
crates/fabric-core/src/config.rs at lines 374-389, then regenerate the aligned
public contract snapshots in schemas/adapter-descriptor.schema.json at lines
53-80 and schemas/run-plan.schema.json at lines 53-80.

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 `@crates/fabric-core/src/config.rs`:
- Around line 2396-2424: Cover and document native Nvidia provider support: in
crates/fabric-core/src/config.rs lines 2396-2424, add Claude and Codex cases
using the native nvidia provider without connection fields; in
tests/python/test_typed_config.py lines 177-221, add a successful SDK planning
case for nvidia without base_url or api_key_env; and in docs/sdk/python.mdx
lines 203-207, update the compatibility matrix to list anthropic and nvidia for
Claude and openai and nvidia for Codex.

---

Outside diff comments:
In `@crates/fabric-core/src/config.rs`:
- Around line 374-389: Implement the typed model-provider and setting-schema
contract in AdapterConfigSupport, including validation during planning for
supported providers, required settings, and JSON value types; do not let these
declarations fall through extensions. Update crates/fabric-core/src/config.rs at
lines 374-389, then regenerate the aligned public contract snapshots in
schemas/adapter-descriptor.schema.json at lines 53-80 and
schemas/run-plan.schema.json at lines 53-80.
🪄 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: 3b96eeb0-2908-4fc6-b9c5-208e9e1820d7

📥 Commits

Reviewing files that changed from the base of the PR and between bc43fc6 and 201399e.

📒 Files selected for processing (16)
  • adapters/README.md
  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-core/src/config.rs
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
  • schemas/run-plan.schema.json
  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
📜 Review details
⏰ Context from checks skipped due to timeout. (16)
  • GitHub Check: Preview docs
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Test (Python 3.13, macos-arm64)
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.11, macos-arm64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
  • GitHub Check: Test (Python 3.11, linux-amd64)
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • GitHub Check: Test (Python 3.12, linux-amd64)
  • GitHub Check: Test (Python 3.13, linux-arm64)
  • GitHub Check: Test (Python 3.12, macos-arm64)
  • GitHub Check: Test (Python 3.13, linux-amd64)
  • GitHub Check: Test (Python 3.11, linux-arm64)
  • GitHub Check: Test (Python 3.12, linux-arm64)
  • GitHub Check: Test (Python 3.14, linux-amd64)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (40)
**/*.{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:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • adapters/README.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 spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when 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 with NVIDIA on 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:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • tests/python/test_typed_config.py
  • adapters/README.md
  • schemas/run-plan.schema.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/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 spell NVIDIA in all caps; do not use Nvidia, nvidia, or NV.
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 as here or read 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.
Use can for possibility and reserve may for permission.
Use after for temporal relationships instead of once, and prefer refer to over see when 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:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • adapters/README.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.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in 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: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 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:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • adapters/README.md
skills/**

📄 CodeRabbit inference engine (AGENTS.md)

skills/**: Keep consumer skills under skills/ self-contained and dependent only on supported public Python SDK contracts and published documentation; do not add repository-internal contribution guidance.
Keep consumer skills in parity with the public SDK guide, model, and type details when the Python/Rust binding contract changes.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on its first usage, typically in the title or H1; use NeMo Fabric thereafter.
Use fabric by itself only when referring to the CLI tool, and surround those references with backticks.
Capitalize NVIDIA correctly 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 as here.
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.
Use after instead of once when expressing temporal sequence.
Use can instead of may when 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 docs to regenerate Python and Rust API references and validate the Fern configuration.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • adapters/README.md
**/*.{rs,py,html,md,mdx,toml,yml,yaml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

All Rust, Python, HTML, Markdown, MDX, TOML, YAML, and shell source files must include the project SPDX copyright and Apache-2.0 license headers using the comment syntax appropriate to each file type.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • tests/python/test_typed_config.py
  • adapters/README.md
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-core/src/config.rs
**/{README.md,*.md,*.mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update relevant documentation when changes affect public behavior, adapters, examples, or workspace structure.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • adapters/README.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:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • adapters/README.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}

⚙️ CodeRabbit configuration file

{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercase fabric CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
  • adapters/README.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/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.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/struct-adapterconfigsupport.mdx
  • docs/sdk/python.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.

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
docs/**/*.{md,mdx,yml}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Run just docs when the documentation site changes.

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
docs/**/*

📄 CodeRabbit inference engine (AGENTS.md)

Update Fern documentation under docs/ when public behavior, the nemo-fabric package, examples, or supported bindings change.

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.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/struct-adapterconfigsupport.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.
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/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/sdk/python.mdx
docs/sdk/python.mdx

📄 CodeRabbit inference engine (AGENTS.md)

Keep docs/sdk/python.mdx current when the public Python API changes.

Files:

  • docs/sdk/python.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:

  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • tests/python/test_typed_config.py
  • schemas/run-plan.schema.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-core/src/config.rs
**/*.{json,jsonschema}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Public contract changes must keep checked-in JSON Schema snapshots synchronized.

Files:

  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • schemas/run-plan.schema.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
{adapters/**,examples/**}

⚙️ CodeRabbit configuration file

{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.

Files:

  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • adapters/README.md
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
**/*.{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 under tests/.

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-core/src/config.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/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
**/*.{rs,py,pyi}

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests in just test-rust pass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes under schemas/ and generated API references.

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • 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, then just test-python; rebuild with just build-python when native code or packaging changes.

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-core/src/config.rs
tests/**/*.py

📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)

tests/**/*.py: Use Pytest to run Python tests.
Do not add @pytest.mark.asyncio to tests; async tests are automatically detected and run by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or unittest.mock.AsyncMock, using the spec argument when necessary, rather than defining a new class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files in conftest.py.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a function named <fixture_name>_fixture; specify scope only when it is not function.
Prefer pytest.mark.parametrize over separate tests for different input types.
Use @pytest.mark.usefixtures when a fixture is needed but its return value is unused or it does not return a value.
Use the autouse restore_environ_fixture from tests/conftest.py to restore environment variables; modify variables with os.environ and do not use monkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as using results["data"] instead of results.get("data").

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
**/*.{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 in python/pyproject.toml.

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • 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:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-core/src/config.rs
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Use type annotations for public Python APIs.

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
**/*.{py,rs}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{py,rs}: Keep native Python binding declarations synchronized with their Rust implementations.
Use snake_case for functions and variables; use PascalCase for Rust types and Python classes.

Files:

  • tests/python/test_typed_config.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-core/src/config.rs
{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.py
  • tests/python/test_native_sdk.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
**/README.md

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Update relevant package, crate, adapter, and integration README files when public behavior or entry-point documentation changes.

Files:

  • adapters/README.md
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/run-plan.schema.json
  • schemas/adapter-descriptor.schema.json
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 under tests/adapters, then run just test-python.

Files:

  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
**/*.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 with cargo fmt --all; Rust formatting checks must pass with cargo fmt --all -- --check.
Rust workspace changes must pass cargo check --workspace --locked.

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-rust and cargo 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
crates/fabric-core/**/*.{rs,py}

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

Changes under crates/fabric-core must 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-core changes 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 -- --check and just test-rust.

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 (2)
📚 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-adapterconfigsupport.mdx
📚 Learning: 2026-06-29T22:34:52.407Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 27
File: adapters/codex-cli/fabric-adapter.json:13-15
Timestamp: 2026-06-29T22:34:52.407Z
Learning: In NeMo-Fabric adapter manifest files (e.g., `*/fabric-adapter.json`), keep `config.accepts` limited to the top-level Fabric capability sections that `resolve_capability_plan` consumes (such as `models`, `tools`, `mcp`, `skills`, `telemetry`). Do not add adapter-owned `harness.settings` keys to `config.accepts`; `harness.settings` should remain adapter-owned and be passed through unchanged.

Applied to files:

  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • adapters/claude/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
🔇 Additional comments (11)
tests/python/test_native_sdk.py (1)

68-80: LGTM!

docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx (1)

12-26: LGTM!

skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md (1)

36-38: LGTM!

adapters/claude/fabric-adapter.json (1)

19-20: LGTM!

adapters/codex/fabric-adapter.json (1)

16-17: LGTM!

crates/fabric-cli/assets/adapters/claude/fabric-adapter.json (1)

19-20: LGTM!

crates/fabric-cli/assets/adapters/codex/fabric-adapter.json (1)

16-17: LGTM!

examples/harbor/swebench/adapters/claude/fabric-adapter.json (1)

19-20: LGTM!

tests/adapters/test_claude_adapter.py (1)

90-102: LGTM!

Also applies to: 129-153, 384-389, 407-416, 434-434, 458-467, 1050-1050

tests/adapters/test_codex_adapter.py (1)

78-78: LGTM!

Also applies to: 183-183, 213-213, 402-432, 590-633, 666-683, 755-755, 859-897, 919-919, 943-951, 964-978, 986-989, 1000-1006, 1061-1061

adapters/README.md (1)

27-28: LGTM!

Also applies to: 46-111

Comment thread crates/fabric-core/src/config.rs
@AjayThorve
AjayThorve changed the base branch from release/0.1 to main July 28, 2026 22:11
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
@AjayThorve
AjayThorve force-pushed the feat/validate-model-compatibility branch from 201399e to 7688ab9 Compare August 7, 2026 23:57
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@AjayThorve
AjayThorve marked this pull request as ready for review August 8, 2026 00:02
@AjayThorve
AjayThorve requested review from a team as code owners August 8, 2026 00:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant