title: Traces description: The raw trace stream every other dashboard aggregates from, shown without rollup. Filter by model, status, or conversation, and open any row’s Trace Detail.

Traces tab - the live raw trace stream. The first row expands inline to a span Gantt (Spring AI advisor chain → model call); clicking the card opens the Trace Detail dialog with the full timeline and raw JSON.
Purpose - the raw trace stream. Every other dashboard tab aggregates from this view; Traces shows it without rollup. The headline operator drill-down for “give me the unfiltered evidence.”
Reactor ObservabilityRingBuffer.liveStream() (multicast Sinks.Many.directBestEffort()) plus snapshot() on attach. The Traces tab subscribes with sample(500 ms) so dropped frames coalesce silently into the next emission.
ALL plus distinct model names auto-populated from the ring bufferALL, OK, ERROR, CANCELLEDThe Observability global refresh interval is honored, but Traces also subscribes to the live Sinks.Many stream so new rows appear without polling. The manual refresh button re-applies the filter to a static snapshot.
| Element | Source |
|---|---|
| Trace ID (short) | TraceRecord.traceId truncated |
| Conversation badge | TraceRecord.conversationId truncated (e.g. Chat-6af5b06) |
| Timestamp | TraceRecord.startEpochMs |
| Provider · model | gen_ai.system · gen_ai.response.model |
| Tokens | inputTokens / outputTokens tok |
| Duration | TraceRecord.durationMs human-formatted |
| Span count | TraceRecord.spans.size() |
| Status dot | Green / red by TraceRecord.status |
| Inline span timeline (top row only) | Mini Gantt of the spans for quick triage |

Conversation Thread dialog - ConversationMessageExtractor deserialises the trace’s prompt and completion content attributes into a structured chronological view. Tool calls (when present) render as inline cards between turns.
A sibling drilldown to Trace Detail. Reached from two entry points:
Where Trace Detail is per-turn (one TraceRecord), Conversation Thread is per-conversation (all TraceRecords sharing the same conversationId, reassembled into a chronological user / assistant / tool thread).
Contents
| Section | Contents |
|---|---|
| Header | Conversation <conversationId-short> |
| Summary strip | Messages · Conv span · Tokens (in/out) · Tools |
| Message thread | Chronological user / assistant / tool messages with per-message footer (date · model · token count). Tool calls render as inline cards between turns. |
| Continue in chat button | Navigates to Agentic Chat with the same conversation loaded |
| Close button | Dismiss |
Content capture caveat - message bodies are present only if spring.ai.playground.observability.capture-prompt-content=true (the default). When that property is false, the thread shows roles and counts only - bodies do not flow into the trace stream. See Observability Architecture → Configuration surface for the property reference.
ObservabilityRingBuffer design + the JSON persistence shape used by Show raw JSONSinks.Many and 500 ms sampling