Replace the continuous heartbeat-based timer (UserSpeakingFrame/BotSpeakingFrame + asyncio.Event loop) with a simple one-shot timer that starts when BotStoppedSpeakingFrame is received and cancels on UserStartedSpeakingFrame or BotStartedSpeakingFrame. This eliminates false idle triggers caused by gaps between the user finishing speaking and the bot starting to speak (LLM/TTS latency). Guard the timer start with two conditions to prevent false triggers: - User turn in progress: during interruptions, BotStoppedSpeaking arrives while the user is still speaking mid-turn. - Function calls in progress: FunctionCallsStarted arrives before BotStoppedSpeaking because the bot speaks concurrently with the function call starting, so the timer must wait for the result and subsequent bot response.
Pipecat Examples
This directory contains examples to help you learn how to build with Pipecat.
Getting Started
New to Pipecat? Start here:
- Quickstart - Get your first voice AI bot running in 5 minutes (coming soon)
- Client/Server Web - Learn to build web applications with Pipecat's client SDKs (coming soon)
- Phone Bot with Twilio - Connect your bot to a phone number (coming soon)
Foundational Examples
Single-file examples that introduce core Pipecat concepts one at a time. These examples:
- Build on each other progressively
- Focus on specific features or integrations
- Are used for testing with every Pipecat release
See the Foundational Examples README for the complete list.
More Advanced Examples
Ready to explore complex use cases? Visit pipecat-examples for:
- Production-ready applications
- Multi-platform client implementations
- Telephony integrations
- Multimodal and creative applications
- Deployment and monitoring examples