docs: reorganize plugin documentation - #361
Conversation
Signed-off-by: Will Killian <wkillian@nvidia.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThis PR reorganizes NeMo Relay documentation around ChangesDocumentation content updates
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
docs/configure-plugins/adaptive/configuration.mdx (1)
111-176: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winPython and Node.js "Per-Language" examples are incomplete relative to the Rust example in the same section and the sibling
adaptive-hints.mdxexamples.The Rust snippet here (lines 219-229) shows the full lifecycle:
register_adaptive_component(), validate,initialize_plugins, a work comment, andclear_plugin_configuration(). The Python snippet ends atactive = asyncio.run(nemo_relay.plugin.initialize(plugin_config))withactivenever used again, and the Node.js snippet ends at the.catch()handler — neither shows the equivalent work-section or cleanup call (plugin.clear()/ disposingactive) that the Python/Node examples inadaptive-hints.mdxdo include. This breaks cross-binding consistency for what should be a parallel lifecycle example.As per path instructions, "Review documentation for technical accuracy against the current API, command correctness, and consistency across language bindings."
📝 Suggested completion for the Python snippet
-active = asyncio.run(nemo_relay.plugin.initialize(plugin_config)) +active = asyncio.run(nemo_relay.plugin.initialize(plugin_config)) + +try: + # Run instrumented application work here. + pass +finally: + nemo_relay.plugin.clear()🤖 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/configure-plugins/adaptive/configuration.mdx` around lines 111 - 176, The Python and Node.js lifecycle examples are incomplete compared with the Rust and adaptive-hints examples, so extend the snippets to show the full register/validate/initialize/work/cleanup flow. In the Python block, use the initialized value from asyncio.run(nemo_relay.plugin.initialize(plugin_config)) in a brief work section and then dispose/clear the plugin state; in the Node.js block, keep the same pattern by adding the equivalent work section after plugin.initialize(pluginConfig) and a cleanup call afterward. Make the examples mirror the lifecycle demonstrated by register_adaptive_component, initialize_plugins, and clear_plugin_configuration so all language bindings stay consistent.Source: Path instructions
docs/configure-plugins/plugin-configuration-files.mdx (1)
304-315: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winLink text case mismatches the target heading.
[Precedence And Merge Behavior](#precedence-and-merge-behavior)capitalizes "And," but the heading itself reads## Precedence and Merge Behavior(line 251). Anchor text should match the destination title.✏️ Proposed fix
- (system → project → user), using the [Precedence And Merge Behavior](`#precedence-and-merge-behavior`) rules above. + (system → project → user), using the [Precedence and Merge Behavior](`#precedence-and-merge-behavior`) rules above.As per coding guidelines, "Use descriptive anchor text that matches the destination title when possible for links."
🤖 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/configure-plugins/plugin-configuration-files.mdx` around lines 304 - 315, The markdown link text in the Configuration Layering section uses a title case mismatch for the Precedence and Merge Behavior heading. Update the anchor text in the Configuration Layering list item to match the actual heading name exactly, and keep the link target unchanged so the reference remains consistent.Source: Coding guidelines
docs/configure-plugins/observability/atif.mdx (1)
149-193: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winHeading hierarchy misplaces general S3 connection docs under "Multiple Destinations".
"Connection Fields" and "Secret Credential Fields" are h4 subsections of "### Multiple Destinations", but their content (AWS env var fallback, secret
_varfields) applies to any S3-compatible destination, not specifically multi-destination setups. Readers using a single S3 destination may miss these subsections since they read as scoped to the multi-destination example.Consider moving these two subsections under "### S3-Compatible Storage" instead.
🤖 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/configure-plugins/observability/atif.mdx` around lines 149 - 193, The “Connection Fields” and “Secret Credential Fields” sections are incorrectly nested under the multi-destination example, even though they describe general S3-compatible configuration. Move these subsections out from under the “Multiple Destinations” area in the observability ATIF docs and place them under the “S3-Compatible Storage” section instead, keeping the existing content and headings intact. Use the “Connection Fields” and “Secret Credential Fields” headings as the anchors when relocating the docs so single-destination users can find the AWS env var fallback and `_var` secret settings.
♻️ Duplicate comments (1)
docs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdx (1)
104-104: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winBare
pythoninvocation, same portability concern as the gRPC worker Rust guide.Consider
python3for consistency with the Python worker guide and to avoid failures on systems without apythonalias.🤖 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/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdx` at line 104, The example currently uses a bare python invocation, which may fail on systems without a python alias. Update the command in the rust-native-plugin-example guide to use python3 for consistency with the Python worker guide, and keep the surrounding example text aligned with that runtime choice.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdx`:
- Around line 118-127: The Activation and Shutdown sequence has several list
items in grpc-worker-protocol.mdx that all start with “Relay,” which hurts
readability. Reword a couple of those steps so they begin with different openers
while keeping the meaning intact, especially the items describing
endpoint/worker startup, Validate/Register handling, and Shutdown cleanup.
In `@docs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdx`:
- Around line 113-121: The digest example in the Rust worker guide uses bare
python, which may not exist on all platforms. Update the script in about.mdx to
use python3 instead, matching the companion Python worker guide and ensuring the
sha256 command works where only python3 is installed.
- Around line 35-62: Add the required SPDX header to the Rust example in the
`ExampleWorker`/`main` snippet so it matches the other language-binding
examples; include both `SPDX-FileCopyrightText` and `SPDX-License-Identifier:
Apache-2.0` at the top of the source block, keeping the rest of the
`WorkerPlugin` implementation and `serve_plugin(ExampleWorker)` example
unchanged.
In `@docs/build-plugins/dynamic-plugins/native-dynamic/about.mdx`:
- Line 114: Update the heading in about.mdx to use the same capitalization as
the rest of the docs for this ABI version by changing “Native ABI V1” to “Native
ABI v1”; keep the terminology consistent with the existing “v1” usage in the
body text and the related dynamic-plugins about.mdx entry, and make sure the
section title matches the same concept throughout the document.
- Around line 78-100: Add the required SPDX license header to the Rust example
shown in the NativePlugin snippet so it matches the repo’s source-file
guidelines. Update the `src/lib.rs` example in the
`NativePolicy`/`nemo_relay_plugin!` sample to include the standard SPDX header
at the top before the `use nemo_relay_plugin` imports, keeping the rest of the
example unchanged.
In
`@docs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdx`:
- Around line 39-59: The Rust example in NativePolicy lacks the SPDX license
header used by the other example sources. Add the same SPDX header comment at
the top of the src/lib.rs example before the use statements, keeping the rest of
NativePlugin, register, and nemo_relay_plugin! unchanged.
In `@docs/configure-plugins/observability/openinference.mdx`:
- Around line 144-149: The OpenInference Python example still uses the older
async context-manager lifecycle instead of the explicit initialize/clear pattern
used by the sibling docs. Update the example in the main snippet to use the same
sequence as atif.mdx, atof.mdx, and opentelemetry.mdx: call
plugin.initialize(config) before the instrumented work, wrap the work in a try
block, and call plugin.clear() in finally. Keep the example aligned around the
plugin plugin/config setup so readers see one consistent lifecycle API.
---
Outside diff comments:
In `@docs/configure-plugins/adaptive/configuration.mdx`:
- Around line 111-176: The Python and Node.js lifecycle examples are incomplete
compared with the Rust and adaptive-hints examples, so extend the snippets to
show the full register/validate/initialize/work/cleanup flow. In the Python
block, use the initialized value from
asyncio.run(nemo_relay.plugin.initialize(plugin_config)) in a brief work section
and then dispose/clear the plugin state; in the Node.js block, keep the same
pattern by adding the equivalent work section after
plugin.initialize(pluginConfig) and a cleanup call afterward. Make the examples
mirror the lifecycle demonstrated by register_adaptive_component,
initialize_plugins, and clear_plugin_configuration so all language bindings stay
consistent.
In `@docs/configure-plugins/observability/atif.mdx`:
- Around line 149-193: The “Connection Fields” and “Secret Credential Fields”
sections are incorrectly nested under the multi-destination example, even though
they describe general S3-compatible configuration. Move these subsections out
from under the “Multiple Destinations” area in the observability ATIF docs and
place them under the “S3-Compatible Storage” section instead, keeping the
existing content and headings intact. Use the “Connection Fields” and “Secret
Credential Fields” headings as the anchors when relocating the docs so
single-destination users can find the AWS env var fallback and `_var` secret
settings.
In `@docs/configure-plugins/plugin-configuration-files.mdx`:
- Around line 304-315: The markdown link text in the Configuration Layering
section uses a title case mismatch for the Precedence and Merge Behavior
heading. Update the anchor text in the Configuration Layering list item to match
the actual heading name exactly, and keep the link target unchanged so the
reference remains consistent.
---
Duplicate comments:
In
`@docs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdx`:
- Line 104: The example currently uses a bare python invocation, which may fail
on systems without a python alias. Update the command in the
rust-native-plugin-example guide to use python3 for consistency with the Python
worker guide, and keep the surrounding example text aligned with that runtime
choice.
🪄 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: 43ff3bb7-89da-4acc-b534-d5baf04f6329
📒 Files selected for processing (65)
README.mddocs/about-nemo-relay/architecture.mdxdocs/about-nemo-relay/concepts/plugins.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/overview.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/build-plugins/about.mdxdocs/build-plugins/code-examples.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/build-plugins/register-behavior.mdxdocs/configure-plugins/about.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/model-pricing.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/configure-plugins/observability/about.mdxdocs/configure-plugins/observability/atif.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/agent-runtime-primer.mdxdocs/getting-started/configuration.mdxdocs/getting-started/installation.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/quick-start/index.mdxdocs/index.ymldocs/instrument-applications/instrument-llm-call.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/nemo-relay-cli/hermes.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/supported-integrations/deepagents.mdxdocs/supported-integrations/langchain.mdxdocs/supported-integrations/langgraph.mdxdocs/supported-integrations/openclaw-plugin.mdxfern/docs.yml
💤 Files with no reviewable changes (2)
- docs/build-plugins/code-examples.mdx
- docs/build-plugins/register-behavior.mdx
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Preview docs
⚠️ CI failures not shown inline (5)
GitHub Actions: Build pull request / Check _ Run: docs: reorganize plugin documentation
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Build pull request / pr-builder _ run: docs: reorganize plugin documentation
Conclusion: failure
##[group]Run if grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then
�[36;1mif grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then�[0m
�[36;1m echo "::error::$ERROR_MSG"�[0m
GitHub Actions: Build pull request / Check _ Run: docs: reorganize plugin documentation
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Build pull request / 0_pr-builder _ run.txt: docs: reorganize plugin documentation
Conclusion: failure
##[group]Run if grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then
�[36;1mif grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then�[0m
�[36;1m echo "::error::$ERROR_MSG"�[0m
GitHub Actions: Build pull request / 11_Check _ Run.txt: docs: reorganize plugin documentation
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
🧰 Additional context used
📓 Path-based instructions (19)
**/*.{rs,py,js,ts,mjs,c,h,md,toml,yml,yaml,sh,json,go}
📄 CodeRabbit inference engine (AGENTS.md)
Keep SPDX headers on source files, documentation, scripts, and configuration files.
Files:
docs/index.ymlfern/docs.ymlREADME.md
**/*.{rs,py,go,js,ts,jsx,tsx,md,mdx,toml,yaml,yml,html}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
All source files must include an SPDX license header using the comment syntax appropriate for the file type, with SPDX-FileCopyrightText for 2026 NVIDIA CORPORATION & AFFILIATES and SPDX-License-Identifier: Apache-2.0.
Files:
docs/index.ymldocs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxfern/docs.ymldocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxREADME.mddocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
**/*.{rs,py,go,js,ts,md,mdx,toml,yaml,yml,json}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Avoid using
SONAR_IGNORE_START/SONAR_IGNORE_ENDexcept for documented false positives; keep the ignored block small, add a brief explanatory comment, and call it out in the PR description.
Files:
docs/index.ymldocs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxfern/docs.ymldocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxREADME.mddocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
**
⚙️ 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 and the raw C FFI are experimental and source-first.
The shared runtime model is:
- Scope stacks decide where work belongs and which scope-local behavior is visible.
- Middleware registries decide what guardrails and intercepts run around managed calls.
- Plugins install reusable runtime behavior from configuration.
- Events record runtime behavior in ATOF form.
- 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, integrations, 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 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 skills/ # Published Codex/agent skills for NeMo Relay usage patternsPrerequisites
Insta...
Files:
docs/index.ymldocs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxfern/docs.ymldocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxREADME.mddocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
{docs/**,README.md,CONTRIBUTING.md,RELEASING.md,SECURITY.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,CONTRIBUTING.md,RELEASING.md,SECURITY.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency across language bindings.
Flag stale examples, missing SPDX headers where required, and instructions that no longer match CI or pre-commit behavior.
Files:
docs/index.ymldocs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxdocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxREADME.mddocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
MDX top-of-file SPDX comments must use {/* ... */} delimiters instead of HTML comment delimiters (Must-Fix)
For documentation-site changes, run the docs build/validation flow (
just docsor./scripts/build-docs.sh html) so generated Fern API reference pages are refreshed before validation.In MDX files, top-of-file comments must use JSX comment delimiters
{/* ... */}for SPDX headers; do not use HTML comments
Files:
docs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxdocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxdocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
**/*.{md,mdx}: Keep package names, repository references, and build commands current in documentation and examples
Keep stable user-facing wrappers at thescripts/root in docs and examples; only point at namespaced helper paths when documenting internal maintenance work
Files:
docs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxdocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxREADME.mddocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
{RELEASING.md,docs/**/*.md,docs/**/*.mdx}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep release-process and release-notes guidance in maintainer-facing docs such as RELEASING.md, not in user-facing docs pages or CHANGELOG.md
Files:
docs/supported-integrations/langgraph.mdxdocs/instrument-applications/instrument-tool-call.mdxdocs/nemo-relay-cli/basic-usage.mdxdocs/about-nemo-relay/architecture.mdxdocs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/integrate-into-frameworks/wrap-tool-calls.mdxdocs/configure-plugins/discoverable-plugins.mdxdocs/configure-plugins/about.mdxdocs/nemo-relay-cli/claude-code.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/rust-native-plugin-example.mdxdocs/configure-plugins/adaptive/about.mdxdocs/configure-plugins/model-pricing.mdxdocs/nemo-relay-cli/hermes.mdxdocs/supported-integrations/langchain.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/about.mdxdocs/getting-started/agent-runtime-primer.mdxdocs/getting-started/configuration.mdxdocs/supported-integrations/deepagents.mdxdocs/instrument-applications/instrument-llm-call.mdxdocs/about-nemo-relay/ecosystem.mdxdocs/about-nemo-relay/release-notes/index.mdxdocs/reference/llm-request-intercept-outcomes.mdxdocs/resources/troubleshooting/trace-incident-runbook.mdxdocs/contribute/runtime-contract-docs.mdxdocs/getting-started/quick-start/index.mdxdocs/configure-plugins/nemo-guardrails/about.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/rust/about.mdxdocs/build-plugins/dynamic-plugins/native-dynamic/about.mdxdocs/configure-plugins/pii-redaction/about.mdxdocs/supported-integrations/openclaw-plugin.mdxdocs/build-plugins/language-binding/about.mdxdocs/build-plugins/language-binding/code-examples.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdxdocs/build-plugins/dynamic-plugins/about.mdxdocs/reference/tool-execution-intercept-outcomes.mdxdocs/about-nemo-relay/overview.mdxdocs/build-plugins/language-binding/register-behavior.mdxdocs/configure-plugins/nemo-guardrails/configuration.mdxdocs/build-plugins/about.mdxdocs/about-nemo-relay/concepts/subscribers.mdxdocs/configure-plugins/adaptive/acg.mdxdocs/nemo-relay-cli/plugin-installation.mdxdocs/build-plugins/language-binding/advanced-configuration.mdxdocs/resources/support-and-faqs.mdxdocs/resources/troubleshooting/index.mdxdocs/build-plugins/language-binding/validate-configuration.mdxdocs/configure-plugins/pii-redaction/configuration.mdxdocs/configure-plugins/observability/opentelemetry.mdxdocs/configure-plugins/observability/about.mdxdocs/about-nemo-relay/concepts/plugins.mdxdocs/configure-plugins/adaptive/adaptive-hints.mdxdocs/configure-plugins/observability/openinference.mdxdocs/configure-plugins/plugin-configuration-files.mdxdocs/build-plugins/dynamic-plugins/grpc-worker/python/about.mdxdocs/configure-plugins/adaptive/configuration.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdxdocs/configure-plugins/observability/atof.mdxdocs/configure-plugins/observability/configuration.mdxdocs/configure-plugins/observability/atif.mdx
docs/getting-started/**
📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)
Update
docs/getting-started/materials when usage or onboarding behavior changed.
Files:
docs/getting-started/prerequisites.mdxdocs/getting-started/installation.mdxdocs/getting-started/agent-runtime-primer.mdxdocs/getting-started/configuration.mdxdocs/getting-started/quick-start/index.mdx
{README.md,docs/**/*.{md,rst,txt},fern/**/*}
📄 CodeRabbit inference engine (.agents/skills/prepare-code-freeze/SKILL.md)
Search and update documentation source for references to the old version in
README.md,docs, andferndirectories, updating current-version install commands, package examples, and configuration examples to<next-version>
Files:
fern/docs.ymlREADME.md
docs/reference/**
📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)
Update relevant pages under
docs/reference/when the public surface or expected usage changed.
Files:
docs/reference/llm-request-intercept-outcomes.mdxdocs/reference/tool-execution-intercept-outcomes.mdx
**/*.{md,rst,html,txt}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-brand-terminology.md)
**/*.{md,rst,html,txt}: Always spellNVIDIAin all caps. Do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun because the name starts with an 'en' sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company.
Use trademark symbols with product names only when the document type or legal guidance requires them.
Verify official capitalization, spacing, and hyphenation for product names.
Precede NVIDIA product names withNVIDIAon first mention when it is natural and accurate.
Do not rewrite product names for grammar or title-case rules.
Preserve third-party product names according to the owner's spelling.
Include the company name and full model qualifier on first use when it helps identify the model.
Preserve the official capitalization and punctuation of model names.
Use shorter family names only after the full name is established.
Spell out a term on first use and put the acronym in parentheses unless the acronym is widely understood by the intended audience.
Use the acronym on later mentions after it has been defined.
For long documents, reintroduce the full term if readers might lose context.
Form plurals of acronyms withs, not an apostrophe, such asGPUs.
In headings, common acronyms can remain abbreviated. Spell out the term in the first or second sentence of the body.
Common terms such asCPU,GPU,PC,API, andUIusually do not need to be spelled out for developer audiences.
Files:
README.md
**/*.{md,rst,html}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-brand-terminology.md)
Link the first mention of a product name when the destination helps the reader.
Files:
README.md
**/*.{md,rst,txt}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
Spell
NVIDIAin all caps. Do not useNvidia,nvidia, orNV.
Files:
README.md
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,rst}: 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 steps. Keep steps parallel and split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce.
Preferrefer tooverseewhen the wording points readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical docs.
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 include commas in thousands.
Do not add trademark symbols to learning-oriented docs unless the source, platform, or legal guidance explicitly requires them.
Files:
README.md
**/*.md
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-technical-docs.md)
**/*.md: Use title case consistently in technical documentation headings
Avoid quotation marks, ampersands, and exclamation marks in headings
Keep product, event, research, and whitepaper names in their official title case
Use title case for table headers
Do not force social-media sentence case into technical docs
Format code elements, commands, parameters, package names, and expressions in monospace
Format directories, file names, and paths in monospace using backticks
Use angle brackets inside monospace for variables inside paths, such as/home/<username>/.login
Format error messages and strings in quotation marks, keeping literal code strings in code formatting when clearer
Format UI buttons, menus, fields, and labels in bold
Use angle brackets between UI labels for menu paths, such as File > Save As
Use italics for new terms on first use, sparingly and only when introducing the term
Use italics for publication titles
Format keyboard shortcuts in plain text, such as Press Ctrl+Alt+Delete
Use owner/repo link text for GitHub repositories, preferring[NVIDIA/NeMo](link)over prose references like 'the GitHub repo'
Introduce every code block with a complete sentence
Do not make a code block complete the grammar of the previous sentence
Do not continue a sentence after a code block
Use syntax highlighting when the format supports it for code blocks
Avoid the word 'snippet' unless the surrounding docs already use it as a term of art
Keep inline method, function, and class references consistent with nearby docs, omitting empty parentheses for prose readability when no call is shown
Use descriptive anchor text that matches the destination title when possible for links
Avoid raw URLs in running text
Avoid generic anchor text such as 'here,' 'this page,' and 'read more'
Include acronyms in link text when a linked term includes an acronym
Do not link long sentences or multiple sentences
Avoid links that pull readers away from a procedure unless the link is a p...
Files:
README.md
**/README.md
📄 CodeRabbit inference engine (AGENTS.md)
Update
README.md, package READMEs, and binding-support notes when public behavior, package names, examples, or supported bindings change.Update binding-level README files when behavior differs by language.
Files:
README.md
README.md
📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)
Update
README.mdwhen the public surface or language-specific behavior changes.If docs-only changes modify commands, package names, or examples, run targeted checks such as
just docsorjust docs-linkcheckwhen links changed.
Files:
README.md
{README.md,docs/index.md}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update entry-point docs when examples or reading paths change
Files:
README.md
🪛 LanguageTool
docs/getting-started/quick-start/index.mdx
[style] ~14-~14: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pplication owns the tool or LLM call. - Use a supported integration guide when a fr...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
docs/build-plugins/dynamic-plugins/grpc-worker/grpc-worker-protocol.mdx
[style] ~127-~127: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...d callbacks if initialization fails. 5. Relay removes proxy callbacks before it sends...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
docs/build-plugins/language-binding/advanced-configuration.mdx
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...idate each unsupported enum or mode. 4. Validate unknown component-local fields and thei...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
README.md
[uncategorized] ~89-~89: Ger doublet «to to».
Context: ...Optionally set: - output_directory to .nemo-relay/atof - filename to events.jsonl - mode to `overwrit...
(GER_DOUBLET)
docs/integrate-into-frameworks/provider-response-codecs.mdx
[style] ~733-~733: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...o add the managed LLM boundary first. - Use [Observability](/configure-plugins/obse...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Will Killian <2007799+willkill07@users.noreply.github.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
lvojtku
left a comment
There was a problem hiding this comment.
minor comments and approved
Signed-off-by: Will Killian <wkillian@nvidia.com>
|
/merge |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/configure-plugins/about.mdx (1)
50-52: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winMention the Rust worker path here too.
This summary is now incomplete: the Build Plugins docs also cover the Rust gRPC worker path, not just Python workers. Update the blurb so authors don't miss the Rust entry point.
🤖 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/configure-plugins/about.mdx` around lines 50 - 52, The Build Plugins summary is missing the Rust gRPC worker path, so update the blurb in the about page to mention Rust alongside Python. Adjust the text near the Build Plugins reference so it explicitly includes the Rust worker entry point in the list of covered plugin components, keeping the wording concise and consistent with the existing summary.Source: Path instructions
docs/integrate-into-frameworks/provider-response-codecs.mdx (1)
400-406: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winClarify whether raw
total_tokensis preserved or dropped.This paragraph says
metrics.extracan carry a rawtotal_tokens, but the next sentence says total-only values are not projected. Please make the intended behavior explicit; as written, this reads as contradictory.🤖 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/integrate-into-frameworks/provider-response-codecs.mdx` around lines 400 - 406, Clarify the `metrics.extra` behavior in the provider response codecs documentation by making the `total_tokens` handling unambiguous. Update the paragraph around the ATIF/OpenInference cost and metrics description so it clearly states whether a raw `total_tokens` value from `usage`/`token_usage` is preserved in `metrics.extra` or dropped, and ensure the wording is consistent with the “total-only values are not projected” rule in this section.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.
Outside diff comments:
In `@docs/configure-plugins/about.mdx`:
- Around line 50-52: The Build Plugins summary is missing the Rust gRPC worker
path, so update the blurb in the about page to mention Rust alongside Python.
Adjust the text near the Build Plugins reference so it explicitly includes the
Rust worker entry point in the list of covered plugin components, keeping the
wording concise and consistent with the existing summary.
In `@docs/integrate-into-frameworks/provider-response-codecs.mdx`:
- Around line 400-406: Clarify the `metrics.extra` behavior in the provider
response codecs documentation by making the `total_tokens` handling unambiguous.
Update the paragraph around the ATIF/OpenInference cost and metrics description
so it clearly states whether a raw `total_tokens` value from
`usage`/`token_usage` is preserved in `metrics.extra` or dropped, and ensure the
wording is consistent with the “total-only values are not projected” rule in
this section.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: 69157d04-184a-496b-a890-ba53978b4c7a
📒 Files selected for processing (2)
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Preview docs
⚠️ CI failures not shown inline (5)
GitHub Actions: Build pull request / pr-builder _ run: docs: address review feedback
Conclusion: failure
##[group]Run if grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then
�[36;1mif grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then�[0m
�[36;1m echo "::error::$ERROR_MSG"�[0m
GitHub Actions: Build pull request / Check _ Run: docs: address review feedback
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Build pull request / 0_pr-builder _ run.txt: docs: address review feedback
Conclusion: failure
##[group]Run if grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then
�[36;1mif grep -n -R -E 'alternative\-gh\-token\-secret\-name\:' ./.github; then�[0m
�[36;1m echo "::error::$ERROR_MSG"�[0m
GitHub Actions: Build pull request / Check _ Run: docs: address review feedback
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Build pull request / 11_Check _ Run.txt: docs: address review feedback
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
🧰 Additional context used
📓 Path-based instructions (7)
**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
MDX top-of-file SPDX comments must use {/* ... */} delimiters instead of HTML comment delimiters (Must-Fix)
For documentation-site changes, run the docs build/validation flow (
just docsor./scripts/build-docs.sh html) so generated Fern API reference pages are refreshed before validation.In MDX files, top-of-file comments must use JSX comment delimiters
{/* ... */}for SPDX headers; do not use HTML comments
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
**/*.{rs,py,go,js,ts,jsx,tsx,md,mdx,toml,yaml,yml,html}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
All source files must include an SPDX license header using the comment syntax appropriate for the file type, with SPDX-FileCopyrightText for 2026 NVIDIA CORPORATION & AFFILIATES and SPDX-License-Identifier: Apache-2.0.
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
**/*.{rs,py,go,js,ts,md,mdx,toml,yaml,yml,json}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Avoid using
SONAR_IGNORE_START/SONAR_IGNORE_ENDexcept for documented false positives; keep the ignored block small, add a brief explanatory comment, and call it out in the PR description.
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
**/*.{md,mdx}: Keep package names, repository references, and build commands current in documentation and examples
Keep stable user-facing wrappers at thescripts/root in docs and examples; only point at namespaced helper paths when documenting internal maintenance work
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
{RELEASING.md,docs/**/*.md,docs/**/*.mdx}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep release-process and release-notes guidance in maintainer-facing docs such as RELEASING.md, not in user-facing docs pages or CHANGELOG.md
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
**
⚙️ 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 and the raw C FFI are experimental and source-first.
The shared runtime model is:
- Scope stacks decide where work belongs and which scope-local behavior is visible.
- Middleware registries decide what guardrails and intercepts run around managed calls.
- Plugins install reusable runtime behavior from configuration.
- Events record runtime behavior in ATOF form.
- 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, integrations, 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 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 skills/ # Published Codex/agent skills for NeMo Relay usage patternsPrerequisites
Insta...
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
{docs/**,README.md,CONTRIBUTING.md,RELEASING.md,SECURITY.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,CONTRIBUTING.md,RELEASING.md,SECURITY.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency across language bindings.
Flag stale examples, missing SPDX headers where required, and instructions that no longer match CI or pre-commit behavior.
Files:
docs/configure-plugins/about.mdxdocs/integrate-into-frameworks/provider-response-codecs.mdx
🔇 Additional comments (1)
docs/integrate-into-frameworks/provider-response-codecs.mdx (1)
72-82: LGTM!Also applies to: 341-344, 389-390, 410-419, 422-427
Overview
Reorganize and expand NeMo Relay plugin documentation, including built-in component configuration and all four plugin authoring paths.
Details
Configure Pluginsand add configuration guides for model pricing, discoverable plugins, and component-specific settings.Where should the reviewer start?
Start with
docs/build-plugins/about.mdx,docs/configure-plugins/about.mdx, andfern/docs.yml.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Validation
just docsjust docs-linkcheckuv run pre-commit run lycheeSummary by CodeRabbit
Documentation
Chores