Skip to main content
Observe a Pipecat pipeline through its LLMContextAggregatorPair turn events:
Always call observer.finalize() when the pipeline ends. A turn span closes when the next user turn starts; the conversation’s final turn has no successor, and an unclosed span is never exported — skipping finalize silently drops the last exchange of every call.

What gets captured

Each user ↔ assistant exchange (from on_user_turn_stopped / on_assistant_turn_stopped) becomes a turn spaninput.value/output.value plus structured eldros.message events, grouped by your session_id. Assistant turns with empty content (realtime mode) are skipped rather than recorded blank.

Traces: use Pipecat’s built-in OpenTelemetry

Pipecat ships native tracing with a conversation → turn → stt/llm/tts span hierarchy. Point it at Eldros and stamp your session id on it — both layers land in one pipeline:
tracing_exporter() returns an OTLP exporter wired to your resolved Eldros config — it raises at startup if init() hasn’t resolved credentials, so misconfiguration fails loudly rather than dropping every trace.
Pipecat’s API surface moves quickly (PipelineTaskPipelineWorker, setup_tracing import paths). The Eldros hooks are written defensively against version drift, but cross-check the Pipecat-side names against the Pipecat docs for your installed version.