AgentSession with one call in your agent entrypoint, before session.start():
What gets captured
- Every finalized user ↔ assistant exchange (from the session’s
conversation_item_addedevents) becomes a turn span —input.value/output.valueplus structuredeldros.messageevents, the same shape as every other Eldros capture path. - Session grouping: the LiveKit room name is the conversation id (override with
session_id=...). Becauseobserve_sessionruns beforesession.start(), the session identity propagates into the tasks LiveKit spawns — so your auto-instrumented LLM calls carry the samesession.id. - LiveKit’s own telemetry (agent spans, metrics) is routed to the same pipeline
when available (
wire_telemetry=True, the default; harmlessly skipped on versions without it).
LiveKit runs its pipeline in its own tasks, so LLM spans correlate with turns at the
session level (same
session.id) rather than nesting inside each turn span —
you still get the full conversation and its traces grouped together.Notes
- Non-conversation items (system messages, heartbeats) are skipped by design.
- If a session ends with zero recognized turns, the SDK logs one warning — capture problems fail loudly, never silently.
- All hooks are guarded: an Eldros failure can never break your agent session.