title: Agentic Chat Observability description: Conversation-level observability - TraceRecords grouped by conversationId via ConversationAggregator. Multi-turn rate, loop depth, total cost per session, outcomes.

Agentic Chat - ConversationAggregator groups TraceRecords by conversationId to surface behavioural metrics that only make sense across multiple turns. Multi-turn rate identifies whether the window’s traffic is a sustained session or a series of one-shot questions.
Purpose - conversation-level observability. The trace stream produces one TraceRecord per turn; this tab groups those by conversationId (via ConversationAggregator) and surfaces behavioural metrics that only make sense across multiple turns - multi-turn rate, loop depth, total cost per session.
ConversationAggregator walks ObservabilityRingBuffer.snapshot() and groups by conversationId. Computes per-conversation totals (token sums, cost via ModelPricingService, tool call counts, RAG flags, distinct models / providers, error counts, loop depth, duration).
All dashboards share the Observability global settings - time window, refresh interval, custom range. Agentic Chat has no tab-specific controls beyond those.
| Card | Shows | Source |
|---|---|---|
| Conversations | Number of distinct conversation IDs in the window | ConversationAggregator group count |
| Avg messages / conv | Mean message count per conversation | Aggregated |
| Avg cost / conv | Mean cost per conversation in active currency | Aggregated (uses ModelPricingService + CurrencyService) |
| Avg duration | Mean wall-clock duration from first to last turn | First-turn timestamp to last-turn timestamp |
| Multi-turn rate | Percentage of conversations with more than one user message | Boolean per conversation |
| Tool-using rate | Percentage of conversations that called at least one tool | Boolean per conversation |
| RAG-using rate | Percentage of conversations that triggered a vector query | Boolean per conversation |
| Max loop depth (p95) | 95th percentile of tools / messages ratio across conversations |
Heuristic for agentic looping |
| Chart | Type | Reading |
|---|---|---|
| Messages over time | Line, total messages per bucket | High slope → busy chat workload |
| New conversations / minute | Line | Spike = wave of new sessions; flat = warm steady state |
| Agentic loop depth | Histogram of per-conversation loop depth | Tail with depth >5 → agent loops |
| Conversation duration | Histogram (seconds) | Short vs long-session split |
| Tools used in conversations | Horizontal bar of distinct tools across conversations | Conversation-level tool palette |
| Models used in conversations | Horizontal bar | Should match the configured model unless the agent is provider-switching |
| Cost per conversation | Histogram, active currency | Long-tail upper bin = expensive conversations |
| Conversation outcomes | Stacked bar (Completed / Errored / Cancelled) | If Errored climbs, something is wrong end-to-end |
Conversations grid - First · Conv id (short) · Messages · Duration · ... - click a row to open the Conversation Thread dialog (documented alongside Trace Detail on the Traces page).
ConversationAggregator and ConversationMessageExtractor design