Skip to content

feat(agents): root Relay traces at the platform session [ASTD-534] - #2574

Draft
marcusds wants to merge 1 commit into
mainfrom
relay-session-root/mschwab
Draft

marcusds wants to merge 1 commit into
mainfrom
relay-session-root/mschwab

Conversation

@marcusds

@marcusds marcusds commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

What

Each turn of a platform agent session now carries relay_session_root: a UUIDv5 of the platform session id under a fixed namespace, so every turn of one session sends the same value and different sessions never collide. Platform session ids are not UUIDs, so the session id itself cannot be used.

The value rides on the platform's invocation requests (FabricInvocationRequest, FabricOneShotRequest) through the session manager and is passed to Fabric as the typed RunRequest.relay_session_root field, only when set. caller_context is unchanged.

Why

Studio chats and other session-backed calls land in Intake as one session per turn. Relay 0.9 derives the ATIF session_id from the propagation root, and Fabric roots propagation at each request unless the caller supplies a session root. NVIDIA/NeMo-Fabric#358, merged for Fabric 0.5, adds that field; this sends it, so a conversation records as one Intake session with one trajectory per turn.

Dependencies and limits

  • Takes effect once nemo-helix moves to Fabric 0.5. On Fabric 0.4 the Python RunRequest keeps the unknown field as an extra and Fabric's Rust core drops it, so this is inert and safe to merge before the bump.
  • Deep Agents agents, including the Studio assistant, and mini-SWE-agent group by session. Hermes, Claude, and Codex agents keep one session per turn: their Relay integrations do not read the field.
  • Stateless calls without X-Nemo-Session-Id are unchanged.

Still to land before this is ready

  • Bump nemo-fabric* pins to >=0.5.0,<0.6.0 once Fabric 0.5 is published, relock, and run the agents plugin against it.
  • Confirm Intake keeps one row per trajectory now that turns share a session_id: ClickHouse spans and the evaluation rollup group on session_id, and trajectory_id becomes the unique key.
  • Verify against a running platform: two turns on one session give two traces under one session_id with distinct trajectory_id.

Verification

  • test_fabric_server.py, test_fabric_runtime.py, test_fabric_session_manager.py: 102 passed. Covers a stable root per session and a distinct root per session, no root without a session, the session manager copying the field to the one-shot request, and invoke_fabric_runtime sending it on RunRequest only when set.
  • Ruff, format, and ty clean on the changed files.

@github-actions github-actions Bot added the feat label Oct 2, 2026
@datadog-official

datadog-official Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Pipelines

❌ Errors

Your PR has failed checks. Please review the issues below and take necessary action before merging.

🚦 2 Pipeline jobs failed

CI | CI status

View in Datadog · View in GitHub Actions

CI | Kind Gym agent-evaluate e2e

View in Datadog · View in GitHub Actions

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 639cb52 | Docs | View more details | Give us feedback!

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 51168/62980 81.2% 65.9%
Integration Tests 33162/60052 55.2% 26.3%

Send a relay_session_root UUID on every turn of a platform agent session.
Fabric 0.5 takes it as the typed RunRequest.relay_session_root field, and
adapters that own an in-process Relay scope use it as the propagation root.
Relay 0.9 derives the ATIF session id from the root, so the turns land in
Intake as one session with a trajectory each. Platform session ids are not
UUIDs, so the root is a UUIDv5 of the session id under a fixed namespace.

The field is carried on the platform's invocation requests and copied to
Fabric's RunRequest only when set. Fabric 0.4 has no such field; its Rust
core drops the unknown key, so this is inert until the Fabric 0.5 bump.

Signed-off-by: mschwab <mschwab@nvidia.com>
@marcusds
marcusds force-pushed the relay-session-root/mschwab branch from e104d0a to 639cb52 Compare October 9, 2026 09:57

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant