docs: clarify ATOF and ATIF subscriber roles - #705
Conversation
Signed-off-by: Alex Fournier <afournier@nvidia.com>
WalkthroughThe subscriber documentation now identifies ATOF as the event-stream source, explains ATOF and ATIF representations, documents raw-event retention, and clarifies subscriber and exporter integration options. ChangesSubscriber Event Stream
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Signed-off-by: Alex Fournier <afournier@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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/about-nemo-relay/concepts/subscribers.mdx`:
- Around line 74-76: Update the table headers in the subscribers documentation
table: change “What it represents” to “What It Represents” and “What subscribers
or exporters do with it” to “What Subscribers or Exporters Do With It,” while
leaving the other headers and table content unchanged.
- Around line 79-83: Update the ATIF limitation explanation near the discussion
of ATOF marks and ATIF `steps` to explicitly state that steps omit point-in-time
marks and are not a lossless event log. Also state that nested scope lineage and
raw events in `extra.observed_events` continue to support the documented offline
analysis, replay, and debugging workflows.
🪄 Autofix
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: a76a063e-40d8-4750-824b-5457534d6b83
📒 Files selected for processing (1)
docs/about-nemo-relay/concepts/subscribers.mdx
📜 Review details
🧰 Additional context used
📓 Path-based instructions (11)
**/*.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)
**/*.mdx: In MDX files, top-of-file comments must use JSX comment delimiters ({/*and*/}); do not use HTML comments for MDX SPDX headers.
New or regenerated MDX files must use{/* ... */}for top-of-file SPDX comments.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
{docs,examples}/**/*
📄 CodeRabbit inference engine (.agents/skills/rename-surfaces/SKILL.md)
Update docs and examples.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*: Format changed files with the language-native formatter before the final lint/test pass.
If dynamic plugin behavior changed, usemaintain-dynamic-pluginsand include the native SDK, worker protocol, Python SDK, docs, packaging, and Codecov surfaces in the validation plan.
If code changes alter APIs, bindings, commands, paths, packaging behavior, observability/adaptive semantics, or documented best practices, update any dependent maintainer or consumer skills in the same branch.
During iteration, preferuv run pre-commit run --files <changed files...>.
Before review or handoff, runuv run pre-commit run --all-files.
**/*: Use release tags in raw Rust-compatible SemVer without a leadingv; tags such asv0.1.0are prohibited.
Use branch prefixesfeat/,fix/,docs/,test/, orrefactor/according to the change purpose.
Every commit in a pull request must include a DCOSigned-off-by:sign-off.
Before submitting a pull request, ensure pre-commit hooks, relevant tests, target-specific builds, documentation updates, and a rebase on the latestmainare complete.
Use commit messages in the formtype: short description, with a valid type and a first line under 72 characters.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
docs/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If documentation examples or commands under
docs/change, run the targeted docs checks appropriate to the change.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If links in documentation change, run
just docs-linkcheck.Use documented public APIs and stable wrapper commands in examples and user-facing documentation; do not rely on internal helpers.
**/*.{md,mdx}: Prefer the documented public API over internal shortcuts in documentation and examples.
Keep package names, repository references, and build commands current.
Contribution workflow documentation must require an issue before external contribution pull requests and note that NVIDIA contributors may use a GitHub or Linear issue.
Update entry-point documentation when examples or reading paths change.
Keep release-process and release-notes guidance in maintainer documentation such asRELEASING.md, rather than user-facing documentation pages orCHANGELOG.md.
Use stable user-facing wrappers at thescripts/root in documentation and examples; reference namespaced helper paths only for internal maintenance documentation.
When detailed dynamic plugin guides exist, keep Rust native plugin examples, Python worker plugin examples, andgrpc-v1protocol details on separate pages.
Dynamic plugin manifests in documentation and examples should usecompat.relay = ">=0.5,<1.0"unless deliberately narrower.
Render images, diagrams, tables, and other visual content at representative page widths, ensuring legibility and complete access without clipping; use responsive scaling, reflow, or overflow as appropriate and scope visual styling narrowly.
Dynamic plugin entry pages should link to native, worker, Rust example, Python example, and protocol pages when those pages exist.
Images, diagrams, tables, and custom visual content must remain legible and fully accessible at representative desktop and narrow page widths.
Release-policy documentation must point to GitHub Releases as the only release-history source of truth.
Runjust docswhen the documentation site changes; retain./scripts/build-docs.sh htmlas the compatibility wrapper.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{md,mdx,py,go,js,ts}
📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)
Examples and documentation must use each exporter's documented flush/deregister order before shutdown.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
docs/{about-nemo-relay/concepts/subscribers.mdx,configure-plugins/observability/**/*.mdx}
📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)
Update observability documentation and examples alongside implementation changes, including configuration version 3 with one
opentelemetrysection containing typed endpoints and no standalone public OpenInference surface.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
docs/**/*.{md,mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant reference documentation when public behavior or APIs change.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{rs,py,go,js,jsx,ts,tsx,c,h,html,md,mdx,toml}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Include the appropriate SPDX copyright and Apache-2.0 license header in every source file.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-technical-docs.md)
**/*.{md,mdx,rst}: Use title case consistently for technical documentation headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title case.
Format code elements, commands, parameters, package names, expressions, directories, file names, and paths in monospace; represent path placeholders with angle brackets inside monospace.
Format UI buttons, menus, fields, and labels in bold, and separate consecutive UI navigation labels with>.
Use quotation marks for error messages and strings when appropriate, italics for newly introduced terms and publication titles, and plain text for keyboard shortcuts.
Represent GitHub repositories with owner/repository link text, such as[NVIDIA/NeMo](link), rather than generic repository wording.
Introduce every code block with a complete sentence; do not let a code block complete or interrupt the grammar of surrounding prose; use syntax highlighting when supported.
Keep inline method, function, and class references consistent with nearby documentation; omit empty parentheses in prose when no call is shown.
Use descriptive link text matching the destination title when possible; avoid raw URLs, generic anchors, long-sentence links, and unnecessary links that distract from procedures.
Ensure lists have a complete lead-in sentence, more than one item, no more than two levels, parallel construction, one idea or action per item, and appropriate punctuation; use bullets for unordered items and numbers for ordered tasks.
Format definition lists with a bold term followed by a complete, parallel, punctuated definition.
Use tables for reference information, decision support, compatibility matrices, and comparable choices; flag one-row tables, missing captions or lead-ins, sentence-case headers where title case is expected, unexplained empty cells, and code or links that would be clearer as prose.
Write procedure steps as imperative ...
Files:
docs/about-nemo-relay/concepts/subscribers.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/about-nemo-relay/concepts/subscribers.mdx
🔇 Additional comments (8)
docs/about-nemo-relay/concepts/subscribers.mdx (8)
18-20: LGTM!
34-37: LGTM!
86-86: 📐 Maintainability & Code QualityRun the required documentation checks for the new link.
This hunk adds
/configure-plugins/observability/atif. Verifyjust docs-linkcheckandjust docsbefore handoff.As per coding guidelines, if links in documentation change, run
just docs-linkcheck; when the documentation site changes, runjust docs.Source: Coding guidelines
102-112: LGTM!
144-147: LGTM!
248-248: LGTM!
265-265: LGTM!
76-77: 🎯 Functional CorrectnessKeep the ATOF wording unchanged. ATOF defines
ScopeEventandMarkEvent; tool and LLM are scope categories, and middleware is not an event kind.> Likely an incorrect or invalid review comment.
Signed-off-by: Alex Fournier <afournier@nvidia.com>
There was a problem hiding this comment.
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 `@docs/about-nemo-relay/concepts/subscribers.mdx`:
- Around line 76-77: Update the ATOF row in the format table to state that the
exporter emits scope, tool, LLM, middleware, and mark events as raw JSONL
records. Leave the ATIF row unchanged.
🪄 Autofix
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: 7ca4b79c-3603-494c-868d-da4c5e2a28f1
📒 Files selected for processing (1)
docs/about-nemo-relay/concepts/subscribers.mdx
📜 Review details
🧰 Additional context used
📓 Path-based instructions (11)
**/*.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)
**/*.mdx: In MDX files, top-of-file comments must use JSX comment delimiters ({/*and*/}); do not use HTML comments for MDX SPDX headers.
New or regenerated MDX files must use{/* ... */}for top-of-file SPDX comments.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
{docs,examples}/**/*
📄 CodeRabbit inference engine (.agents/skills/rename-surfaces/SKILL.md)
Update docs and examples.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*: Format changed files with the language-native formatter before the final lint/test pass.
If dynamic plugin behavior changed, usemaintain-dynamic-pluginsand include the native SDK, worker protocol, Python SDK, docs, packaging, and Codecov surfaces in the validation plan.
If code changes alter APIs, bindings, commands, paths, packaging behavior, observability/adaptive semantics, or documented best practices, update any dependent maintainer or consumer skills in the same branch.
During iteration, preferuv run pre-commit run --files <changed files...>.
Before review or handoff, runuv run pre-commit run --all-files.
**/*: Use release tags in raw Rust-compatible SemVer without a leadingv; tags such asv0.1.0are prohibited.
Use branch prefixesfeat/,fix/,docs/,test/, orrefactor/according to the change purpose.
Every commit in a pull request must include a DCOSigned-off-by:sign-off.
Before submitting a pull request, ensure pre-commit hooks, relevant tests, target-specific builds, documentation updates, and a rebase on the latestmainare complete.
Use commit messages in the formtype: short description, with a valid type and a first line under 72 characters.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
docs/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If documentation examples or commands under
docs/change, run the targeted docs checks appropriate to the change.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If links in documentation change, run
just docs-linkcheck.Use documented public APIs and stable wrapper commands in examples and user-facing documentation; do not rely on internal helpers.
**/*.{md,mdx}: Prefer the documented public API over internal shortcuts in documentation and examples.
Keep package names, repository references, and build commands current.
Contribution workflow documentation must require an issue before external contribution pull requests and note that NVIDIA contributors may use a GitHub or Linear issue.
Update entry-point documentation when examples or reading paths change.
Keep release-process and release-notes guidance in maintainer documentation such asRELEASING.md, rather than user-facing documentation pages orCHANGELOG.md.
Use stable user-facing wrappers at thescripts/root in documentation and examples; reference namespaced helper paths only for internal maintenance documentation.
When detailed dynamic plugin guides exist, keep Rust native plugin examples, Python worker plugin examples, andgrpc-v1protocol details on separate pages.
Dynamic plugin manifests in documentation and examples should usecompat.relay = ">=0.5,<1.0"unless deliberately narrower.
Render images, diagrams, tables, and other visual content at representative page widths, ensuring legibility and complete access without clipping; use responsive scaling, reflow, or overflow as appropriate and scope visual styling narrowly.
Dynamic plugin entry pages should link to native, worker, Rust example, Python example, and protocol pages when those pages exist.
Images, diagrams, tables, and custom visual content must remain legible and fully accessible at representative desktop and narrow page widths.
Release-policy documentation must point to GitHub Releases as the only release-history source of truth.
Runjust docswhen the documentation site changes; retain./scripts/build-docs.sh htmlas the compatibility wrapper.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{md,mdx,py,go,js,ts}
📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)
Examples and documentation must use each exporter's documented flush/deregister order before shutdown.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
docs/{about-nemo-relay/concepts/subscribers.mdx,configure-plugins/observability/**/*.mdx}
📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)
Update observability documentation and examples alongside implementation changes, including configuration version 3 with one
opentelemetrysection containing typed endpoints and no standalone public OpenInference surface.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
docs/**/*.{md,mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant reference documentation when public behavior or APIs change.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{rs,py,go,js,jsx,ts,tsx,c,h,html,md,mdx,toml}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Include the appropriate SPDX copyright and Apache-2.0 license header in every source file.
Files:
docs/about-nemo-relay/concepts/subscribers.mdx
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-technical-docs.md)
**/*.{md,mdx,rst}: Use title case consistently for technical documentation headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title case.
Format code elements, commands, parameters, package names, expressions, directories, file names, and paths in monospace; represent path placeholders with angle brackets inside monospace.
Format UI buttons, menus, fields, and labels in bold, and separate consecutive UI navigation labels with>.
Use quotation marks for error messages and strings when appropriate, italics for newly introduced terms and publication titles, and plain text for keyboard shortcuts.
Represent GitHub repositories with owner/repository link text, such as[NVIDIA/NeMo](link), rather than generic repository wording.
Introduce every code block with a complete sentence; do not let a code block complete or interrupt the grammar of surrounding prose; use syntax highlighting when supported.
Keep inline method, function, and class references consistent with nearby documentation; omit empty parentheses in prose when no call is shown.
Use descriptive link text matching the destination title when possible; avoid raw URLs, generic anchors, long-sentence links, and unnecessary links that distract from procedures.
Ensure lists have a complete lead-in sentence, more than one item, no more than two levels, parallel construction, one idea or action per item, and appropriate punctuation; use bullets for unordered items and numbers for ordered tasks.
Format definition lists with a bold term followed by a complete, parallel, punctuated definition.
Use tables for reference information, decision support, compatibility matrices, and comparable choices; flag one-row tables, missing captions or lead-ins, sentence-case headers where title case is expected, unexplained empty cells, and code or links that would be clearer as prose.
Write procedure steps as imperative ...
Files:
docs/about-nemo-relay/concepts/subscribers.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/about-nemo-relay/concepts/subscribers.mdx
🔇 Additional comments (8)
docs/about-nemo-relay/concepts/subscribers.mdx (8)
18-18: LGTM!
34-37: LGTM!
64-68: LGTM!Also applies to: 74-75
79-87: LGTM!
104-114: LGTM!
146-149: LGTM!
250-250: LGTM!
267-267: LGTM!
| | ATOF | The canonical record for each Relay scope lifecycle event or mark | Subscribers receive these events directly. The ATOF JSONL exporter writes one raw event per line. | | ||
| | ATIF | A trajectory projection assembled from related ATOF events | The ATIF exporter maps model and tool activity into trajectory steps for analysis, replay, or evaluation. | |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- target document ---'
sed -n '1,130p' docs/about-nemo-relay/concepts/subscribers.mdx
printf '%s\n' '--- related ATOF/ATIF documentation files ---'
fd -i -t f 'atof|atif|observab|subscriber' docs examples README.md 2>/dev/null | sort
printf '%s\n' '--- exporter and event terminology ---'
rg -n -i --glob '!node_modules/**' --glob '!dist/**' \
'ATOF|ATIF|trajectory steps|model steps|tool calls|observations|middleware events|LLM events|scope lifecycle' \
docs examples src 2>/dev/null | head -240Repository: NVIDIA/NeMo-Relay
Length of output: 1920
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- target document ---'
sed -n '65,85p' docs/about-nemo-relay/concepts/subscribers.mdx
printf '%s\n' '--- candidate documentation and source files ---'
git ls-files | grep -Ei '(^|/)(atof|atif|observab|subscriber|export)' | head -200
printf '%s\n' '--- all relevant terminology ---'
rg -n -i --glob '*.md' --glob '*.mdx' --glob '*.rs' --glob '*.py' --glob '*.go' --glob '*.js' --glob '*.ts' \
'ATOF|ATIF|trajectory steps|model steps|tool calls|observations|middleware events|LLM events|scope lifecycle' . | head -300Repository: NVIDIA/NeMo-Relay
Length of output: 1920
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- target table ---'
sed -n '70,82p' docs/about-nemo-relay/concepts/subscribers.mdx
printf '%s\n' '--- exact references ---'
rg -n -i --glob '*.mdx' --glob '*.md' --glob '*.rs' --glob '*.py' --glob '*.go' --glob '*.js' --glob '*.ts' \
'ATOF|ATIF|trajectory|tool call|observation|middleware|LLM|scope' . | head -400Repository: NVIDIA/NeMo-Relay
Length of output: 1920
🌐 Web query:
site:docs.nvidia.com/nemo/relay ATOF ATIF exporter LLM tool middleware scope events
💡 Result:
In the context of the NVIDIA NeMo Relay framework, ATOF and ATIF are observability standards used to track and export lifecycle events from LLM-based applications [1][2]. ATOF (Agent Trajectory Observability Format) is the raw, canonical event stream [1][3]. It records lifecycle events—such as scopes, tool calls, LLM calls, and middleware interactions—as a stream of JSONL (JSON Lines) objects [4][2]. It acts as the primary, un-processed source of truth for all events occurring within the runtime [1][4]. ATIF (Agent Trajectory Interchange Format) is a projected trajectory format derived from the raw ATOF stream [1][5]. It is designed for offline analysis, evaluation, and replay [1][2]. An ATIF exporter translates raw NeMo Relay events (like LLM start/end or tool observations) into a structured trajectory artifact (typically JSON) for each top-level agent scope or supported coding-agent turn [6][1]. Regarding their roles and scope: - Middleware: Middleware components in NeMo Relay can block, sanitize, rewrite, route, or replace execution [3]. These actions are captured as lifecycle events within the ATOF stream [1][4]. - Tool/LLM Interaction: Both managed LLM and tool calls emit events to the ATOF stream, which are subsequently projected into ATIF steps [1][5]. - Exporter Scope: The ATIF exporter specifically handles the creation of trajectory files, often mapping one file per top-level agent scope or specific turn [6][7]. Nested agent scopes are typically embedded within these parent ATIF artifacts to maintain lineage [6][5]. In essence, ATOF is the raw log of everything that happened, while ATIF is a structured, synthesized view of agent interactions and trajectories suitable for analysis [1][3].
Citations:
- 1: https://docs.nvidia.com/nemo/relay/configure-plugins/observability/about
- 2: https://docs.nvidia.com/nemo/relay/v0.6.0/configure-plugins/observability/about
- 3: https://docs.nvidia.com/nemo/relay/about-nemo-relay/overview
- 4: https://docs.nvidia.com/nemo/relay/configure-plugins/observability/atof
- 5: https://docs.nvidia.com/nemo/relay/configure-plugins/observability/atif
- 6: https://docs.nvidia.com/nemo/relay/dev/configure-plugins/observability/atif
- 7: https://docs.nvidia.com/nemo/relay/configure-plugins/observability/configuration
🌐 Web query:
site:docs.nvidia.com/nemo/relay/configure-plugins/observability/atif "model" "tool" "observation" "step"
💡 Result:
In the context of LLM agent architectures and trajectory tracking, the model-tool-observation sequence represents a fundamental loop used to enable autonomous agent reasoning and execution [1]. In this process: 1. Model: The LLM generates a decision or request based on the current state and task requirements. In agent frameworks, this often includes generating a specific tool call to interact with an external environment [1]. 2. Tool: The agent executes a designated tool—such as a search engine, code interpreter, or database query—based on the model's output [1]. 3. Observation: The environment or tool returns an output or result, which is referred to as the observation [1]. This observation is then fed back into the model, allowing it to evaluate the outcome of its previous action and determine the next step in its reasoning trajectory [1]. This cycle is often formalized in agent trajectory standards, such as the Agent Trajectory Interchange Format (ATIF), which tracks these transitions as distinct events or steps to provide observability into the agent's decision-making process [1].
Citations:
🌐 Web query:
site:docs.nvidia.com/nemo/relay/configure-plugins/observability/atof "scope" "middleware" "mark" ATOF JSONL
💡 Result:
In the context of the Agent Trajectory Observability Format (ATOF), "scope," "middleware," and "mark" refer to specific types of events or data structures exported as JSON objects within a JSONL (JSON Lines) file [1]. ATOF is a raw-event export format used by NVIDIA NeMo Relay to track agent lifecycles [1]. When configuring ATOF, each file sink writes events—such as scope, tool, LLM, middleware, or mark events—as one JSON object per line in a JSONL file [1]. The specific event types mentioned function as follows: - Scope: Represents an owning agent scope, which starts fresh and serves as a container for tracked events [1]. - Middleware: Refers to events associated with the middleware components in the agent pipeline [1]. - Mark: Refers to specific events, such as a "compaction" mark, which is used to refresh the state of an owning agent scope [1]. These events are delivered to an exporter, which then serializes them into the JSONL output format for logging or transport [1].
Citations:
Correct the ATOF description in the format table.
The ATOF exporter emits scope, tool, LLM, middleware, and mark events as raw JSONL records. Update the ATOF row to include these event types. The ATIF description already accurately covers model and tool activity mapping to trajectory steps.
🤖 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/about-nemo-relay/concepts/subscribers.mdx` around lines 76 - 77, Update
the ATOF row in the format table to state that the exporter emits scope, tool,
LLM, middleware, and mark events as raw JSONL records. Leave the ATIF row
unchanged.
Source: Path instructions
Overview
Clarifies the boundary between canonical ATOF events and projected ATIF trajectories.
Details
steps.Where should the reviewer start?
Review
ATOF Events and ATIF Trajectoriesindocs/about-nemo-relay/concepts/subscribers.mdx.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Summary by CodeRabbit