·
11 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
We are proud to release NeMo Relay 0.4.0!
Key Features
- 🛡️ First-party PII redaction plugin with deterministic local backend support
- 🚦 Built-in NeMo Guardrails local backend support, so the
nemo_guardrailscomponent can run against either remote services or a Python-backed local worker. - ⚙️ Code-driven plugin configuration layered over materialized global, project, and user plugin files while preserving documented precedence.
- 📡 Streaming ATOF export endpoints for HTTP POST, WebSocket, and long-lived NDJSON collectors.
- 🗄️ ATIF HTTP storage export support alongside S3-compatible trajectory storage.
- 💸 Pricing-aware LLM observability with model-pricing lookup, cost layering, and cost metadata propagated into ATIF, OpenInference, and OpenTelemetry output.
- 🧭 Stronger coding-agent trace fidelity across Hermes, OpenClaw, Claude Code, and Codex, including nested subagent lineage, routed-provider spans, and error-path consistency.
- 🧩 Improved framework integration behavior for LangChain, LangGraph, and Deep Agents, including serialization fixes, callback coverage, and model-response annotations.
- 🔌 Host plugin installation for Claude Code and Codex, including native plugin manifests, and
install/uninstall/doctor --pluginsubcommands.
What's Changed
💥 Breaking Changes
- chore(guardrails)!: remove python-only guardrails example plugin by @afourniernv in #198
✨ New Features
- feat: Improve Hermes Relay hook injection and event alignment by @yczhang-nv in #205
- feat: add nested subagent session lineage for OpenClaw by @mnajafian-nv in #210
- feat: add ATIF HTTP storage export by @willkill07 in #231
- feat: add streaming ATOF endpoints by @willkill07 in #232
- feat: add LLM cost layering and pricing lookup by @AjayThorve in #236
- feat: add local backend for built-in nemo guardrails by @afourniernv in #197
- feat: layer code-driven plugin config over materialized file configs by @zhongxuanwang-nv in #211
- feat: add claude code and codex plugins by @willkill07 in #224
- feat: add PII redaction plugin crate with local backend by @afourniernv in #245
⚡ Improvements
- refactor: reduce SonarQube complexity findings by @willkill07 in #243
🐛 Bug Fixes
- fix: pass a real ScopeHandle to Node withScope callbacks by @zhongxuanwang-nv in #196
- fix: improve OpenClaw observability consistency by @mnajafian-nv in #203
- fix: remove race condition in LC integration tests by @dagardner-nv in #202
- fix: improve OpenClaw observability cost consistency by @mnajafian-nv in #206
- fix: add flattened OpenInference LLM attributes for annotations and replay by @mnajafian-nv in #207
- fix: Fix LangChain input serialization in callback handler and fix deadlock in
plugincontext manager by @dagardner-nv in #208 - fix: tighten OpenClaw ATOF hook-backed provenance metadata by @mnajafian-nv in #209
- fix: suppress Claude Code lifecycle noise by @AjayThorve in #213
- fix: preserve structured ATIF tool results by @dnandakumar-nv in #223
- fix: validate Hermes routed provider observability by @mnajafian-nv in #222
- fix: preserve Hermes error-path export consistency by @mnajafian-nv in #229
- fix: preserve Hermes tool-result ATIF observations by @mnajafian-nv in #233
- fix: resolve sanitized LLM request from annotations by @fallintoplace in #241
- fix: avoid ATIF shutdown subscriber deadlock by @willkill07 in #242
- fix: annotate Deep Agents model responses by @willkill07 in #246
- fix: include pii redaction in version updates by @willkill07 in #251
- fix: configure gateway body limits by @willkill07 in #261
✅ Tests
- test: validate OpenClaw nested subagent exports by @mnajafian-nv in #214
- test: validate OpenClaw placeholder replay exports by @mnajafian-nv in #217
- test: tighten Hermes wrapped observability contract by @mnajafian-nv in #215
- test: validate OpenClaw model timing diagnostic exports by @mnajafian-nv in #218
- test: cover Hermes wrapped ATIF fidelity and cost by @mnajafian-nv in #219
- test: validate OpenClaw hook-only fallback exports by @mnajafian-nv in #220
- test: add NeMo Relay skill eval datasets by @abhisawa-Nvidia in #225
- test: validate Hermes routed provider OpenInference spans by @mnajafian-nv in #235
- test: add Codex observability contract coverage by @yczhang-nv in #234
- test: regenerate NeMo Relay evals by @abhisawa-Nvidia in #226
- test: validate Hermes subagent lineage and orphan export coverage by @mnajafian-nv in #240
- test(wasm): drop --test-force-exit to avoid Windows libuv abort by @zhongxuanwang-nv in #247
- test: raise Rust and CLI coverage by @willkill07 in #259
🧰 Maintenance
- chore: prepare 0.3 code freeze by @willkill07 in #177
- ci: snapshot release docs from tag source by @willkill07 in #194
- ci: use current docs helper for release snapshots by @willkill07 in #195
- ci: stop nightly alpha tags for release 0.3 by @willkill07 in #204
- ci: add NVSkills CI request workflow by @keshprad in #228
- chore: update dependencies by @willkill07 in #239
- chore: Set status on OTel spans by @dagardner-nv in #221
- chore: update codeowners by @willkill07 in #244
- chore: isolate Rust tests and address Sonar issues by @willkill07 in #257
📝 Documentation Updates
- docs: flush subscribers before deregister in package README examples by @zhongxuanwang-nv in #201
- docs: register plugin kind before activating it in the plugin guide by @zhongxuanwang-nv in #200
- docs: clarify Hermes integration paths by @mnajafian-nv in #249
- docs: clarify exporter failure behavior by @willkill07 in #254
- docs: pii redaction documentation by @afourniernv in #252
- docs: update 0.4 release notes by @willkill07 in #262
- docs: improve Relay onboarding flow by @willkill07 in #256
New Contributors
- @dnandakumar-nv made their first contribution in #223
- @abhisawa-Nvidia made their first contribution in #225
- @keshprad made their first contribution in #228
- @fallintoplace made their first contribution in #241