Skip to main content
An evaluator receives one of these by declaring a session parameter on its score function; you never construct a Session yourself. Session is not a top-level fiddler_evals export; it lives in fiddler_evals.runner.session_capture.

Attributes

UUID
The session id (gen_ai.conversation.id) shared by all traces in this session; equal to the item’s experiment_item_id (they’re 1:1).
list[dict[str, Any]]
Captured spans for this session, in completion order, each a plain dict with no OpenTelemetry objects to import:
  • trace_id (str) – hex, 0x-prefixed.
  • span_id (str) – hex, 0x-prefixed.
  • parent_span_id (str | None) – None for root spans.
  • name (str) – the span name.
  • kind (str | None) – INTERNAL, CLIENT, SERVER, and so on.
  • start_time / end_time (int) – nanoseconds, so a duration is a plain subtraction with no precision loss.
  • status_code (str | None) – OK, ERROR, or UNSET.
  • status_description (str | None).
  • attributes (dict) – where instrumentations put payloads.
  • events (list[dict]) – each has name, timestamp, attributes; exceptions arrive here rather than in attributes. This is a deliberately curated subset aimed at scoring. OpenTelemetry infrastructure fields – resource, links, and instrumentation scope – are omitted because they are constant or empty for evaluation runs. The full-fidelity span is still written to the trace store and visible in the UI. Empty when the task emitted no spans.