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) –Nonefor 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, orUNSET.status_description(str | None).attributes(dict) – where instrumentations put payloads.events(list[dict]) – each hasname,timestamp,attributes; exceptions arrive here rather than inattributes. 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.