Skip to content

chore: Set status on OTel spans#221

Merged
rapids-bot[bot] merged 40 commits into
NVIDIA:mainfrom
dagardner-nv:david-lc-04-observe
Jun 8, 2026
Merged

chore: Set status on OTel spans#221
rapids-bot[bot] merged 40 commits into
NVIDIA:mainfrom
dagardner-nv:david-lc-04-observe

Conversation

@dagardner-nv

@dagardner-nv dagardner-nv commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Overview

Set the statusCode field on OTel/OpenInference Spans, this is tracked in the metadata of the Scope.

  • I confirm this contribution is my own work, or I have the right to submit it under this project's license.
  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Details

  • Add the ability to update the scope's metadat when popping the current scope.
  • This represents a breaking change to FFI/Go bindings, but is non-breaking for other bindings.

Where should the reviewer start?

  • crates/core/src/api/scope.rs
  • crates/core/src/api/runtime/state.rs
  • crates/core/src/observability/mod.rs

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

  • Closes #

Summary by CodeRabbit

  • New Features

    • Scope pop/end operations accept optional end-metadata that is merged with scope metadata.
    • End events now include OpenTelemetry status fields (otel.status_code / otel.status_message).
  • Improvements

    • SDKs and language bindings propagate end-metadata and automatically record OK/ERROR status for scope/tool/LLM completions.
  • Tests

    • Added cross-language tests validating OTEL status metadata and metadata-merge behavior on end events.

Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
…otel specific attributes to metadata

Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
@dagardner-nv dagardner-nv self-assigned this Jun 4, 2026
@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

Looking for one thing? Review this PR in Change Stack to search files, summaries, diffs, and code without losing your place.

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

This PR adds OpenTelemetry status metadata (otel.status_code and otel.status_message) to scope end events across all language bindings and observability processors. Core merging allows pop-provided end metadata to override handle metadata; LLM/tool/stream paths emit OK/ERROR statuses; bindings and tests updated accordingly.

Changes

OpenTelemetry Status Metadata for Scope End Events

Layer / File(s) Summary
Core metadata infrastructure
crates/core/src/api/shared.rs, crates/core/src/api/scope.rs, crates/core/src/api/runtime/state.rs
metadata_with_otel_status helper builds JSON with otel.status_code/otel.status_message; PopScopeParams and EndScopeHandleParams gain optional metadata fields; scope-end event metadata merges handle metadata with provided overrides.
LLM and tool execution
crates/core/src/api/llm.rs, crates/core/src/api/tool.rs, crates/core/src/stream.rs
LLM, tool, and stream end-events enriched with OTEL status via metadata_with_otel_status: "OK" on success, "ERROR" with error message on failure; stream wrapper forwards derived metadata on END events.
Observability span status
crates/core/src/observability/mod.rs, crates/core/src/observability/otel.rs, crates/core/src/observability/openinference.rs
New set_span_status_from_event_metadata helper extracts OTEL status from event metadata and applies it to spans; OTEL and OpenInference processors invoke this before ending spans; end attributes serialization adjusted to reference metadata variable.
C FFI binding
crates/ffi/nemo_relay.h, crates/ffi/src/api/scope.rs, crates/ffi/tests/*
nemo_relay_pop_scope signature extended with metadata_json; implementation parses/validates metadata JSON and forwards it to core pop_scope; tests updated to match new signature and verify merge/validation behavior.
Node.js N-API binding
crates/node/src/api/mod.rs, crates/node/tests/*
pop_scope N-API function accepts optional metadata; with_scope auto-pops with "OK" status on success or "ERROR" with error message on failure; tests verify metadata and status propagation.
Python binding and integrations
crates/python/src/py_api/mod.rs, python/nemo_relay/scope.py, python/nemo_relay/integrations/langchain/*
Python pop_scope accepts metadata; scope() context manager auto-records OTEL status; LangChain handler pops with status metadata on chain end/error; tests updated.
WebAssembly binding
crates/wasm/src/api/mod.rs, crates/wasm/tests-js/*, crates/wasm/tests/*
Wasm popScope accepts metadata parameter; with_scope auto-pops with status metadata for sync and Promise paths using JS error-message extraction; JS tests added/updated.
Go binding and runtime helpers
go/nemo_relay/nemo_relay.go, go/nemo_relay/scope/scope.go, go/nemo_relay/*_test.go
Added WithScopeEndMetadata option; CGo pop signature updated; cleanupScope implements panic-aware auto-pop emitting ERROR/OK status and re-panics; tests added for OK/error/panic/merge cases.
Tests and coverage
crates/core/tests/*, crates/ffi/tests/*, crates/node/tests/*, crates/wasm/tests-*/*, python/tests/*, go/*_test.go
Extensive unit and integration tests added or updated across languages to assert OTEL status metadata is present on scope/tool/LLM end events and that observability spans reflect status metadata.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed Title follows Conventional Commits format with type 'chore', optional scope omitted, and concise imperative summary under 72 characters.
Description check ✅ Passed Description includes all key sections: Overview with confirmation checkboxes, Details explaining metadata update capability and breaking changes, Where to start with file pointers, and Related Issues placeholder.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions github-actions Bot added size:M PR is medium Maintenance CI or Build or general repository maintenance lang:python PR changes/introduces Python code lang:rust PR changes/introduces Rust code labels Jun 4, 2026
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown

Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
@willkill07 willkill07 added this to the 0.4 milestone Jun 4, 2026
Signed-off-by: David Gardner <dagardner@nvidia.com>

@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

🤖 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/ffi/nemo_relay.h`:
- Around line 967-978: The public C header crates/ffi/nemo_relay.h is missing
the required SPDX banner; update the cbindgen header-generation configuration so
generated headers include the "SPDX-License-Identifier: Apache-2.0" banner and
then regenerate or prepend that banner in nemo_relay.h (the header exposing
functions like nemo_relay_atof_exporter_create_from_json and types such as
FfiAtofExporter); ensure the project-wide header template used by
cbindgen/header-generation contains the SPDX line and any surrounding comment
block format so all exported symbols in the generated header consistently carry
the SPDX notice.
🪄 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: ed61a961-45f3-4d33-9e31-904cf9eae3d1

📥 Commits

Reviewing files that changed from the base of the PR and between bffcbd0 and f4c7b45.

📒 Files selected for processing (5)
  • crates/ffi/nemo_relay.h
  • crates/ffi/tests/integration/api_tests.rs
  • crates/node/src/api/mod.rs
  • go/nemo_relay/nemo_relay.go
  • python/nemo_relay/_native.pyi
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Check / Run
  • GitHub Check: Preview docs
🧰 Additional context used
📓 Path-based instructions (27)
**/*.rs

📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)

Use snake_case naming convention for Rust identifiers (e.g., nemo_relay_tool_call)

**/*.rs: Any Rust change must run just test-rust
Any Rust change must run cargo fmt --all
Any Rust change must run cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Run cargo fmt --all for all FFI work since it is Rust work
Run just test-rust to validate FFI changes
Run cargo clippy --workspace --all-targets -- -D warnings to enforce strict linting on FFI work

When Rust files changed as part of Go work, also run cargo fmt --all, just test-rust, and cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Run cargo fmt --all when Rust files are changed as part of Node work
Run cargo clippy --workspace --all-targets -- -D warnings when Rust files are changed as part of Node work
Run just test-rust when Rust files are changed as part of Node work

**/*.rs: Run cargo fmt --all to format all Rust code
Run cargo clippy --workspace --all-targets -- -D warnings to enforce all clippy lints as errors

**/*.rs: Run cargo fmt --all when Rust files changed as part of WebAssembly work
Run cargo clippy --workspace --all-targets -- -D warnings when Rust files changed as part of WebAssembly work

**/*.rs: If any Rust code changed, always run just test-rust
If any Rust code changed, also run cargo fmt --all
If any Rust code changed, also run cargo clippy --workspace --all-targets -- -D warnings
Run Rust formatting with cargo fmt --all
Run Rust linting with cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Use cargo fmt for Rust code formatting
Run cargo clippy -- -D warnings to lint Rust code and treat all warnings as errors
Use Rust snake_case naming convention for Rust identifiers
Include SPDX license header in all Rust source files using double-slash comment syntax
Validate Rust code with uv run pre-commit run --all-files to enforce cargo fmt formatting check, cargo clippy lints, and cargo deny aud...

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/node/src/api/mod.rs
{crates/adaptive/**/*.rs,**/*test*.{rs,py,go,ts,js},**/*adaptive*test*.{rs,py,go,ts,js},docs/plugins/adaptive/**}

📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)

Maintain documented and tested validation and report behavior for adaptive surfaces

Files:

  • crates/ffi/tests/integration/api_tests.rs
**/{Cargo.toml,**/*.rs}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Maintain consistency between Rust package names in Cargo.toml and their actual usage across the codebase

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/node/src/api/mod.rs
**/*.{h,hpp,c,cpp,rs}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Ensure FFI header and library naming follows consistent conventions across platform-specific builds

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/ffi/nemo_relay.h
  • crates/node/src/api/mod.rs
**/*.{rs,toml}

📄 CodeRabbit inference engine (.agents/skills/rename-surfaces/SKILL.md)

Update Rust crate names and module prefixes during coordinated rename operations

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/node/src/api/mod.rs
crates/ffi/**

📄 CodeRabbit inference engine (.agents/skills/test-ffi-surface/SKILL.md)

Rebuild the FFI crate in release mode so the shared library and header stay in sync when making changes to crates/ffi

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/ffi/nemo_relay.h
crates/ffi/**/*.rs

📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)

If the change touched crates/ffi, also use test-ffi-surface for validation

Files:

  • crates/ffi/tests/integration/api_tests.rs
**/*.{rs,py,js,ts,tsx,jsx,go,sh,toml,yaml,yml,md}

📄 CodeRabbit inference engine (AGENTS.md)

Keep SPDX headers on source, docs, scripts, and configuration files. The project is Apache-2.0.

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • go/nemo_relay/nemo_relay.go
  • crates/node/src/api/mod.rs
**/*.{rs,py,go,js,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Follow binding naming conventions: Rust and Python use snake_case, C FFI exports prefixed nemo_relay_, Go uses PascalCase for public APIs, Node.js uses camelCase.

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • go/nemo_relay/nemo_relay.go
  • crates/node/src/api/mod.rs
crates/**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

crates/**/*.rs: Keep async behavior on the existing tokio-based model. Bindings should preserve callback and future lifetimes rather than blocking or hiding async work unexpectedly.
Use Json = serde_json::Value in Rust-facing runtime APIs for JSON payload handling.

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/node/src/api/mod.rs
crates/{python,ffi,node,wasm}/**/*

⚙️ CodeRabbit configuration file

crates/{python,ffi,node,wasm}/**/*: Treat binding changes as public API changes. Check for parity with the other language bindings, FFI ownership/lifetime safety,
callback error propagation, stable type conversion, and consistent async/stream semantics.
Flag changes that update one binding without corresponding tests or documentation for the same surface elsewhere.

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • crates/ffi/nemo_relay.h
  • crates/node/src/api/mod.rs
{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}

⚙️ CodeRabbit configuration file

{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}: Tests should cover the behavior promised by the changed API surface, including error paths and cross-request isolation where relevant.
Prefer assertions on lifecycle events, scope stacks, middleware ordering, and binding parity over shallow smoke tests.

Files:

  • crates/ffi/tests/integration/api_tests.rs
**

⚙️ CodeRabbit configuration file

**:

AGENTS.md

This file provides guidance to agents, including Claude Code and OpenAI Codex, when working in this repository.

Project Overview

NeMo Relay is a multi-language agent runtime framework for execution scopes, lifecycle events, middleware, plugins, and observability around tool and LLM calls. The core runtime is Rust. Primary supported bindings are Rust, Python, and Node.js. Go, WebAssembly, and the raw C FFI are experimental and source-first.

The shared runtime model is:

  1. Scope stacks decide where work belongs and which scope-local behavior is visible.
  2. Middleware registries decide what guardrails and intercepts run around managed calls.
  3. Plugins install reusable runtime behavior from configuration.
  4. Events record runtime behavior in ATOF form.
  5. Subscribers and exporters consume events in-process or export them to ATIF, OpenTelemetry, OpenInference, or other backends.

Repository Structure

The repository layout separates the Rust runtime, language bindings, documentation,
integration patches, and agent-facing skills.

crates/
  core/       # Rust core runtime crate, published as nemo-relay
  adaptive/   # Adaptive runtime primitives and plugin components
  python/     # PyO3 native extension for the Python package
  ffi/        # Raw C ABI layer used by downstream bindings such as Go
  node/       # NAPI Node.js binding and JavaScript/TypeScript entry points
  wasm/       # wasm-bindgen WebAssembly binding and JS wrappers
python/
  nemo_relay/  # Python wrapper package: scopes, tools, LLM, middleware, typed helpers, plugins, adaptive helpers
  tests/      # Python tests
go/
  nemo_relay/  # Experimental Go CGo binding and tests
fern/         # Fern documentation site
scripts/      # Stable wrappers and helper scripts; build/test/docs entry points live in justfile
third_party/  # P...

Files:

  • crates/ffi/tests/integration/api_tests.rs
  • go/nemo_relay/nemo_relay.go
  • python/nemo_relay/_native.pyi
  • crates/ffi/nemo_relay.h
  • crates/node/src/api/mod.rs
go/nemo_relay/**/*.go

📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)

Update Go wrapper in go/nemo_relay/nemo_relay.go with doc comment and shorthand package if the capability belongs there

go/nemo_relay/**/*.go: Format changed Go packages with cd go/nemo_relay && go fmt ./...
Run Go tests with just test-go to build and test the NeMo Relay Go binding
Use just build-go when you want an explicit build-only pass or need the artifact for other work
Use just ci=true test-go when you need the CI-style coverage and JUnit path
On macOS, set DYLD_LIBRARY_PATH to the ../../target/release directory before running the raw go test command directly

Files:

  • go/nemo_relay/nemo_relay.go
go/**/*.go

📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)

Use PascalCase naming convention for Go identifiers (e.g., nemo_relay.ToolCall)

Run Go formatting with cd go/nemo_relay && go fmt ./...

Files:

  • go/nemo_relay/nemo_relay.go
{crates/adaptive/**,python/nemo_relay/plugin.py,go/nemo_relay/**,**/node/**,**/wasm/**}

📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)

{crates/adaptive/**,python/nemo_relay/plugin.py,go/nemo_relay/**,**/node/**,**/wasm/**}: Maintain consistent plugin lifecycle across all language bindings (Python, Go, Node/WebAssembly, and Rust)
Keep plugin context surfaces aligned across all language implementations

Files:

  • go/nemo_relay/nemo_relay.go
  • crates/node/src/api/mod.rs
{go/nemo_relay/go.mod,go/**/*.go}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Ensure Go module path in go/nemo_relay/go.mod matches import statements in Go source files

Files:

  • go/nemo_relay/nemo_relay.go
**/*.go

📄 CodeRabbit inference engine (.agents/skills/rename-surfaces/SKILL.md)

Update Go module paths and package paths during coordinated rename operations

**/*.go: Use gofmt for Go code formatting
Run go vet ./... for Go static analysis
Use Go PascalCase naming convention for Go identifiers
Include SPDX license header in all Go source files using double-slash comment syntax
Validate Go code with uv run pre-commit run --all-files to enforce gofmt formatting and go vet static analysis

Files:

  • go/nemo_relay/nemo_relay.go
go/nemo_relay/**/*

⚙️ CodeRabbit configuration file

go/nemo_relay/**/*: Review Go binding changes for cgo memory ownership, race safety, callback cleanup, idiomatic exported APIs, and parity with Rust/FFI behavior.
Any API change should include focused Go tests and consider race-test behavior.

Files:

  • go/nemo_relay/nemo_relay.go
{crates/python/src/py_api/**/*.rs,python/nemo_relay/**/*.py,python/nemo_relay/**/*.pyi}

📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)

Update Python native binding in crates/python/src/py_api/mod.rs with Python wrapper docstring in python/nemo_relay/<module>.py and type stubs in python/nemo_relay/*.pyi modules

Files:

  • python/nemo_relay/_native.pyi
python/nemo_relay/**/*

⚙️ CodeRabbit configuration file

python/nemo_relay/**/*: Review Python wrapper changes for typed API consistency, contextvars-based scope isolation, async behavior, and parity with the native extension.
Stubs and runtime implementations should stay aligned.

Files:

  • python/nemo_relay/_native.pyi
**/*.{h,c}

📄 CodeRabbit inference engine (.agents/skills/rename-surfaces/SKILL.md)

Update C header names and symbol prefixes during coordinated rename operations

Files:

  • crates/ffi/nemo_relay.h
crates/ffi/nemo_relay.h

📄 CodeRabbit inference engine (.agents/skills/test-ffi-surface/SKILL.md)

Check the generated header diff when any exported symbol or type changed in the FFI surface

Ensure FFI header sync for crates/ffi/nemo_relay.h through Cargo/build.rs

Files:

  • crates/ffi/nemo_relay.h
crates/ffi/*.h

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Prefix C FFI exports with nemo_relay_

Files:

  • crates/ffi/nemo_relay.h
crates/node/src/api/**/*.rs

📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)

Update Node.js binding in crates/node/src/api/mod.rs for language-native bindings

Files:

  • crates/node/src/api/mod.rs
crates/node/src/**/*.rs

📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)

Use camelCase naming convention for Node.js identifiers (e.g., toolCall)

Files:

  • crates/node/src/api/mod.rs
{crates/adaptive/**,python/nemo_relay/adaptive.py,python/nemo_relay/plugin.py,go/nemo_relay/adaptive/**,go/nemo_relay/!(adaptive)/**,**/node/**,**/wasm/**}

📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)

Keep adaptive surface in sync across crates/adaptive, shared plugin behavior in core and bindings, Python adaptive/plugin wrappers in python/nemo_relay/adaptive.py and python/nemo_relay/plugin.py, Go adaptive helpers under go/nemo_relay/adaptive plus shared plugin helpers in go/nemo_relay, and Node/WebAssembly adaptive helpers and plugin wrappers

Files:

  • crates/node/src/api/mod.rs
🔇 Additional comments (9)
crates/ffi/tests/integration/api_tests.rs (1)

768-805: LGTM!

crates/node/src/api/mod.rs (1)

178-201: LGTM!

Also applies to: 3047-3063

python/nemo_relay/_native.pyi (1)

1184-1207: LGTM!

go/nemo_relay/nemo_relay.go (6)

47-47: LGTM!


231-231: LGTM!


327-337: LGTM!


459-485: LGTM!


555-570: LGTM!


1643-1667: LGTM!

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

🤖 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/ffi/nemo_relay.h`:
- Around line 967-978: The public C header crates/ffi/nemo_relay.h is missing
the required SPDX banner; update the cbindgen header-generation configuration so
generated headers include the "SPDX-License-Identifier: Apache-2.0" banner and
then regenerate or prepend that banner in nemo_relay.h (the header exposing
functions like nemo_relay_atof_exporter_create_from_json and types such as
FfiAtofExporter); ensure the project-wide header template used by
cbindgen/header-generation contains the SPDX line and any surrounding comment
block format so all exported symbols in the generated header consistently carry
the SPDX notice.
🪄 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: ed61a961-45f3-4d33-9e31-904cf9eae3d1

📥 Commits

Reviewing files that changed from the base of the PR and between bffcbd0 and f4c7b45.

📒 Files selected for processing (5)
  • crates/ffi/nemo_relay.h
  • crates/ffi/tests/integration/api_tests.rs
  • crates/node/src/api/mod.rs
  • go/nemo_relay/nemo_relay.go
  • python/nemo_relay/_native.pyi
📜 Review details
🔇 Additional comments (9)
crates/ffi/tests/integration/api_tests.rs (1)

768-805: LGTM!

crates/node/src/api/mod.rs (1)

178-201: LGTM!

Also applies to: 3047-3063

python/nemo_relay/_native.pyi (1)

1184-1207: LGTM!

go/nemo_relay/nemo_relay.go (6)

47-47: LGTM!


231-231: LGTM!


327-337: LGTM!


459-485: LGTM!


555-570: LGTM!


1643-1667: LGTM!

🛑 Comments failed to post (1)
crates/ffi/nemo_relay.h (1)

967-978: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add SPDX header generation for this modified public C header.

This file is changed in the PR but still lacks the required SPDX header. Please update the cbindgen/header-generation path so crates/ffi/nemo_relay.h includes the project SPDX banner consistently.

As per coding guidelines, “Keep SPDX headers on source, docs, scripts, and configuration files. The project is Apache-2.0.”

🤖 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/ffi/nemo_relay.h` around lines 967 - 978, The public C header
crates/ffi/nemo_relay.h is missing the required SPDX banner; update the cbindgen
header-generation configuration so generated headers include the
"SPDX-License-Identifier: Apache-2.0" banner and then regenerate or prepend that
banner in nemo_relay.h (the header exposing functions like
nemo_relay_atof_exporter_create_from_json and types such as FfiAtofExporter);
ensure the project-wide header template used by cbindgen/header-generation
contains the SPDX line and any surrounding comment block format so all exported
symbols in the generated header consistently carry the SPDX notice.

willkill07
willkill07 previously approved these changes Jun 5, 2026

@willkill07 willkill07 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

One question. Otherwise, I like the additional changes here. Thanks for digging.

Comment thread crates/node/tests/tools_tests.mjs Outdated
Comment thread crates/core/src/api/shared.rs Outdated
Comment thread crates/core/src/api/llm.rs Outdated
Comment thread crates/core/src/api/shared.rs Outdated
mnajafian-nv
mnajafian-nv previously approved these changes Jun 5, 2026

@mnajafian-nv mnajafian-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, approved upon alignment on inline questions.

@dagardner-nv dagardner-nv removed the breaking PR introduces a breaking change label Jun 5, 2026
…t wait for the events we are interested in within a timeout of 15 seconds

Signed-off-by: David Gardner <dagardner@nvidia.com>
willkill07
willkill07 previously approved these changes Jun 6, 2026
…me in the spec

Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
…observe

Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>

@mnajafian-nv mnajafian-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for addressing the feedback, LGTM.

@dagardner-nv

Copy link
Copy Markdown
Contributor Author

/merge

@rapids-bot rapids-bot Bot merged commit 858b1e0 into NVIDIA:main Jun 8, 2026
70 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lang:go PR changes/introduces Go code lang:js PR changes/introduces Javascript/Typescript code lang:python PR changes/introduces Python code lang:rust PR changes/introduces Rust code Maintenance CI or Build or general repository maintenance size:XL PR is extra large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants