Skip to main content
A trace is one interaction (a root span plus its child steps); a session is the conversation those interactions belong to - every trace sharing a session_id. Sessions catch the failure mode single-trace monitoring can’t see: every individual reply looks fine, but the conversation as a whole goes in circles, contradicts itself, or never resolves. Grouping is opt-in per call - pass any stable per-conversation id:
Traces sent without one get their own auto-generated session.

The Sessions view

Observe → Sessions lists each conversation with: Opening a session shows every turn in order; each turn’s full span tree is one click away.
PLACEHOLDER: screenshot of the session detail dialog - a list of user/agent turns in order with per-turn latency, a Judge scores section showing two evaluator verdicts with ratings, and an 'Add as test case' button in the header.

A session's detail view: turns in order, judge verdicts, and Add as test case.

Conversation-level judging

Two kinds of judge score a session as a whole, both triggered automatically when the conversation goes quiet:
  • Session Baseline Judge - built-in: goal progression, consistency, non-repetition. Also runs on demand from the session’s detail view. Its rubric lives in an evaluator config (tunable via Tune judge); pause it from the Scorers page’s row toggle.
  • Session-scoped online evaluators - your own criteria with scope="session", judged on idle and re-judged if the conversation resumes. See Multi-Turn Session Evaluation.
A verdict below the evaluator’s alert threshold raises a signal in the normal triage queue. Both are also callable from the SDK - run the coherence check on demand and read the session’s spans (e.g. to walk a reported drift span up to the turn it belongs to):

Where sessions come from

From finding to regression test

A failed conversation is a future regression test: Add as test case in the session detail turns the whole conversation into a multi-turn golden dataset case - see Datasets from Production.