Release Notes for NVIDIA NeMo Relay
This page contains the release notes for NVIDIA NeMo Relay.
Release 0.9
NeMo Relay 0.9 is under development. This page will track its user-visible changes, compatibility updates, and fixed known issues.
Known Issues in 0.9
- OTLP collectors can return a successful response while rejecting individual spans, log records, or metric data points. Relay does not report these partial successes in runtime diagnostics, and flush or shutdown can still succeed. Monitor collector-side rejection metrics and logs; see OpenTelemetry.
- Go and the raw C FFI remain experimental and source-first. Generated API pages focus on Rust, Python, and Node.js.
- Local coding-agent observability depends on host hooks and provider traffic reaching the local gateway. Relay cannot fully capture remote or cloud execution that bypasses the local host.
- Persistent Codex and Claude Code integrations use user-scoped
configuration and a shared loopback gateway. Use
nemo-relay runwhen a launch must retain project-specific configuration. - On Windows, a restrictive host Job Object can limit gateway reuse or prevent
persistent bootstrap. Codex can also make a cold-start
/modelsrequest before required MCP servers start; Relay retries the request. - Codex 0.143 does not expose
SessionEnd, and Codex multi-agent v2 encrypts delegated-task payloads that Relay cannot decrypt or reliably link. - The Node.js binding and package workflows require Node.js 24 or later.
- OpenClaw has public hook-backed telemetry. Its security and optimization coverage is partial because it does not own a managed execution path.
- The built-in
nemo_guardrailsplugin is deprecated and scheduled for removal in NeMo Relay 0.9. No replacement is included. Until removal, the remote backend inherits its configured service’s availability, latency, and policy behavior, and the local backend requires Python 3.11 or later andnemoguardrails==0.22.0. Removal will include the built-in component kind, the publicnemo_relay::plugins::nemo_guardrailsRust module, its CLI editor entry, and theguardrails-remoteCargo feature. - The PII redaction plugin currently supports its deterministic local backend; local-model backend configuration is reserved for future work.
- Pricing and optimization estimates depend on model names, token data, pricing sources, and freshness evidence. Missing or inconsistent evidence produces partial or absent cost fields rather than zero values.
- ATOF stream sinks and remote ATIF storage require reachable, correctly configured destinations. A failed stream sink does not stop file output or other active sinks.
- ATIF omits point-in-time marks. Use ATOF for the canonical mark stream;
the
gen_aiOpenTelemetry projection also omits marks. Thefullandopeninferenceprojections retain their fixed native mark handling. - Native dynamic plugins run in the Relay process and are not sandboxed. A
grpc-v1worker runs in a separate process, but that process is not a security sandbox. - Treat Python
LLMRequestobjects as immutable. Request middleware that changes content must return a new request object. - Native subscriber callbacks arrive asynchronously. Flush subscribers before depending on their side effects, captured events, files, or exporter output.
- OpenTelemetry endpoints use finite batch queues. A burst that fills an
endpoint queue drops completed spans without applying backpressure and can
leave an incomplete trace, including a missing root span. The SDK warns on
the first drop and reports the exact dropped-span count during graceful
shutdown. Configure
max_queue_size,max_export_batch_size, andscheduled_delay_millisindependently on each endpoint, or use the standardOTEL_BSP_*environment variables as process-wide fallbacks. A larger finite queue does not guarantee lossless telemetry. - Operational logging configuration and sink lifecycle are available, but broad operational log coverage across commands is not yet available.
Previous Releases
For previous release notes, release artifacts, and the complete PR-by-PR history, refer to GitHub Releases.