Basic Pipecat Voice Pipeline
Learn how to trace a Pipecat voice pipeline with Noveum Trace
This guide shows a complete Pipecat voice pipeline (STT + LLM function calling + TTS) instrumented with Noveum Trace. You will see per-turn spans for STT, LLM, and TTS, plus (optionally) uploaded audio for each span.
🎯 Use Case
Drive-Thru Voice Agent: A voice-powered ordering bot that:
- Listens for customer speech (STT)
- Uses an LLM with function calling to build an order
- Speaks back responses (TTS)
🚀 Complete Working Example
📋 Prerequisites
Set your environment variables:
🔧 How It Works
noveum_trace.init()configures where traces go. In production, call this once at module level rather than inside a per-connection function.tracer = NoveumPipecatTracer(record_audio=True)sets what the tracer captures.pipeline = tracer.observe_pipeline(pipeline)instruments the pipeline. Withrecord_audio=Trueit auto-inserts anAudioBufferProcessor(num_channels=2)at the tail, so a stereo WAV is uploaded as apipecat.full_conversationspan when the session ends — no manual wiring. Use the return value.task = await tracer.register_task_handlers(task, transport=transport)adds the observer, wires turn boundaries (so you get per-turn STT/LLM/TTS spans), taps the transport for raw input audio, and forces the metrics flags on. Use the return value.
📊 What You'll See in the Dashboard
pipecat.conversationtrace with onepipecat.turnper user→bot exchange- Child spans per turn:
pipecat.stt(recognized speech/text, model, confidence, latency)pipecat.llm(prompt, output, token usage, cost, function calls when emitted)pipecat.tts(spoken text, voice, audio timing)
- When
record_audio=True, per-span audio uploads addstt.audio_uuidandtts.audio_uuidattributes - A
pipecat.full_conversationspan at the trace root containing the full stereo WAV of the session (left channel = user, right channel = bot) — enabled byrecord_audio=True, which auto-inserts theAudioBufferProcessorfor you
🔍 Troubleshooting
If turns don’t split correctly, verify that:
- You assigned the return values of both
tracer.observe_pipeline(...)andawait tracer.register_task_handlers(...) noveum_trace.init()is called before the pipeline starts
🚀 Next Steps
- Read the integration overview: Pipecat Integration Overview
Exclusive Early Access
Get Early Access to Noveum.ai Platform
Be the first one to get notified when we open Noveum Platform to more users. All users get access to Observability suite for free, early users get free eval jobs and premium support for the first year.