Skip to content

Commit ecb04ee

Browse files
authored
docs: clarify Relay ecosystem boundaries (#701)
#### Overview Clarify Relay's role across the NVIDIA NeMo ecosystem, agent frameworks, and observability systems. - [x] I confirm this contribution is my own work, or I have the right to submit it under this project's license. - [x] I searched existing issues and open pull requests, and this does not duplicate existing work. #### Details - Separate model development, inference serving, deployment, observability, and evaluation responsibilities. - Link named NVIDIA systems to their authoritative documentation. - Describe each system's role separately from how it connects to Relay. - Add concrete OpenTelemetry observability and ATIF evaluation flows. - Replace callback-heavy ownership details with plain framework-owned and Relay-received boundaries. #### Where should the reviewer start? Start with the ecosystem relationship table and the two export flows in `docs/about-nemo-relay/ecosystem.mdx`. #### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) - Closes [RELAY-619](https://linear.app/nvidia/issue/RELAY-619/clarify-relays-place-in-the-nemo-ecosystem) ## Summary by CodeRabbit * **Documentation** * Updated the ecosystem overview with a clearer NeMo Relay systems overview and tooling relationships. * Added explicit coverage for Rust, Python, Node.js, Go, and C FFI support. * Clarified observability flows, including lifecycle events, OpenTelemetry/OpenInference export, OTLP collection, and ATIF evaluation. * Reworked framework integration guidance with responsibilities, inputs, integration methods, and relevant documentation links. Authors: - Alex Fournier (https://github.com/afourniernv) Approvers: - https://github.com/lvojtku URL: #701
1 parent 8bb58cc commit ecb04ee

1 file changed

Lines changed: 75 additions & 64 deletions

File tree

docs/about-nemo-relay/ecosystem.mdx

Lines changed: 75 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { MermaidStyles } from "@/components/MermaidStyles";
88
{/* SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
99
SPDX-License-Identifier: Apache-2.0 */}
1010

11-
1211
NeMo Relay is the agent execution runtime layer in the NVIDIA NeMo ecosystem. It
1312
does not replace an agent framework, model provider, guardrail authoring system,
1413
or deployment platform. Instead, it gives those systems one shared way to model
@@ -19,23 +18,26 @@ Use this page to understand where NeMo Relay fits:
1918

2019
- Inside the NVIDIA NeMo software stack
2120
- Inside agent frameworks, harnesses, and provider adapters
22-
- Across the Rust, Python, Node.js, Go, and C FFI surfaces in this
21+
- Across the Rust, Python, Node.js, Go, and C FFI bindings in this
2322
repository
2423

25-
## How NeMo Relay Fits In The NVIDIA NeMo Ecosystem
24+
## How NeMo Relay Fits in the NVIDIA NeMo Ecosystem
2625

2726
The NVIDIA NeMo ecosystem spans model development, agent construction,
2827
guardrailing, inference, optimization, and runtime operations. NeMo Relay has a
29-
narrower responsibility: it is the portable execution substrate that agent
30-
systems can call when actual work crosses a scope, tool, or model boundary.
28+
narrower responsibility: it tracks and controls work across scopes, tools, and
29+
models.
3130

32-
| Layer | Typical Responsibility | NeMo Relay Relationship |
31+
| System | Role | How It Connects to NeMo Relay |
3332
|---|---|---|
34-
| NeMo model, inference, and deployment components | Provide or serve the models an agent uses. | NeMo Relay records and controls LLM execution boundaries, but it does not train, host, or route model inference by itself. |
35-
| NeMo Agent Toolkit and agent application frameworks | Build, run, profile, and optimize agent workflows across tools, data sources, and framework choices. | NeMo Relay can sit below these systems as the shared runtime contract for scopes, middleware, lifecycle events, subscribers, and plugins. |
36-
| NeMo Guardrails and policy systems | Define safety, control, and compliance behavior for LLM applications. | NeMo Relay can host runtime guardrails and intercepts around managed tool and LLM calls, while higher-level guardrail systems can still own policy authoring and orchestration. |
37-
| Application harnesses and workflow code | Decide the agent pattern, planner, memory, retries, scheduling, and user-facing behavior. | NeMo Relay instruments the execution boundaries that the harness already owns. |
38-
| Observability and evaluation backends | Store traces, trajectories, metrics, and analysis data. | NeMo Relay emits lifecycle events and exports them to in-process subscribers, Agent Trajectory Observability Format (ATOF), Agent Trajectory Interchange Format (ATIF), typed OpenTelemetry projections including OpenInference-compatible traces, or other backends. |
33+
| [NVIDIA NeMo Framework](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemotoolkit/index.html) | Build and customize generative AI models. | Applications can instrument calls to models produced with NeMo Framework. Relay does not train or customize the model. |
34+
| [NVIDIA NIM for Large Language Models](https://docs.nvidia.com/nim/large-language-models/latest/introduction.html) | Serve LLM inference through production endpoints. | Relay can observe or control client requests to a NIM endpoint. Relay does not host the endpoint. |
35+
| [NVIDIA Dynamo](https://docs.nvidia.com/dynamo) | Deploy and scale distributed inference services. | Applications can send Relay-managed model calls to a Dynamo-served endpoint. Relay does not schedule or operate the inference workers. |
36+
| [NeMo Agent Toolkit](https://docs.nvidia.com/nemo/agent-toolkit/latest/) and agent application frameworks | Build, run, profile, and optimize agent workflows across tools, data sources, and framework choices. | A framework integration can give Relay tool or LLM callbacks to manage, or emit lifecycle events when the framework invokes the callbacks itself. |
37+
| [NeMo Guardrails](https://docs.nvidia.com/nemo-guardrails/index.html) and policy systems | Define safety, control, and compliance behavior for LLM applications. | Relay can run configured guardrails and intercepts around managed tool and LLM calls while the policy system owns policy authoring. |
38+
| Application harnesses and workflow code | Decide the agent pattern, planner, memory, retries, scheduling, and user-facing behavior. | NeMo Relay instruments the tool and model calls that the harness already invokes. |
39+
| Observability backends | Store and query traces, logs, and metrics. | Relay exporters can project lifecycle events into OpenTelemetry or OpenInference-compatible traces and send them through an OTLP pipeline. |
40+
| Trajectory and evaluation systems | Replay or evaluate completed agent runs. | Relay can project lifecycle events into Agent Trajectory Interchange Format (ATIF) artifacts for offline analysis, replay, or evaluation. |
3941

4042
In practical terms, NeMo Relay answers a different question than higher-level
4143
agent products. A framework asks, "What should the agent do next?" NeMo Relay
@@ -44,91 +46,100 @@ what events are emitted, and which subscribers can consume the result?"
4446

4547
## How NeMo Relay Relates to Other Tooling
4648

47-
NeMo Relay is an execution-time runtime contract. It captures work at the
48-
scope, tool, and LLM boundaries, and can apply middleware before or around that
49-
work. Telemetry conventions and observability or evaluation products serve
49+
NeMo Relay runs alongside application code while the agent is executing. It
50+
captures scope, tool, and LLM activity and can apply middleware before or around
51+
that work. Telemetry conventions and observability or evaluation products serve
5052
different roles and can be used alongside Relay.
5153

5254
| Tooling | Primary Role | Relationship to NeMo Relay |
5355
|---|---|---|
54-
| OpenTelemetry GenAI conventions | Define a common representation for AI telemetry. | Relay owns runtime capture and control, then can export its lifecycle events as generic OTLP spans for an existing OpenTelemetry tracing pipeline. |
55-
| Langfuse, LangSmith, and Arize Phoenix | Store, explore, and evaluate traces and agent runs. | These products are outside Relay's execution control loop. Use Relay to establish consistent execution boundaries and event data, then send data through the configured subscriber or export path that fits your backend. |
56+
| [OpenTelemetry GenAI conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/) | Define common attributes and span conventions for AI telemetry. | Relay captures and controls runtime activity, then can export lifecycle events through its typed OpenTelemetry projections. |
57+
| Langfuse, LangSmith, Arize Phoenix, and other observability products | Store and explore traces or agent runs. | These products do not run the agent's tool or model calls. They consume data from a configured export path. |
5658

5759
Relay is not a replacement for a telemetry standard or an observability backend.
5860
Its role is to make the real execution path observable and controllable before
5961
the resulting lifecycle data is stored, visualized, or evaluated elsewhere.
6062

6163
<MermaidStyles />
6264

65+
The following diagram shows how Relay connects application execution to
66+
observability and evaluation systems.
67+
6368
```mermaid
6469
flowchart TB
65-
User[User / Application]
66-
Framework[Agent Framework or Harness]
67-
Toolkit[NeMo Agent Toolkit / Framework Integrations]
70+
App[Application]
71+
Framework[Agent Toolkit / Framework / Harness]
6872
Relay[NeMo Relay Runtime]
69-
Provider[Model, Tool, or Provider SDK]
70-
Obs[Subscribers and Observability Backends]
73+
Provider[Model or Tool Provider]
7174
Policy[Guardrails, Intercepts, and Plugins]
72-
73-
User --> Framework
74-
Framework --> Toolkit
75-
Toolkit --> Relay
76-
Framework -. direct instrumentation .-> Relay
75+
Events[Canonical Lifecycle Events]
76+
77+
subgraph ObservabilityFlow[Observability Flow]
78+
OTel[OpenTelemetry or OpenInference Exporter]
79+
Collector[OTLP Collector]
80+
Backend[Observability Backend]
81+
OTel --> Collector --> Backend
82+
end
83+
84+
subgraph EvaluationFlow[Trajectory and Evaluation Flow]
85+
ATIF[ATIF Exporter]
86+
Evaluation[Replay or Evaluation System]
87+
ATIF --> Evaluation
88+
end
89+
90+
App --> Framework --> Relay
91+
App -. direct instrumentation .-> Relay
7792
Relay --> Provider
7893
Policy --> Relay
79-
Relay --> Obs
94+
Relay --> Events
95+
Events --> OTel
96+
Events --> ATIF
8097
8198
class Framework yellow-lightest;
82-
class Toolkit blue-lightest;
8399
class Relay green-light;
84100
class Provider purple-lightest;
85-
class Obs grey-light;
86101
class Policy green-lightest;
102+
class Events blue-lightest;
103+
class ObservabilityFlow,EvaluationFlow grey-lightest;
87104
```
88105

89-
The dotted path matters. An application or custom harness can call NeMo Relay
90-
directly without adopting a higher-level framework. A framework integration can
91-
also call NeMo Relay on behalf of application code when the framework owns the
92-
tool or provider boundary.
106+
The dotted path shows that an application can call Relay directly without
107+
adopting a higher-level framework. In the observability flow, Relay projects
108+
events into traces and sends them through an OTLP collector. In the trajectory
109+
flow, Relay writes ATIF artifacts for replay or evaluation.
93110

94-
## How NeMo Relay Fits Agent Frameworks And Harnesses
111+
## How NeMo Relay Fits Agent Frameworks and Harnesses
95112

96113
The agent framework and harness landscape is intentionally mixed. A team might
97114
use NeMo Agent Toolkit, LangChain, LangGraph, an internal orchestration layer, a
98115
provider SDK, or direct application code. NeMo Relay is designed to meet those
99-
systems at stable execution boundaries instead of requiring one framework shape.
116+
systems at tool, model, and lifecycle hooks, so they do not need to use one
117+
common API.
100118

101-
| Integration Point | Use NeMo Relay For | Keep In The Framework Or Harness |
102-
|---|---|---|
103-
| Request, run, workflow, or agent lifecycle hooks | Create scopes, emit scope start and end events, and isolate concurrent work. | Scheduling, routing, retry policy, planner choice, memory, and user session state. |
104-
| Tool invocation callbacks | Run managed tool execution, apply tool middleware, emit tool lifecycle events, and preserve parent scope context. | Tool discovery, tool schema presentation, framework-specific callback signatures, and application-visible result handling. |
105-
| LLM or provider adapter calls | Run managed LLM execution, attach model metadata, apply LLM middleware, handle stream lifecycle events, and emit normalized observability payloads. | Provider clients, authentication, transport, provider-native request objects, and provider-specific response types. |
106-
| Framework internals that cannot hand over a callback | Use explicit lifecycle APIs, request-intercept helpers, guardrail helpers, or mark events. | The actual invocation path when the framework must retain control. |
107-
| Cross-cutting behavior | Package middleware, subscribers, adaptive behavior, and reusable policy as plugins. | Framework configuration, agent definitions, deployment topology, and business logic. |
108-
109-
Prefer a managed execution wrapper when a framework exposes a stable callback
110-
that NeMo Relay can own. Use explicit lifecycle calls or standalone helpers when
111-
the framework owns the callback internally but exposes reliable start, finish, or
112-
request transformation hooks.
119+
The framework or harness continues to manage:
120+
121+
- Agent orchestration, planning, memory, retries, and scheduling.
122+
- Tool discovery, schemas, and application-visible results.
123+
- Provider clients, authentication, transport, and provider-native objects.
124+
- Public callback signatures and framework-specific behavior.
113125

114-
This lets NeMo Relay provide consistent runtime semantics without forcing a
115-
framework migration:
126+
Relay can receive:
116127

117-
- Applications keep their existing agent orchestration model
118-
- Framework adapters preserve public behavior and callback signatures
119-
- Non-serializable provider objects stay in framework-owned storage
120-
- NeMo Relay receives JSON-compatible payloads for middleware and events
121-
- Subscribers see a consistent scope, tool, and LLM event stream across integrations
128+
- The scope and parent for work that should be observed.
129+
- A tool or LLM function when Relay can invoke it through managed execution.
130+
- Start and end lifecycle notifications when the framework invokes the function.
131+
- JSON-compatible observability payloads and metadata for events and middleware.
122132

123-
## Related Topics
133+
Prefer a managed execution wrapper when a framework lets NeMo Relay invoke the
134+
tool or LLM function. Use explicit lifecycle calls or standalone helpers when
135+
the framework invokes the function but exposes reliable start, finish, or
136+
request transformation hooks.
124137

125-
Use these links to continue into adjacent concepts and workflows.
138+
This arrangement lets subscribers see a consistent scope, tool, and LLM event
139+
stream without changing the framework's public behavior.
126140

127-
- [NVIDIA NeMo documentation](https://docs.nvidia.com/nemo/index.html)
128-
- [NVIDIA NeMo Agent Toolkit documentation](https://docs.nvidia.com/nemo/agent-toolkit/latest/)
129-
- [NVIDIA NeMo Guardrails documentation](https://docs.nvidia.com/nemo-guardrails/index.html)
130-
- [Integrate into Frameworks](/integrate-into-frameworks/about)
131-
- [Adding Framework Scopes](/integrate-into-frameworks/adding-scopes)
132-
- [Wrapping Tool Calls](/integrate-into-frameworks/wrap-tool-calls)
133-
- [Wrapping LLM Calls](/integrate-into-frameworks/wrap-llm-calls)
134-
- [Language Binding Plugins](/build-plugins/language-binding/about)
141+
Refer to [Integrate into Frameworks](/integrate-into-frameworks/about) to choose
142+
an integration method. Use [Adding Framework Scopes](/integrate-into-frameworks/adding-scopes)
143+
for lifecycle hooks, or [Wrapping Tool Calls](/integrate-into-frameworks/wrap-tool-calls)
144+
and [Wrapping LLM Calls](/integrate-into-frameworks/wrap-llm-calls) when Relay
145+
can invoke the function.

0 commit comments

Comments
 (0)