Skip to Content
DocsTracesConversation Tracing

Conversation Tracing

Conversation tracing groups the traces from a multi-turn session into a single thread, so you can navigate every turn and agent handoff in one view alongside the full multi-agent interaction graph.

How It Works

When your application runs a multi-turn test or a live chat session, Rhesis links all spans from that session using a shared conversation_id. The trace viewer then surfaces a dedicated Conversation tab that lets you navigate the full interaction thread — turn by turn, with the underlying span hierarchy always one click away.

Conversation tab of a trace — each turn with its user message, agent reply and evaluation status

This works for two scenarios:

  • Test-linked traces — when a conversation is executed as a Rhesis test, the conversation summary and goal evaluation are loaded from the test result
  • Direct invocations — when you call an endpoint directly via the SDK, Rhesis reconstructs the conversation thread from the span attributes on each turn

Views

The trace detail page has three views for navigating a conversation trace.

Conversation View

Shows the full dialogue between the tester and your application, turn by turn. Each turn displays the input message, the response, any file attachments, and the pass/fail status for that turn. Click a response to jump directly to its span in the tree.

Tree View and Sequence View

Standard OpenTelemetry views — span hierarchy with timing for Tree, chronological waterfall for Sequence. Both support turn-based navigation so you can jump between turns while staying in context.

Graph View

Visualizes the full multi-agent interaction as a directed graph. Nodes represent agents and tools; edges represent invocation and handoff relationships. Graph playback controls let you replay execution over time, with turn markers (T1, T2, …) showing when each conversation turn occurred.

Use the Graph View when debugging complex agent interactions — it makes routing decisions and handoff sequences immediately visible. See Multi-Agent Tracing for an example of what the graph looks like.

Enabling Conversation Grouping

To group traces into a conversation thread, pass a consistent conversation_id across all turns of the session. The Rhesis SDK handles this automatically when running tests. For direct invocations, set it via the endpoint context:

app.py
from rhesis.sdk import endpoint

@endpoint()
def chat(input: str, session_id: str = None) -> dict:
    response = your_llm_call(input)
    return {"output": response, "session_id": session_id}

The session_id field in the response is mapped to conversation_id internally — they refer to the same concept. When the same session_id is returned across turns, Rhesis links all spans into a single conversation thread.

Filtering Traces

In the Traces dashboard, use the trace type filter to focus on conversation traces. The filter separates single-turn and multi-turn traces so you can quickly find sessions with multiple turns or specific conversation IDs.


Related: