diff --git a/.claude/skills/cleanup/SKILL.md b/.claude/skills/cleanup/SKILL.md
index 91a61db39..106aac6ac 100644
--- a/.claude/skills/cleanup/SKILL.md
+++ b/.claude/skills/cleanup/SKILL.md
@@ -144,7 +144,7 @@ class InputParams(BaseModel):
#### Examples
-Validated against `examples/foundational/07-interruptible.py`:
+Validated against `examples/07-interruptible.py`:
- Proper `create_transport()` usage
- Correct pipeline structure
diff --git a/COMMUNITY_INTEGRATIONS.md b/COMMUNITY_INTEGRATIONS.md
index ab45171d7..8163e3052 100644
--- a/COMMUNITY_INTEGRATIONS.md
+++ b/COMMUNITY_INTEGRATIONS.md
@@ -23,7 +23,7 @@ Create your integration following the patterns and examples shown in the "Integr
Your repository must contain these components:
- **Source code** - Complete implementation following Pipecat patterns
-- **Foundational example** - Single file example showing basic usage (see [Pipecat examples](https://github.com/pipecat-ai/pipecat/tree/main/examples/foundational))
+- **Foundational example** - Single file example showing basic usage (see [Pipecat examples](https://github.com/pipecat-ai/pipecat/tree/main/examples))
- **README.md** - Must include:
- Introduction and explanation of your integration
- Installation instructions
diff --git a/README.md b/README.md
index 696e836b4..af165a94f 100644
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@ Catch new features, interviews, and how-tos on our [Pipecat TV](https://www.yout
-
+
## ๐งฉ Available services
@@ -142,7 +142,7 @@ You can get started with Pipecat running on your local machine, then move your a
## ๐งช Code examples
-- [Foundational](https://github.com/pipecat-ai/pipecat/tree/main/examples/foundational) โ small snippets that build on each other, introducing one or two concepts at a time
+- [Foundational](https://github.com/pipecat-ai/pipecat/tree/main/examples) โ small snippets that build on each other, introducing one or two concepts at a time
- [Example apps](https://github.com/pipecat-ai/pipecat-examples) โ complete applications that you can use as starting points for development
## ๐ ๏ธ Contributing to the framework
diff --git a/examples/README.md b/examples/README.md
index 7eae41021..5ec86002e 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -1,30 +1,150 @@
# Pipecat Examples
-This directory contains examples to help you learn how to build with Pipecat.
+This directory contains examples showing how to build voice and multimodal agents with Pipecat.
-## Getting Started
+## Setup
-New to Pipecat? Start here:
+1. Follow the [README](https://github.com/pipecat-ai/pipecat/blob/main/README.md#%EF%B8%8F-contributing-to-the-framework) steps to get your local environment configured.
-- **[Client/Server Web](client-server-web/)** - Learn to build web applications with Pipecat's client SDKs _(coming soon)_
-- **[Phone Bot with Twilio](phone-bot-twilio/)** - Connect your bot to a phone number _(coming soon)_
+ > **Run from root directory**: Make sure you are running the steps from the root directory.
-## Foundational Examples
+ > **Using local audio?**: The `LocalAudioTransport` requires a system dependency for `portaudio`. Install the dependency to use the transport.
-Single-file examples that introduce core Pipecat concepts one at a time. These examples:
+2. Copy the [`env.example`](../env.example) file and add API keys for services you plan to use:
-- Build on each other progressively
-- Focus on specific features or integrations
-- Are used for testing with every Pipecat release
+ ```bash
+ cp env.example .env
+ # Edit .env with your API keys
+ ```
-See the **[Foundational Examples README](foundational/)** for the complete list.
+3. Run any example:
-## More Advanced Examples
+ ```bash
+ uv run python getting-started/01-say-one-thing.py
+ ```
-Ready to explore complex use cases? Visit **[pipecat-examples](https://github.com/pipecat-ai/pipecat-examples)** for:
+4. Open the web interface at http://localhost:7860/client/ and click "Connect"
-- Production-ready applications
-- Multi-platform client implementations
-- Telephony integrations
-- Multimodal and creative applications
-- Deployment and monitoring examples
+## Running examples with other transports
+
+Most examples support running with other transports, like Twilio or Daily.
+
+### Daily
+
+You need to create a Daily account at https://dashboard.daily.co/u/signup. Once signed up, you can create your own room from the dashboard and set the environment variables `DAILY_ROOM_URL` and `DAILY_API_KEY`. Alternatively, you can let the example create a room for you (still needs `DAILY_API_KEY` environment variable). Then, start any example with `-t daily`:
+
+```bash
+uv run getting-started/06-voice-agent.py -t daily
+```
+
+### Twilio
+
+It is also possible to run the example through a Twilio phone number. You will need to setup a few things:
+
+1. Install and run [ngrok](https://ngrok.com/download).
+
+```bash
+ngrok http 7860
+```
+
+2. Configure your Twilio phone number. One way is to setup a TwiML app and set the request URL to the ngrok URL from step (1). Then, set your phone number to use the new TwiML app.
+
+Then, run the example with:
+
+```bash
+uv run getting-started/06-voice-agent.py -t twilio -x NGROK_HOST_NAME
+```
+
+## Directory Structure
+
+### [`getting-started/`](./getting-started/)
+
+Progressive introduction to Pipecat, from minimal TTS to a full voice agent with function calling.
+
+### [`voice/`](./voice/)
+
+Full STT + LLM + TTS voice agent pipelines showcasing different speech service providers (Deepgram, ElevenLabs, Cartesia, etc.)
+
+### [`function-calling/`](./function-calling/)
+
+Function calling with different LLM providers (OpenAI, Anthropic, Google, etc.)
+
+### [`transcription/`](./transcription/)
+
+Speech-to-text examples with various STT providers.
+
+### [`vision/`](./vision/)
+
+Image description and vision capabilities with different multimodal LLMs.
+
+### [`realtime/`](./realtime/)
+
+Realtime and multimodal live APIs (OpenAI Realtime, Gemini Live, AWS Nova Sonic, Ultravox, Grok).
+
+### [`persistent-context/`](./persistent-context/)
+
+Maintaining conversation context across sessions with different providers.
+
+### [`context-summarization/`](./context-summarization/)
+
+Summarizing conversation context to manage token limits.
+
+### [`update-settings/`](./update-settings/)
+
+Changing service settings at runtime, organized by service type:
+
+- **[`stt/`](./update-settings/stt/)** โ Speech-to-text settings
+- **[`tts/`](./update-settings/tts/)** โ Text-to-speech settings
+- **[`llm/`](./update-settings/llm/)** โ LLM settings
+
+### [`turn-management/`](./turn-management/)
+
+Turn detection, interruption handling, and user input management.
+
+### [`thinking-and-mcp/`](./thinking-and-mcp/)
+
+LLM thinking/reasoning modes and MCP (Model Context Protocol) tool server integration.
+
+### [`transports/`](./transports/)
+
+Transport layer examples (WebRTC, Daily, LiveKit).
+
+### [`video-avatar/`](./video-avatar/)
+
+Video avatar integrations (Tavus, HeyGen, Simli, LemonSlice).
+
+### [`video-processing/`](./video-processing/)
+
+Video processing, mirroring, GStreamer, and custom video tracks.
+
+### [`audio/`](./audio/)
+
+Audio recording, background sounds, and sound effects.
+
+### [`observability/`](./observability/)
+
+Pipeline monitoring: observers, heartbeats, and Sentry metrics.
+
+### [`rag/`](./rag/)
+
+Retrieval-augmented generation, grounding, and long-term memory (Mem0, Gemini).
+
+### [`features/`](./features/)
+
+Miscellaneous features: wake phrases, live translation, service switching, voice switching, and more.
+
+## Advanced Usage
+
+### Customizing Network Settings
+
+```bash
+uv run python --host 0.0.0.0 --port 8080
+```
+
+### Troubleshooting
+
+- **No audio/video**: Check browser permissions for microphone and camera
+- **Connection errors**: Verify API keys in `.env` file
+- **Port conflicts**: Use `--port` to change the port
+
+For more examples, visit the [pipecat-examples repository](https://github.com/pipecat-ai/pipecat-examples).
diff --git a/examples/foundational/assets/cat.jpg b/examples/assets/cat.jpg
similarity index 100%
rename from examples/foundational/assets/cat.jpg
rename to examples/assets/cat.jpg
diff --git a/examples/foundational/assets/ding1.wav b/examples/assets/ding1.wav
similarity index 100%
rename from examples/foundational/assets/ding1.wav
rename to examples/assets/ding1.wav
diff --git a/examples/foundational/assets/ding2.wav b/examples/assets/ding2.wav
similarity index 100%
rename from examples/foundational/assets/ding2.wav
rename to examples/assets/ding2.wav
diff --git a/examples/foundational/assets/moondream.png b/examples/assets/moondream.png
similarity index 100%
rename from examples/foundational/assets/moondream.png
rename to examples/assets/moondream.png
diff --git a/examples/foundational/assets/office-ambience-24000-mono.mp3 b/examples/assets/office-ambience-24000-mono.mp3
similarity index 100%
rename from examples/foundational/assets/office-ambience-24000-mono.mp3
rename to examples/assets/office-ambience-24000-mono.mp3
diff --git a/examples/foundational/assets/rag-content.txt b/examples/assets/rag-content.txt
similarity index 100%
rename from examples/foundational/assets/rag-content.txt
rename to examples/assets/rag-content.txt
diff --git a/examples/foundational/assets/sc-default.png b/examples/assets/sc-default.png
similarity index 100%
rename from examples/foundational/assets/sc-default.png
rename to examples/assets/sc-default.png
diff --git a/examples/foundational/assets/sc-listen-1.png b/examples/assets/sc-listen-1.png
similarity index 100%
rename from examples/foundational/assets/sc-listen-1.png
rename to examples/assets/sc-listen-1.png
diff --git a/examples/foundational/assets/sc-listen-2.png b/examples/assets/sc-listen-2.png
similarity index 100%
rename from examples/foundational/assets/sc-listen-2.png
rename to examples/assets/sc-listen-2.png
diff --git a/examples/foundational/assets/sc-talk.png b/examples/assets/sc-talk.png
similarity index 100%
rename from examples/foundational/assets/sc-talk.png
rename to examples/assets/sc-talk.png
diff --git a/examples/foundational/assets/sc-think-1.png b/examples/assets/sc-think-1.png
similarity index 100%
rename from examples/foundational/assets/sc-think-1.png
rename to examples/assets/sc-think-1.png
diff --git a/examples/foundational/assets/sc-think-2.png b/examples/assets/sc-think-2.png
similarity index 100%
rename from examples/foundational/assets/sc-think-2.png
rename to examples/assets/sc-think-2.png
diff --git a/examples/foundational/assets/sc-think-3.png b/examples/assets/sc-think-3.png
similarity index 100%
rename from examples/foundational/assets/sc-think-3.png
rename to examples/assets/sc-think-3.png
diff --git a/examples/foundational/assets/sc-think-4.png b/examples/assets/sc-think-4.png
similarity index 100%
rename from examples/foundational/assets/sc-think-4.png
rename to examples/assets/sc-think-4.png
diff --git a/examples/foundational/assets/speaking.png b/examples/assets/speaking.png
similarity index 100%
rename from examples/foundational/assets/speaking.png
rename to examples/assets/speaking.png
diff --git a/examples/foundational/assets/waiting.png b/examples/assets/waiting.png
similarity index 100%
rename from examples/foundational/assets/waiting.png
rename to examples/assets/waiting.png
diff --git a/examples/foundational/34-audio-recording.py b/examples/audio/audio-recording.py
similarity index 100%
rename from examples/foundational/34-audio-recording.py
rename to examples/audio/audio-recording.py
diff --git a/examples/foundational/23-bot-background-sound.py b/examples/audio/bot-background-sound.py
similarity index 100%
rename from examples/foundational/23-bot-background-sound.py
rename to examples/audio/bot-background-sound.py
diff --git a/examples/foundational/11-sound-effects.py b/examples/audio/sound-effects.py
similarity index 100%
rename from examples/foundational/11-sound-effects.py
rename to examples/audio/sound-effects.py
diff --git a/examples/foundational/54c-context-summarization-dedicated-llm.py b/examples/context-summarization/dedicated-llm.py
similarity index 100%
rename from examples/foundational/54c-context-summarization-dedicated-llm.py
rename to examples/context-summarization/dedicated-llm.py
diff --git a/examples/foundational/54a-context-summarization-google.py b/examples/context-summarization/google.py
similarity index 100%
rename from examples/foundational/54a-context-summarization-google.py
rename to examples/context-summarization/google.py
diff --git a/examples/foundational/54b-context-summarization-manual-openai.py b/examples/context-summarization/manual-openai.py
similarity index 100%
rename from examples/foundational/54b-context-summarization-manual-openai.py
rename to examples/context-summarization/manual-openai.py
diff --git a/examples/foundational/54-context-summarization-openai.py b/examples/context-summarization/openai.py
similarity index 100%
rename from examples/foundational/54-context-summarization-openai.py
rename to examples/context-summarization/openai.py
diff --git a/examples/foundational/45-before-and-after-events.py b/examples/features/before-and-after-events.py
similarity index 100%
rename from examples/foundational/45-before-and-after-events.py
rename to examples/features/before-and-after-events.py
diff --git a/examples/foundational/53-concurrent-llm-evaluation.py b/examples/features/concurrent-llm-evaluation.py
similarity index 100%
rename from examples/foundational/53-concurrent-llm-evaluation.py
rename to examples/features/concurrent-llm-evaluation.py
diff --git a/examples/foundational/53-concurrent-llm-rtvi-ignored-sources.py b/examples/features/concurrent-llm-rtvi-ignored-sources.py
similarity index 100%
rename from examples/foundational/53-concurrent-llm-rtvi-ignored-sources.py
rename to examples/features/concurrent-llm-rtvi-ignored-sources.py
diff --git a/examples/foundational/08-custom-frame-processor.py b/examples/features/custom-frame-processor.py
similarity index 100%
rename from examples/foundational/08-custom-frame-processor.py
rename to examples/features/custom-frame-processor.py
diff --git a/examples/foundational/16-gpu-container-local-bot.py b/examples/features/gpu-container-local-bot.py
similarity index 100%
rename from examples/foundational/16-gpu-container-local-bot.py
rename to examples/features/gpu-container-local-bot.py
diff --git a/examples/foundational/52-live-translation.py b/examples/features/live-translation.py
similarity index 100%
rename from examples/foundational/52-live-translation.py
rename to examples/features/live-translation.py
diff --git a/examples/foundational/35-pattern-pair-voice-switching.py b/examples/features/pattern-pair-voice-switching.py
similarity index 100%
rename from examples/foundational/35-pattern-pair-voice-switching.py
rename to examples/features/pattern-pair-voice-switching.py
diff --git a/examples/foundational/48-service-switcher.py b/examples/features/service-switcher.py
similarity index 100%
rename from examples/foundational/48-service-switcher.py
rename to examples/features/service-switcher.py
diff --git a/examples/foundational/15a-switch-languages.py b/examples/features/switch-languages.py
similarity index 100%
rename from examples/foundational/15a-switch-languages.py
rename to examples/features/switch-languages.py
diff --git a/examples/foundational/15-switch-voices.py b/examples/features/switch-voices.py
similarity index 100%
rename from examples/foundational/15-switch-voices.py
rename to examples/features/switch-voices.py
diff --git a/examples/foundational/36-user-email-gathering.py b/examples/features/user-email-gathering.py
similarity index 100%
rename from examples/foundational/36-user-email-gathering.py
rename to examples/features/user-email-gathering.py
diff --git a/examples/foundational/44-voicemail-detection.py b/examples/features/voicemail-detection.py
similarity index 100%
rename from examples/foundational/44-voicemail-detection.py
rename to examples/features/voicemail-detection.py
diff --git a/examples/foundational/10-wake-phrase.py b/examples/features/wake-phrase.py
similarity index 100%
rename from examples/foundational/10-wake-phrase.py
rename to examples/features/wake-phrase.py
diff --git a/examples/foundational/01-say-one-thing-piper.py b/examples/foundational/01-say-one-thing-piper.py
deleted file mode 100644
index 6c4e1836e..000000000
--- a/examples/foundational/01-say-one-thing-piper.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#
-# Copyright (c) 2024-2026, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.frames.frames import EndFrame, TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.runner.types import RunnerArguments
-from pipecat.runner.utils import create_transport
-from pipecat.services.piper.tts import PiperHttpTTSService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.daily.transport import DailyParams
-from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams
-
-load_dotenv(override=True)
-
-
-# We use lambdas to defer transport parameter creation until the transport
-# type is selected at runtime.
-transport_params = {
- "daily": lambda: DailyParams(audio_out_enabled=True),
- "twilio": lambda: FastAPIWebsocketParams(audio_out_enabled=True),
- "webrtc": lambda: TransportParams(audio_out_enabled=True),
-}
-
-
-async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
- logger.info(f"Starting bot")
-
- # Create an HTTP session
- async with aiohttp.ClientSession() as session:
- tts = PiperHttpTTSService(
- base_url=os.getenv("PIPER_BASE_URL"),
- aiohttp_session=session,
- sample_rate=24000,
- )
-
- task = PipelineTask(
- Pipeline([tts, transport.output()]),
- idle_timeout_secs=runner_args.pipeline_idle_timeout_secs,
- )
-
- # Register an event handler so we can play the audio when the client joins
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- await task.queue_frames([TTSSpeakFrame(f"Hello there!"), EndFrame()])
-
- runner = PipelineRunner(handle_sigint=runner_args.handle_sigint)
-
- await runner.run(task)
-
-
-async def bot(runner_args: RunnerArguments):
- """Main bot entry point compatible with Pipecat Cloud."""
- transport = await create_transport(runner_args, transport_params)
- await run_bot(transport, runner_args)
-
-
-if __name__ == "__main__":
- from pipecat.runner.run import main
-
- main()
diff --git a/examples/foundational/01-say-one-thing-rime.py b/examples/foundational/01-say-one-thing-rime.py
deleted file mode 100644
index a9df51f7f..000000000
--- a/examples/foundational/01-say-one-thing-rime.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Copyright (c) 2024-2026, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.frames.frames import EndFrame, TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.runner.types import RunnerArguments
-from pipecat.runner.utils import create_transport
-from pipecat.services.rime.tts import RimeHttpTTSService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.daily.transport import DailyParams
-from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams
-
-load_dotenv(override=True)
-
-# We use lambdas to defer transport parameter creation until the transport
-# type is selected at runtime.
-transport_params = {
- "daily": lambda: DailyParams(audio_out_enabled=True),
- "twilio": lambda: FastAPIWebsocketParams(audio_out_enabled=True),
- "webrtc": lambda: TransportParams(audio_out_enabled=True),
-}
-
-
-async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
- logger.info(f"Starting bot")
-
- # Create an HTTP session
- async with aiohttp.ClientSession() as session:
- tts = RimeHttpTTSService(
- api_key=os.getenv("RIME_API_KEY", ""),
- aiohttp_session=session,
- settings=RimeHttpTTSService.Settings(
- voice="rex",
- ),
- )
-
- task = PipelineTask(
- Pipeline([tts, transport.output()]),
- idle_timeout_secs=runner_args.pipeline_idle_timeout_secs,
- )
-
- # Register an event handler so we can play the audio when the client joins
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- await task.queue_frames([TTSSpeakFrame(f"Hello there!"), EndFrame()])
-
- runner = PipelineRunner(handle_sigint=runner_args.handle_sigint)
-
- await runner.run(task)
-
-
-async def bot(runner_args: RunnerArguments):
- """Main bot entry point compatible with Pipecat Cloud."""
- transport = await create_transport(runner_args, transport_params)
- await run_bot(transport, runner_args)
-
-
-if __name__ == "__main__":
- from pipecat.runner.run import main
-
- main()
diff --git a/examples/foundational/01b-livekit-audio.py b/examples/foundational/01b-livekit-audio.py
deleted file mode 100644
index 5f64a29ed..000000000
--- a/examples/foundational/01b-livekit-audio.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2024-2026, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.frames.frames import TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.runner.livekit import configure
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.transports.livekit.transport import LiveKitParams, LiveKitTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-async def main():
- (url, token, room_name) = await configure()
-
- transport = LiveKitTransport(
- url=url,
- token=token,
- room_name=room_name,
- params=LiveKitParams(audio_out_enabled=True),
- )
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- settings=CartesiaTTSService.Settings(
- voice="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- ),
- )
-
- runner = PipelineRunner()
-
- task = PipelineTask(Pipeline([tts, transport.output()]))
-
- # Register an event handler so we can play the audio when the
- # participant joins.
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant_id):
- await asyncio.sleep(1)
- await task.queue_frame(
- TTSSpeakFrame(
- "Hello there! How are you doing today? Would you like to talk about the weather?"
- )
- )
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/foundational/01c-nvidia-riva-tts.py b/examples/foundational/01c-nvidia-riva-tts.py
deleted file mode 100644
index 2be99c5b4..000000000
--- a/examples/foundational/01c-nvidia-riva-tts.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2024-2026, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.frames.frames import EndFrame, TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.runner.types import RunnerArguments
-from pipecat.runner.utils import create_transport
-from pipecat.services.nvidia.tts import NvidiaTTSService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.daily.transport import DailyParams
-from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams
-
-load_dotenv(override=True)
-
-
-# We use lambdas to defer transport parameter creation until the transport
-# type is selected at runtime.
-transport_params = {
- "daily": lambda: DailyParams(audio_out_enabled=True),
- "twilio": lambda: FastAPIWebsocketParams(audio_out_enabled=True),
- "webrtc": lambda: TransportParams(audio_out_enabled=True),
-}
-
-
-async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
- logger.info(f"Starting bot")
-
- tts = NvidiaTTSService(api_key=os.getenv("NVIDIA_API_KEY"))
-
- task = PipelineTask(
- Pipeline([tts, transport.output()]),
- idle_timeout_secs=runner_args.pipeline_idle_timeout_secs,
- )
-
- # Register an event handler so we can play the audio when the client joins
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- await task.queue_frames([TTSSpeakFrame(f"Hello there!"), EndFrame()])
-
- runner = PipelineRunner(handle_sigint=runner_args.handle_sigint)
-
- await runner.run(task)
-
-
-async def bot(runner_args: RunnerArguments):
- """Main bot entry point compatible with Pipecat Cloud."""
- transport = await create_transport(runner_args, transport_params)
- await run_bot(transport, runner_args)
-
-
-if __name__ == "__main__":
- from pipecat.runner.run import main
-
- main()
diff --git a/examples/foundational/03-still-frame.py b/examples/foundational/03-still-frame.py
deleted file mode 100644
index dc1bf4c5f..000000000
--- a/examples/foundational/03-still-frame.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Copyright (c) 2024-2026, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.frames.frames import TextFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.runner.types import RunnerArguments
-from pipecat.runner.utils import create_transport
-from pipecat.services.fal.image import FalImageGenService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.daily.transport import DailyParams
-
-load_dotenv(override=True)
-
-
-# We use lambdas to defer transport parameter creation until the transport
-# type is selected at runtime.
-transport_params = {
- "daily": lambda: DailyParams(
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=1024,
- ),
- "webrtc": lambda: TransportParams(
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=1024,
- ),
-}
-
-
-async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
- logger.info(f"Starting bot")
-
- # Create an HTTP session
- async with aiohttp.ClientSession() as session:
- imagegen = FalImageGenService(
- settings=FalImageGenService.Settings(
- image_size="square_hd",
- ),
- aiohttp_session=session,
- key=os.getenv("FAL_KEY"),
- )
-
- task = PipelineTask(
- Pipeline([imagegen, transport.output()]),
- idle_timeout_secs=runner_args.pipeline_idle_timeout_secs,
- )
-
- # Register an event handler so we can play the audio when the client joins
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- await task.queue_frame(TextFrame("a cat in the style of picasso"))
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=runner_args.handle_sigint)
-
- await runner.run(task)
-
-
-async def bot(runner_args: RunnerArguments):
- """Main bot entry point compatible with Pipecat Cloud."""
- transport = await create_transport(runner_args, transport_params)
- await run_bot(transport, runner_args)
-
-
-if __name__ == "__main__":
- from pipecat.runner.run import main
-
- main()
diff --git a/examples/foundational/14p-function-calling-gemini-vertex-ai.py b/examples/foundational/14p-function-calling-gemini-vertex-ai.py
deleted file mode 100644
index 3bee2f1bb..000000000
--- a/examples/foundational/14p-function-calling-gemini-vertex-ai.py
+++ /dev/null
@@ -1,165 +0,0 @@
-#
-# Copyright (c) 2024-2026, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-
-import os
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.adapters.schemas.function_schema import FunctionSchema
-from pipecat.adapters.schemas.tools_schema import ToolsSchema
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import LLMRunFrame, TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.llm_context import LLMContext
-from pipecat.processors.aggregators.llm_response_universal import (
- LLMContextAggregatorPair,
- LLMUserAggregatorParams,
-)
-from pipecat.runner.types import RunnerArguments
-from pipecat.runner.utils import create_transport
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.google.vertex.llm import GoogleVertexLLMService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.daily.transport import DailyParams
-from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams
-
-load_dotenv(override=True)
-
-
-async def fetch_weather_from_api(params: FunctionCallParams):
- await params.result_callback({"conditions": "nice", "temperature": "75"})
-
-
-# We use lambdas to defer transport parameter creation until the transport
-# type is selected at runtime.
-transport_params = {
- "daily": lambda: DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- ),
- "twilio": lambda: FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- ),
- "webrtc": lambda: TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- ),
-}
-
-
-async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
- logger.info(f"Starting bot")
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY", ""),
- settings=ElevenLabsTTSService.Settings(
- voice=os.getenv("ELEVENLABS_VOICE_ID", ""),
- ),
- )
-
- llm = GoogleVertexLLMService(
- credentials=os.getenv("GOOGLE_VERTEX_TEST_CREDENTIALS"),
- project_id=os.getenv("GOOGLE_CLOUD_PROJECT_ID"),
- location=os.getenv("GOOGLE_CLOUD_LOCATION"),
- settings=GoogleVertexLLMService.Settings(
- system_instruction="You are a helpful assistant in a voice conversation. Your responses will be spoken aloud, so avoid emojis, bullet points, or other formatting that can't be spoken. Respond to what the user said in a creative, helpful, and brief way.",
- ),
- )
- # You can aslo register a function_name of None to get all functions
- # sent to the same callback with an additional function_name parameter.
- llm.register_function("get_current_weather", fetch_weather_from_api)
-
- @llm.event_handler("on_function_calls_started")
- async def on_function_calls_started(service, function_calls):
- await tts.queue_frame(TTSSpeakFrame("Let me check on that."))
-
- weather_function = FunctionSchema(
- name="get_current_weather",
- description="Get the current weather",
- properties={
- "location": {
- "type": "string",
- "description": "The city and state, e.g. San Francisco, CA",
- },
- "format": {
- "type": "string",
- "enum": ["celsius", "fahrenheit"],
- "description": "The temperature unit to use. Infer this from the user's location.",
- },
- },
- required=["location", "format"],
- )
- tools = ToolsSchema(standard_tools=[weather_function])
-
- messages = [
- {
- "role": "developer",
- "content": "Start a conversation with 'Hey there' to get the current weather.",
- },
- ]
-
- context = LLMContext(messages, tools)
- user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
- context,
- user_params=LLMUserAggregatorParams(vad_analyzer=SileroVADAnalyzer()),
- )
-
- pipeline = Pipeline(
- [
- transport.input(),
- stt,
- user_aggregator,
- llm,
- tts,
- transport.output(),
- assistant_aggregator,
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- idle_timeout_secs=runner_args.pipeline_idle_timeout_secs,
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected")
- # Kick off the conversation.
- await task.queue_frames([LLMRunFrame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=runner_args.handle_sigint)
-
- await runner.run(task)
-
-
-async def bot(runner_args: RunnerArguments):
- """Main bot entry point compatible with Pipecat Cloud."""
- transport = await create_transport(runner_args, transport_params)
- await run_bot(transport, runner_args)
-
-
-if __name__ == "__main__":
- from pipecat.runner.run import main
-
- main()
diff --git a/examples/foundational/README.md b/examples/foundational/README.md
deleted file mode 100644
index 04e88b7e7..000000000
--- a/examples/foundational/README.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Pipecat Foundational Examples
-
-This directory contains examples showing how to build voice and multimodal agents with Pipecat. Each example demonstrates specific features, progressing from basic to advanced concepts.
-
-## Setup
-
-1. Follow the [README](https://github.com/pipecat-ai/pipecat/blob/main/README.md#%EF%B8%8F-contributing-to-the-framework) steps to get your local environment configured.
-
- > **Run from root directory**: Make sure you are running the steps from the root directory.
-
- > **Using local audio?**: The `LocalAudioTransport` requires a system dependency for `portaudio`. Install the dependency to use the transport.
-
-2. Copy the [`env.example`](../../env.example) file and add API keys for services you plan to use:
-
- ```bash
- cp env.example .env
- # Edit .env with your API keys
- ```
-
-3. Navigate to the examples directory if you aren't already there:
-
- ```bash
- cd examples/foundational
- ```
-
-4. Run any example:
-
- ```bash
- uv run python 01-say-one-thing.py
- ```
-
-5. Open the web interface at http://localhost:7860/client/ and click "Connect"
-
-## Running examples with other transports
-
-Most examples support running with other transports, like Twilio or Daily.
-
-### Daily
-
-You need to create a Daily account at https://dashboard.daily.co/u/signup. Once signed up, you can create your own room from the dashboard and set the environment variables `DAILY_ROOM_URL` and `DAILY_API_KEY`. Alternatively, you can let the example create a room for you (still needs `DAILY_API_KEY` environment variable). Then, start any example with `-t daily`:
-
-```bash
-uv run 07-interruptible.py -t daily
-```
-
-### Twilio
-
-It is also possible to run the example through a Twilio phone number. You will need to setup a few things:
-
-1. Install and run [ngrok](https://ngrok.com/download).
-
-```bash
-ngrok http 7860
-```
-
-2. Configure your Twilio phone number. One way is to setup a TwiML app and set the request URL to the ngrok URL from step (1). Then, set your phone number to use the new TwiML app.
-
-Then, run the example with:
-
-```bash
-uv run 07-interruptible.py -t twilio -x NGROK_HOST_NAME
-```
-
-## Examples by Feature
-
-### Basics
-
-- **[01-say-one-thing.py](./01-say-one-thing.py)**: Most basic bot that says one phrase and exits (Transport, TTS, Event handlers)
-- **[02-llm-say-one-thing.py](./02-llm-say-one-thing.py)**: Bot generates a response with an LLM (LLM initialization)
-- **[03-still-frame.py](./03-still-frame.py)**: Displays a static image (Video transport, Image service)
-- **[04-transport.py](./04-transport.py)**: Different transport options (WebRTC, Daily, Livekit)
-
-### Conversational AI
-
-- **[07-interruptible.py](./07-interruptible.py)**: Basic voice assistant bot (STT, TTS, LLM, Interruptible speech)
-- **[10-wake-phrase.py](./10-wake-phrase.py)**: Bot activated by wake phrase (WakeCheckFilter)
-- **[22-natural-conversation.py](./22-natural-conversation.py)**: Smart turn detection (Multiple LLMs, Turn management)
-- **[38-smart-turn-fal.py](./38-smart-turn-fal.py)**: ML-based turn detection (Fal service, Local models)
-
-### Common Utilities
-
-- **[17-detect-user-idle.py](./17-detect-user-idle.py)**: Handle inactive users (UserIdleProcessor)
-- **[24-user-mute-strategy.py](./24-user-mute-strategy.py)**: Selectively mute user input (LLMUserAggregator user mute strategies)
-- **[28-transcription-processor.py](./28-transcription-processor.py)**: Record conversation text (TranscriptProcessor)
-- **[30-observer.py](./30-observer.py)**: Access frame data (Custom observers)
-- **[31-heartbeats.py](./31-heartbeats.py)**: Detect idle pipelines (Pipeline monitoring)
-- **[34-audio-recording.py](./34-audio-recording.py)**: Record conversation audio (Composite and track-level recording)
-
-### Advanced LLM Features
-
-- **[14-function-calling.py](./14-function-calling.py)**: Bot with tool usage (Function schemas, Tool registration)
-- **[20a-persistent-context-openai.py](./20a-persistent-context-openai.py)**: Persistent conversation context (Memory management)
-- **[32-gemini-grounding-metadata.py](./32-gemini-grounding-metadata.py)**: Web search capabilities (Google search integration)
-- **[33-gemini-rag.py](./33-gemini-rag.py)**: Retrieval-augmented generation (Data sources, Grounding)
-- **[37-mem0.py](./37-mem0.py)**: Long-term agent memory (Mem0 service integration)
-
-### Media Handling
-
-- **[05-sync-speech-and-images.py](./05-sync-speech-and-images.py)**: Synchronized narration with images (Custom processors, SyncParallelPipeline)
-- **[06a-image-sync.py](./06a-image-sync.py)**: Dynamic image updates while speaking (Synchronized A/V pipelines)
-- **[09-mirror.py](./09-mirror.py)**: Mirror user's audio and video (Custom frame processors)
-- **[11-sound-effects.py](./11-sound-effects.py)**: Add sounds when bot speaks (Sound playback, Event synchronization)
-- **[23-bot-background-sound.py](./23-bot-background-sound.py)**: Play background audio (SoundfileMixer)
-
-### Vision & Multimodal
-
-- **[12a-describe-video-gemini-flash.py](./12a-describe-video-gemini-flash.py)**: Bot describes user's video (Video input, Multimodal LLMs)
-- **[26c-gemini-live-video.py](./26c-gemini-live-video.py)**: Gemini with video input (Streaming video, Function calls)
-
-### Voice & Language
-
-- **[13-transcription.py](./13-transcription.py)**: Speech transcription demo (STT providers, Real-time transcription)
-- **[15-switch-voices.py](./15-switch-voices.py)**: Dynamic voice/language changing (ParallelPipelines, FunctionFilters)
-- **[25-google-audio-in.py](./25-google-audio-in.py)**: Gemini for speech recognition (Alternative transcription)
-- **[35-pattern-pair-voice-switching.py](./35-pattern-pair-voice-switching.py)**: Dynamic TTS voice switching (XML parsing, PatternPairAggregator)
-- **[36-user-email-gathering.py](./36-user-email-gathering.py)**: Spelling mode for TTS (Confirmation patterns, XML tags)
-
-### Integration Examples
-
-- **[18-gstreamer-filesrc.py](./18-gstreamer-filesrc.py)**: GStreamer video streaming (Video processing)
-- **[19-openai-realtime-beta.py](./19-openai-realtime-beta.py)**: OpenAI Speech-to-Speech (Direct S2S, Function calls)
-- **[21-tavus-layer-tavus-transport.py](./21-tavus-layer-tavus-transport.py)**: Tavus digital twin (Avatar integration)
-- **[27-simli-layer.py](./27-simli-layer.py)**: Simli avatar integration (Video synchronization)
-- **[56-lemonslice-transport.py](./56-lemonslice-transport.py)**: LemonSlice avatar integration (A/V Synced Avatar integration)
-
-### Performance & Optimization
-
-- **[16-gpu-container-local-bot.py](./16-gpu-container-local-bot.py)**: GPU-accelerated local bot (Performance measurement)
-
-## Advanced Usage
-
-### Customizing Network Settings
-
-```bash
-uv run python --host 0.0.0.0 --port 8080
-```
-
-### Troubleshooting
-
-- **No audio/video**: Check browser permissions for microphone and camera
-- **Connection errors**: Verify API keys in `.env` file
-- **Port conflicts**: Use `--port` to change the port
-
-For more examples, visit our the [pipecat-examples repository](https://github.com/pipecat-ai/pipecat-examples).
diff --git a/examples/foundational/14d-function-calling-anthropic-video.py b/examples/function-calling/anthropic-video.py
similarity index 100%
rename from examples/foundational/14d-function-calling-anthropic-video.py
rename to examples/function-calling/anthropic-video.py
diff --git a/examples/foundational/14a-function-calling-anthropic.py b/examples/function-calling/anthropic.py
similarity index 100%
rename from examples/foundational/14a-function-calling-anthropic.py
rename to examples/function-calling/anthropic.py
diff --git a/examples/foundational/14d-function-calling-aws-video.py b/examples/function-calling/aws-video.py
similarity index 100%
rename from examples/foundational/14d-function-calling-aws-video.py
rename to examples/function-calling/aws-video.py
diff --git a/examples/foundational/14r-function-calling-aws.py b/examples/function-calling/aws.py
similarity index 100%
rename from examples/foundational/14r-function-calling-aws.py
rename to examples/function-calling/aws.py
diff --git a/examples/foundational/14h-function-calling-azure.py b/examples/function-calling/azure.py
similarity index 100%
rename from examples/foundational/14h-function-calling-azure.py
rename to examples/function-calling/azure.py
diff --git a/examples/foundational/14k-function-calling-cerebras.py b/examples/function-calling/cerebras.py
similarity index 100%
rename from examples/foundational/14k-function-calling-cerebras.py
rename to examples/function-calling/cerebras.py
diff --git a/examples/foundational/14l-function-calling-deepseek.py b/examples/function-calling/deepseek.py
similarity index 100%
rename from examples/foundational/14l-function-calling-deepseek.py
rename to examples/function-calling/deepseek.py
diff --git a/examples/foundational/14t-function-calling-direct.py b/examples/function-calling/direct.py
similarity index 100%
rename from examples/foundational/14t-function-calling-direct.py
rename to examples/function-calling/direct.py
diff --git a/examples/foundational/14i-function-calling-fireworks.py b/examples/function-calling/fireworks.py
similarity index 100%
rename from examples/foundational/14i-function-calling-fireworks.py
rename to examples/function-calling/fireworks.py
diff --git a/examples/foundational/14o-function-calling-gemini-openai-format.py b/examples/function-calling/gemini-openai-format.py
similarity index 100%
rename from examples/foundational/14o-function-calling-gemini-openai-format.py
rename to examples/function-calling/gemini-openai-format.py
diff --git a/examples/foundational/14d-function-calling-gemini-flash-video.py b/examples/function-calling/google-video.py
similarity index 100%
rename from examples/foundational/14d-function-calling-gemini-flash-video.py
rename to examples/function-calling/google-video.py
diff --git a/examples/foundational/14e-function-calling-google.py b/examples/function-calling/google.py
similarity index 100%
rename from examples/foundational/14e-function-calling-google.py
rename to examples/function-calling/google.py
diff --git a/examples/foundational/14g-function-calling-grok.py b/examples/function-calling/grok.py
similarity index 100%
rename from examples/foundational/14g-function-calling-grok.py
rename to examples/function-calling/grok.py
diff --git a/examples/foundational/14f-function-calling-groq.py b/examples/function-calling/groq.py
similarity index 100%
rename from examples/foundational/14f-function-calling-groq.py
rename to examples/function-calling/groq.py
diff --git a/examples/foundational/14w-function-calling-mistral.py b/examples/function-calling/mistral.py
similarity index 100%
rename from examples/foundational/14w-function-calling-mistral.py
rename to examples/function-calling/mistral.py
diff --git a/examples/foundational/14d-function-calling-moondream-video.py b/examples/function-calling/moondream-video.py
similarity index 100%
rename from examples/foundational/14d-function-calling-moondream-video.py
rename to examples/function-calling/moondream-video.py
diff --git a/examples/foundational/14v-function-calling-nebius.py b/examples/function-calling/nebius.py
similarity index 100%
rename from examples/foundational/14v-function-calling-nebius.py
rename to examples/function-calling/nebius.py
diff --git a/examples/foundational/14z-function-calling-novita.py b/examples/function-calling/novita.py
similarity index 100%
rename from examples/foundational/14z-function-calling-novita.py
rename to examples/function-calling/novita.py
diff --git a/examples/foundational/14j-function-calling-nvidia.py b/examples/function-calling/nvidia.py
similarity index 100%
rename from examples/foundational/14j-function-calling-nvidia.py
rename to examples/function-calling/nvidia.py
diff --git a/examples/foundational/14u-function-calling-ollama.py b/examples/function-calling/ollama.py
similarity index 100%
rename from examples/foundational/14u-function-calling-ollama.py
rename to examples/function-calling/ollama.py
diff --git a/examples/foundational/14-function-calling-openai-responses-http.py b/examples/function-calling/openai-responses-http.py
similarity index 100%
rename from examples/foundational/14-function-calling-openai-responses-http.py
rename to examples/function-calling/openai-responses-http.py
diff --git a/examples/foundational/14d-function-calling-openai-responses-video-http.py b/examples/function-calling/openai-responses-video-http.py
similarity index 100%
rename from examples/foundational/14d-function-calling-openai-responses-video-http.py
rename to examples/function-calling/openai-responses-video-http.py
diff --git a/examples/foundational/14d-function-calling-openai-responses-video.py b/examples/function-calling/openai-responses-video.py
similarity index 100%
rename from examples/foundational/14d-function-calling-openai-responses-video.py
rename to examples/function-calling/openai-responses-video.py
diff --git a/examples/foundational/14-function-calling-openai-responses.py b/examples/function-calling/openai-responses.py
similarity index 100%
rename from examples/foundational/14-function-calling-openai-responses.py
rename to examples/function-calling/openai-responses.py
diff --git a/examples/foundational/14d-function-calling-openai-video.py b/examples/function-calling/openai-video.py
similarity index 100%
rename from examples/foundational/14d-function-calling-openai-video.py
rename to examples/function-calling/openai-video.py
diff --git a/examples/foundational/14b-function-calling-openai.py b/examples/function-calling/openai.py
similarity index 100%
rename from examples/foundational/14b-function-calling-openai.py
rename to examples/function-calling/openai.py
diff --git a/examples/foundational/14m-function-calling-openrouter.py b/examples/function-calling/openrouter.py
similarity index 100%
rename from examples/foundational/14m-function-calling-openrouter.py
rename to examples/function-calling/openrouter.py
diff --git a/examples/foundational/14n-function-calling-perplexity.py b/examples/function-calling/perplexity.py
similarity index 100%
rename from examples/foundational/14n-function-calling-perplexity.py
rename to examples/function-calling/perplexity.py
diff --git a/examples/foundational/14q-function-calling-qwen.py b/examples/function-calling/qwen.py
similarity index 100%
rename from examples/foundational/14q-function-calling-qwen.py
rename to examples/function-calling/qwen.py
diff --git a/examples/foundational/14s-function-calling-sambanova.py b/examples/function-calling/sambanova.py
similarity index 100%
rename from examples/foundational/14s-function-calling-sambanova.py
rename to examples/function-calling/sambanova.py
diff --git a/examples/foundational/14y-function-calling-sarvam.py b/examples/function-calling/sarvam.py
similarity index 100%
rename from examples/foundational/14y-function-calling-sarvam.py
rename to examples/function-calling/sarvam.py
diff --git a/examples/foundational/14c-function-calling-together.py b/examples/function-calling/together.py
similarity index 100%
rename from examples/foundational/14c-function-calling-together.py
rename to examples/function-calling/together.py
diff --git a/examples/foundational/01-say-one-thing.py b/examples/getting-started/01-say-one-thing.py
similarity index 100%
rename from examples/foundational/01-say-one-thing.py
rename to examples/getting-started/01-say-one-thing.py
diff --git a/examples/foundational/01a-local-audio.py b/examples/getting-started/01a-local-audio.py
similarity index 100%
rename from examples/foundational/01a-local-audio.py
rename to examples/getting-started/01a-local-audio.py
diff --git a/examples/foundational/02-llm-say-one-thing.py b/examples/getting-started/02-llm-say-one-thing.py
similarity index 100%
rename from examples/foundational/02-llm-say-one-thing.py
rename to examples/getting-started/02-llm-say-one-thing.py
diff --git a/examples/foundational/03b-still-frame-imagen.py b/examples/getting-started/03-still-frame.py
similarity index 100%
rename from examples/foundational/03b-still-frame-imagen.py
rename to examples/getting-started/03-still-frame.py
diff --git a/examples/foundational/03a-local-still-frame.py b/examples/getting-started/03a-local-still-frame.py
similarity index 100%
rename from examples/foundational/03a-local-still-frame.py
rename to examples/getting-started/03a-local-still-frame.py
diff --git a/examples/foundational/05-sync-speech-and-image.py b/examples/getting-started/04-sync-speech-and-image.py
similarity index 100%
rename from examples/foundational/05-sync-speech-and-image.py
rename to examples/getting-started/04-sync-speech-and-image.py
diff --git a/examples/foundational/06a-image-sync.py b/examples/getting-started/05-speaking-state.py
similarity index 97%
rename from examples/foundational/06a-image-sync.py
rename to examples/getting-started/05-speaking-state.py
index 473441fac..36762f6b0 100644
--- a/examples/foundational/06a-image-sync.py
+++ b/examples/getting-started/05-speaking-state.py
@@ -119,8 +119,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
)
image_sync_aggregator = ImageSyncAggregator(
- os.path.join(os.path.dirname(__file__), "assets", "speaking.png"),
- os.path.join(os.path.dirname(__file__), "assets", "waiting.png"),
+ os.path.join(os.path.dirname(__file__), "..", "assets", "speaking.png"),
+ os.path.join(os.path.dirname(__file__), "..", "assets", "waiting.png"),
)
pipeline = Pipeline(
diff --git a/examples/foundational/07-interruptible.py b/examples/getting-started/06-voice-agent.py
similarity index 100%
rename from examples/foundational/07-interruptible.py
rename to examples/getting-started/06-voice-agent.py
diff --git a/examples/foundational/07x-interruptible-local.py b/examples/getting-started/06a-voice-agent-local.py
similarity index 100%
rename from examples/foundational/07x-interruptible-local.py
rename to examples/getting-started/06a-voice-agent-local.py
diff --git a/examples/foundational/14-function-calling.py b/examples/getting-started/07-function-calling.py
similarity index 100%
rename from examples/foundational/14-function-calling.py
rename to examples/getting-started/07-function-calling.py
diff --git a/examples/foundational/31-heartbeats.py b/examples/observability/heartbeats.py
similarity index 100%
rename from examples/foundational/31-heartbeats.py
rename to examples/observability/heartbeats.py
diff --git a/examples/foundational/30-observer.py b/examples/observability/observer.py
similarity index 100%
rename from examples/foundational/30-observer.py
rename to examples/observability/observer.py
diff --git a/examples/foundational/47-sentry-metrics.py b/examples/observability/sentry-metrics.py
similarity index 100%
rename from examples/foundational/47-sentry-metrics.py
rename to examples/observability/sentry-metrics.py
diff --git a/examples/foundational/20c-persistent-context-anthropic.py b/examples/persistent-context/anthropic.py
similarity index 100%
rename from examples/foundational/20c-persistent-context-anthropic.py
rename to examples/persistent-context/anthropic.py
diff --git a/examples/foundational/20e-persistent-context-aws-nova-sonic.py b/examples/persistent-context/aws-nova-sonic.py
similarity index 100%
rename from examples/foundational/20e-persistent-context-aws-nova-sonic.py
rename to examples/persistent-context/aws-nova-sonic.py
diff --git a/examples/foundational/20d-persistent-context-gemini.py b/examples/persistent-context/gemini.py
similarity index 100%
rename from examples/foundational/20d-persistent-context-gemini.py
rename to examples/persistent-context/gemini.py
diff --git a/examples/foundational/20f-persistent-context-grok-realtime.py b/examples/persistent-context/grok-realtime.py
similarity index 100%
rename from examples/foundational/20f-persistent-context-grok-realtime.py
rename to examples/persistent-context/grok-realtime.py
diff --git a/examples/foundational/20b-persistent-context-openai-realtime-beta.py b/examples/persistent-context/openai-realtime-beta.py
similarity index 100%
rename from examples/foundational/20b-persistent-context-openai-realtime-beta.py
rename to examples/persistent-context/openai-realtime-beta.py
diff --git a/examples/foundational/20b-persistent-context-openai-realtime.py b/examples/persistent-context/openai-realtime.py
similarity index 100%
rename from examples/foundational/20b-persistent-context-openai-realtime.py
rename to examples/persistent-context/openai-realtime.py
diff --git a/examples/foundational/20a-persistent-context-openai-responses-http.py b/examples/persistent-context/openai-responses-http.py
similarity index 100%
rename from examples/foundational/20a-persistent-context-openai-responses-http.py
rename to examples/persistent-context/openai-responses-http.py
diff --git a/examples/foundational/20a-persistent-context-openai-responses.py b/examples/persistent-context/openai-responses.py
similarity index 100%
rename from examples/foundational/20a-persistent-context-openai-responses.py
rename to examples/persistent-context/openai-responses.py
diff --git a/examples/foundational/20a-persistent-context-openai.py b/examples/persistent-context/openai.py
similarity index 100%
rename from examples/foundational/20a-persistent-context-openai.py
rename to examples/persistent-context/openai.py
diff --git a/examples/foundational/32-gemini-grounding-metadata.py b/examples/rag/gemini-grounding-metadata.py
similarity index 100%
rename from examples/foundational/32-gemini-grounding-metadata.py
rename to examples/rag/gemini-grounding-metadata.py
diff --git a/examples/foundational/33-gemini-rag.py b/examples/rag/gemini-rag.py
similarity index 100%
rename from examples/foundational/33-gemini-rag.py
rename to examples/rag/gemini-rag.py
diff --git a/examples/foundational/37-mem0.py b/examples/rag/mem0.py
similarity index 98%
rename from examples/foundational/37-mem0.py
rename to examples/rag/mem0.py
index a3116df24..c7c0f13bd 100644
--- a/examples/foundational/37-mem0.py
+++ b/examples/rag/mem0.py
@@ -19,10 +19,6 @@ The example:
- Using Mem0 API (cloud-based memory storage)
- Using local configuration with custom LLM (self-hosted memory)
-Example usage (run from pipecat root directory):
- $ pip install "pipecat-ai[daily,openai,elevenlabs,silero,mem0]"
- $ python examples/foundational/37-mem0.py
-
Requirements:
- OpenAI API key
- ElevenLabs API key (for text-to-speech)
diff --git a/examples/foundational/40-aws-nova-sonic.py b/examples/realtime/aws-nova-sonic.py
similarity index 100%
rename from examples/foundational/40-aws-nova-sonic.py
rename to examples/realtime/aws-nova-sonic.py
diff --git a/examples/foundational/19a-azure-realtime-beta.py b/examples/realtime/azure-beta.py
similarity index 100%
rename from examples/foundational/19a-azure-realtime-beta.py
rename to examples/realtime/azure-beta.py
diff --git a/examples/foundational/19a-azure-realtime.py b/examples/realtime/azure.py
similarity index 100%
rename from examples/foundational/19a-azure-realtime.py
rename to examples/realtime/azure.py
diff --git a/examples/foundational/26f-gemini-live-files-api.py b/examples/realtime/gemini-live-files-api.py
similarity index 100%
rename from examples/foundational/26f-gemini-live-files-api.py
rename to examples/realtime/gemini-live-files-api.py
diff --git a/examples/foundational/26b-gemini-live-function-calling.py b/examples/realtime/gemini-live-function-calling.py
similarity index 100%
rename from examples/foundational/26b-gemini-live-function-calling.py
rename to examples/realtime/gemini-live-function-calling.py
diff --git a/examples/foundational/26e-gemini-live-google-search.py b/examples/realtime/gemini-live-google-search.py
similarity index 100%
rename from examples/foundational/26e-gemini-live-google-search.py
rename to examples/realtime/gemini-live-google-search.py
diff --git a/examples/foundational/26i-gemini-live-graceful-end.py b/examples/realtime/gemini-live-graceful-end.py
similarity index 100%
rename from examples/foundational/26i-gemini-live-graceful-end.py
rename to examples/realtime/gemini-live-graceful-end.py
diff --git a/examples/foundational/26g-gemini-live-groundingMetadata.py b/examples/realtime/gemini-live-grounding-metadata.py
similarity index 100%
rename from examples/foundational/26g-gemini-live-groundingMetadata.py
rename to examples/realtime/gemini-live-grounding-metadata.py
diff --git a/examples/foundational/26a-gemini-live-local-vad.py b/examples/realtime/gemini-live-local-vad.py
similarity index 100%
rename from examples/foundational/26a-gemini-live-local-vad.py
rename to examples/realtime/gemini-live-local-vad.py
diff --git a/examples/foundational/26h-gemini-live-vertex-function-calling.py b/examples/realtime/gemini-live-vertex-function-calling.py
similarity index 100%
rename from examples/foundational/26h-gemini-live-vertex-function-calling.py
rename to examples/realtime/gemini-live-vertex-function-calling.py
diff --git a/examples/foundational/26c-gemini-live-video.py b/examples/realtime/gemini-live-video.py
similarity index 100%
rename from examples/foundational/26c-gemini-live-video.py
rename to examples/realtime/gemini-live-video.py
diff --git a/examples/foundational/26-gemini-live.py b/examples/realtime/gemini-live.py
similarity index 100%
rename from examples/foundational/26-gemini-live.py
rename to examples/realtime/gemini-live.py
diff --git a/examples/foundational/51-grok-realtime.py b/examples/realtime/grok.py
similarity index 100%
rename from examples/foundational/51-grok-realtime.py
rename to examples/realtime/grok.py
diff --git a/examples/foundational/19b-openai-realtime-beta-text.py b/examples/realtime/openai-beta-text.py
similarity index 100%
rename from examples/foundational/19b-openai-realtime-beta-text.py
rename to examples/realtime/openai-beta-text.py
diff --git a/examples/foundational/19-openai-realtime-beta.py b/examples/realtime/openai-beta.py
similarity index 100%
rename from examples/foundational/19-openai-realtime-beta.py
rename to examples/realtime/openai-beta.py
diff --git a/examples/foundational/19c-openai-realtime-live-video.py b/examples/realtime/openai-live-video.py
similarity index 100%
rename from examples/foundational/19c-openai-realtime-live-video.py
rename to examples/realtime/openai-live-video.py
diff --git a/examples/foundational/19b-openai-realtime-text.py b/examples/realtime/openai-text.py
similarity index 100%
rename from examples/foundational/19b-openai-realtime-text.py
rename to examples/realtime/openai-text.py
diff --git a/examples/foundational/19-openai-realtime.py b/examples/realtime/openai.py
similarity index 100%
rename from examples/foundational/19-openai-realtime.py
rename to examples/realtime/openai.py
diff --git a/examples/foundational/50a-ultravox-realtime-text.py b/examples/realtime/ultravox-text.py
similarity index 100%
rename from examples/foundational/50a-ultravox-realtime-text.py
rename to examples/realtime/ultravox-text.py
diff --git a/examples/foundational/50-ultravox-realtime.py b/examples/realtime/ultravox.py
similarity index 100%
rename from examples/foundational/50-ultravox-realtime.py
rename to examples/realtime/ultravox.py
diff --git a/examples/foundational/39-mcp-stdio.py b/examples/thinking-and-mcp/mcp-stdio.py
similarity index 100%
rename from examples/foundational/39-mcp-stdio.py
rename to examples/thinking-and-mcp/mcp-stdio.py
diff --git a/examples/foundational/39b-mcp-streamable-http-gemini-live.py b/examples/thinking-and-mcp/mcp-streamable-http-gemini-live.py
similarity index 100%
rename from examples/foundational/39b-mcp-streamable-http-gemini-live.py
rename to examples/thinking-and-mcp/mcp-streamable-http-gemini-live.py
diff --git a/examples/foundational/39a-mcp-streamable-http.py b/examples/thinking-and-mcp/mcp-streamable-http.py
similarity index 100%
rename from examples/foundational/39a-mcp-streamable-http.py
rename to examples/thinking-and-mcp/mcp-streamable-http.py
diff --git a/examples/foundational/39c-multiple-mcp.py b/examples/thinking-and-mcp/multiple-mcp.py
similarity index 100%
rename from examples/foundational/39c-multiple-mcp.py
rename to examples/thinking-and-mcp/multiple-mcp.py
diff --git a/examples/foundational/49a-thinking-anthropic.py b/examples/thinking-and-mcp/thinking-anthropic.py
similarity index 100%
rename from examples/foundational/49a-thinking-anthropic.py
rename to examples/thinking-and-mcp/thinking-anthropic.py
diff --git a/examples/foundational/49c-thinking-functions-anthropic.py b/examples/thinking-and-mcp/thinking-functions-anthropic.py
similarity index 100%
rename from examples/foundational/49c-thinking-functions-anthropic.py
rename to examples/thinking-and-mcp/thinking-functions-anthropic.py
diff --git a/examples/foundational/49d-thinking-functions-google.py b/examples/thinking-and-mcp/thinking-functions-google.py
similarity index 100%
rename from examples/foundational/49d-thinking-functions-google.py
rename to examples/thinking-and-mcp/thinking-functions-google.py
diff --git a/examples/foundational/49b-thinking-google.py b/examples/thinking-and-mcp/thinking-google.py
similarity index 100%
rename from examples/foundational/49b-thinking-google.py
rename to examples/thinking-and-mcp/thinking-google.py
diff --git a/examples/foundational/13d-assemblyai-transcription.py b/examples/transcription/assemblyai.py
similarity index 100%
rename from examples/foundational/13d-assemblyai-transcription.py
rename to examples/transcription/assemblyai.py
diff --git a/examples/foundational/13j-azure-transcription.py b/examples/transcription/azure.py
similarity index 100%
rename from examples/foundational/13j-azure-transcription.py
rename to examples/transcription/azure.py
diff --git a/examples/foundational/13f-cartesia-transcription.py b/examples/transcription/cartesia.py
similarity index 100%
rename from examples/foundational/13f-cartesia-transcription.py
rename to examples/transcription/cartesia.py
diff --git a/examples/foundational/13b-deepgram-transcription.py b/examples/transcription/deepgram.py
similarity index 100%
rename from examples/foundational/13b-deepgram-transcription.py
rename to examples/transcription/deepgram.py
diff --git a/examples/foundational/13k-elevenlabs-transcription.py b/examples/transcription/elevenlabs.py
similarity index 100%
rename from examples/foundational/13k-elevenlabs-transcription.py
rename to examples/transcription/elevenlabs.py
diff --git a/examples/foundational/13c-gladia-transcription.py b/examples/transcription/gladia-transcription.py
similarity index 100%
rename from examples/foundational/13c-gladia-transcription.py
rename to examples/transcription/gladia-transcription.py
diff --git a/examples/foundational/13c-gladia-translation.py b/examples/transcription/gladia-translation.py
similarity index 100%
rename from examples/foundational/13c-gladia-translation.py
rename to examples/transcription/gladia-translation.py
diff --git a/examples/foundational/25-google-audio-in.py b/examples/transcription/google-llm.py
similarity index 100%
rename from examples/foundational/25-google-audio-in.py
rename to examples/transcription/google-llm.py
diff --git a/examples/foundational/13l-gradium-transcription.py b/examples/transcription/gradium.py
similarity index 100%
rename from examples/foundational/13l-gradium-transcription.py
rename to examples/transcription/gradium.py
diff --git a/examples/foundational/13m-openai-transcription.py b/examples/transcription/openai.py
similarity index 100%
rename from examples/foundational/13m-openai-transcription.py
rename to examples/transcription/openai.py
diff --git a/examples/foundational/13i-soniox-transcription.py b/examples/transcription/soniox.py
similarity index 100%
rename from examples/foundational/13i-soniox-transcription.py
rename to examples/transcription/soniox.py
diff --git a/examples/foundational/13h-speechmatics-transcription.py b/examples/transcription/speechmatics.py
similarity index 100%
rename from examples/foundational/13h-speechmatics-transcription.py
rename to examples/transcription/speechmatics.py
diff --git a/examples/foundational/13a-whisper-local.py b/examples/transcription/whisper-local.py
similarity index 100%
rename from examples/foundational/13a-whisper-local.py
rename to examples/transcription/whisper-local.py
diff --git a/examples/foundational/13e-whisper-mlx.py b/examples/transcription/whisper-mlx.py
similarity index 100%
rename from examples/foundational/13e-whisper-mlx.py
rename to examples/transcription/whisper-mlx.py
diff --git a/examples/foundational/13-whisper-transcription.py b/examples/transcription/whisper.py
similarity index 100%
rename from examples/foundational/13-whisper-transcription.py
rename to examples/transcription/whisper.py
diff --git a/examples/foundational/04a-transports-daily.py b/examples/transports/daily.py
similarity index 100%
rename from examples/foundational/04a-transports-daily.py
rename to examples/transports/daily.py
diff --git a/examples/foundational/04b-transports-livekit.py b/examples/transports/livekit.py
similarity index 100%
rename from examples/foundational/04b-transports-livekit.py
rename to examples/transports/livekit.py
diff --git a/examples/foundational/04-transports-small-webrtc.py b/examples/transports/small-webrtc.py
similarity index 100%
rename from examples/foundational/04-transports-small-webrtc.py
rename to examples/transports/small-webrtc.py
diff --git a/examples/foundational/17-detect-user-idle.py b/examples/turn-management/detect-user-idle.py
similarity index 100%
rename from examples/foundational/17-detect-user-idle.py
rename to examples/turn-management/detect-user-idle.py
diff --git a/examples/foundational/22-filter-incomplete-turns.py b/examples/turn-management/filter-incomplete-turns.py
similarity index 100%
rename from examples/foundational/22-filter-incomplete-turns.py
rename to examples/turn-management/filter-incomplete-turns.py
diff --git a/examples/foundational/42-interruption-config.py b/examples/turn-management/interruption-config.py
similarity index 100%
rename from examples/foundational/42-interruption-config.py
rename to examples/turn-management/interruption-config.py
diff --git a/examples/foundational/38a-smart-turn-local-coreml.py b/examples/turn-management/smart-turn-local-coreml.py
similarity index 100%
rename from examples/foundational/38a-smart-turn-local-coreml.py
rename to examples/turn-management/smart-turn-local-coreml.py
diff --git a/examples/foundational/38b-smart-turn-local.py b/examples/turn-management/smart-turn-local.py
similarity index 100%
rename from examples/foundational/38b-smart-turn-local.py
rename to examples/turn-management/smart-turn-local.py
diff --git a/examples/foundational/29-turn-tracking-observer.py b/examples/turn-management/turn-tracking-observer.py
similarity index 100%
rename from examples/foundational/29-turn-tracking-observer.py
rename to examples/turn-management/turn-tracking-observer.py
diff --git a/examples/foundational/28-user-assistant-turns.py b/examples/turn-management/user-assistant-turns.py
similarity index 100%
rename from examples/foundational/28-user-assistant-turns.py
rename to examples/turn-management/user-assistant-turns.py
diff --git a/examples/foundational/24-user-mute-strategy.py b/examples/turn-management/user-mute-strategy.py
similarity index 100%
rename from examples/foundational/24-user-mute-strategy.py
rename to examples/turn-management/user-mute-strategy.py
diff --git a/examples/foundational/55zj-update-settings-anthropic-llm.py b/examples/update-settings/llm/anthropic.py
similarity index 100%
rename from examples/foundational/55zj-update-settings-anthropic-llm.py
rename to examples/update-settings/llm/anthropic.py
diff --git a/examples/foundational/55zp-update-settings-aws-bedrock-llm.py b/examples/update-settings/llm/aws-bedrock.py
similarity index 100%
rename from examples/foundational/55zp-update-settings-aws-bedrock-llm.py
rename to examples/update-settings/llm/aws-bedrock.py
diff --git a/examples/foundational/55zzk-update-settings-aws-nova-sonic-llm.py b/examples/update-settings/llm/aws-nova-sonic.py
similarity index 100%
rename from examples/foundational/55zzk-update-settings-aws-nova-sonic-llm.py
rename to examples/update-settings/llm/aws-nova-sonic.py
diff --git a/examples/foundational/55zl-update-settings-azure-realtime.py b/examples/update-settings/llm/azure-realtime.py
similarity index 100%
rename from examples/foundational/55zl-update-settings-azure-realtime.py
rename to examples/update-settings/llm/azure-realtime.py
diff --git a/examples/foundational/55zi-update-settings-azure-llm.py b/examples/update-settings/llm/azure.py
similarity index 100%
rename from examples/foundational/55zi-update-settings-azure-llm.py
rename to examples/update-settings/llm/azure.py
diff --git a/examples/foundational/55zx-update-settings-cerebras-llm.py b/examples/update-settings/llm/cerebras.py
similarity index 100%
rename from examples/foundational/55zx-update-settings-cerebras-llm.py
rename to examples/update-settings/llm/cerebras.py
diff --git a/examples/foundational/55zy-update-settings-deepseek-llm.py b/examples/update-settings/llm/deepseek.py
similarity index 100%
rename from examples/foundational/55zy-update-settings-deepseek-llm.py
rename to examples/update-settings/llm/deepseek.py
diff --git a/examples/foundational/55zz-update-settings-fireworks-llm.py b/examples/update-settings/llm/fireworks.py
similarity index 100%
rename from examples/foundational/55zz-update-settings-fireworks-llm.py
rename to examples/update-settings/llm/fireworks.py
diff --git a/examples/foundational/55zm-update-settings-gemini-live-vertex.py b/examples/update-settings/llm/gemini-live-vertex.py
similarity index 100%
rename from examples/foundational/55zm-update-settings-gemini-live-vertex.py
rename to examples/update-settings/llm/gemini-live-vertex.py
diff --git a/examples/foundational/55zm-update-settings-gemini-live.py b/examples/update-settings/llm/gemini-live.py
similarity index 100%
rename from examples/foundational/55zm-update-settings-gemini-live.py
rename to examples/update-settings/llm/gemini-live.py
diff --git a/examples/foundational/55zk-update-settings-google-vertex-llm.py b/examples/update-settings/llm/google-vertex.py
similarity index 100%
rename from examples/foundational/55zk-update-settings-google-vertex-llm.py
rename to examples/update-settings/llm/google-vertex.py
diff --git a/examples/foundational/55zk-update-settings-google-llm.py b/examples/update-settings/llm/google.py
similarity index 100%
rename from examples/foundational/55zk-update-settings-google-llm.py
rename to examples/update-settings/llm/google.py
diff --git a/examples/foundational/55zo-update-settings-grok-realtime.py b/examples/update-settings/llm/grok-realtime.py
similarity index 100%
rename from examples/foundational/55zo-update-settings-grok-realtime.py
rename to examples/update-settings/llm/grok-realtime.py
diff --git a/examples/foundational/55zza-update-settings-grok-llm.py b/examples/update-settings/llm/grok.py
similarity index 100%
rename from examples/foundational/55zza-update-settings-grok-llm.py
rename to examples/update-settings/llm/grok.py
diff --git a/examples/foundational/55zzb-update-settings-groq-llm.py b/examples/update-settings/llm/groq.py
similarity index 100%
rename from examples/foundational/55zzb-update-settings-groq-llm.py
rename to examples/update-settings/llm/groq.py
diff --git a/examples/foundational/55zzc-update-settings-mistral-llm.py b/examples/update-settings/llm/mistral.py
similarity index 100%
rename from examples/foundational/55zzc-update-settings-mistral-llm.py
rename to examples/update-settings/llm/mistral.py
diff --git a/examples/foundational/55zzd-update-settings-nvidia-llm.py b/examples/update-settings/llm/nvidia.py
similarity index 100%
rename from examples/foundational/55zzd-update-settings-nvidia-llm.py
rename to examples/update-settings/llm/nvidia.py
diff --git a/examples/foundational/55zze-update-settings-ollama-llm.py b/examples/update-settings/llm/ollama.py
similarity index 100%
rename from examples/foundational/55zze-update-settings-ollama-llm.py
rename to examples/update-settings/llm/ollama.py
diff --git a/examples/foundational/55zl-update-settings-openai-realtime.py b/examples/update-settings/llm/openai-realtime.py
similarity index 100%
rename from examples/foundational/55zl-update-settings-openai-realtime.py
rename to examples/update-settings/llm/openai-realtime.py
diff --git a/examples/foundational/55zi-update-settings-openai-responses-http-llm.py b/examples/update-settings/llm/openai-responses-http.py
similarity index 100%
rename from examples/foundational/55zi-update-settings-openai-responses-http-llm.py
rename to examples/update-settings/llm/openai-responses-http.py
diff --git a/examples/foundational/55zi-update-settings-openai-responses-llm.py b/examples/update-settings/llm/openai-responses.py
similarity index 100%
rename from examples/foundational/55zi-update-settings-openai-responses-llm.py
rename to examples/update-settings/llm/openai-responses.py
diff --git a/examples/foundational/55zi-update-settings-openai-llm.py b/examples/update-settings/llm/openai.py
similarity index 100%
rename from examples/foundational/55zi-update-settings-openai-llm.py
rename to examples/update-settings/llm/openai.py
diff --git a/examples/foundational/55zzf-update-settings-openrouter-llm.py b/examples/update-settings/llm/openrouter.py
similarity index 100%
rename from examples/foundational/55zzf-update-settings-openrouter-llm.py
rename to examples/update-settings/llm/openrouter.py
diff --git a/examples/foundational/55zzg-update-settings-perplexity-llm.py b/examples/update-settings/llm/perplexity.py
similarity index 100%
rename from examples/foundational/55zzg-update-settings-perplexity-llm.py
rename to examples/update-settings/llm/perplexity.py
diff --git a/examples/foundational/55zzh-update-settings-qwen-llm.py b/examples/update-settings/llm/qwen.py
similarity index 100%
rename from examples/foundational/55zzh-update-settings-qwen-llm.py
rename to examples/update-settings/llm/qwen.py
diff --git a/examples/foundational/55zzi-update-settings-sambanova-llm.py b/examples/update-settings/llm/sambanova.py
similarity index 100%
rename from examples/foundational/55zzi-update-settings-sambanova-llm.py
rename to examples/update-settings/llm/sambanova.py
diff --git a/examples/foundational/55zzq-update-settings-sarvam-llm.py b/examples/update-settings/llm/sarvam.py
similarity index 100%
rename from examples/foundational/55zzq-update-settings-sarvam-llm.py
rename to examples/update-settings/llm/sarvam.py
diff --git a/examples/foundational/55zzj-update-settings-together-llm.py b/examples/update-settings/llm/together.py
similarity index 100%
rename from examples/foundational/55zzj-update-settings-together-llm.py
rename to examples/update-settings/llm/together.py
diff --git a/examples/foundational/55zn-update-settings-ultravox-realtime.py b/examples/update-settings/llm/ultravox-realtime.py
similarity index 100%
rename from examples/foundational/55zn-update-settings-ultravox-realtime.py
rename to examples/update-settings/llm/ultravox-realtime.py
diff --git a/examples/foundational/55d-update-settings-assemblyai-stt.py b/examples/update-settings/stt/assemblyai.py
similarity index 100%
rename from examples/foundational/55d-update-settings-assemblyai-stt.py
rename to examples/update-settings/stt/assemblyai.py
diff --git a/examples/foundational/55l-update-settings-aws-transcribe-stt.py b/examples/update-settings/stt/aws-transcribe.py
similarity index 100%
rename from examples/foundational/55l-update-settings-aws-transcribe-stt.py
rename to examples/update-settings/stt/aws-transcribe.py
diff --git a/examples/foundational/55b-update-settings-azure-stt.py b/examples/update-settings/stt/azure.py
similarity index 100%
rename from examples/foundational/55b-update-settings-azure-stt.py
rename to examples/update-settings/stt/azure.py
diff --git a/examples/foundational/55m-update-settings-cartesia-stt.py b/examples/update-settings/stt/cartesia.py
similarity index 100%
rename from examples/foundational/55m-update-settings-cartesia-stt.py
rename to examples/update-settings/stt/cartesia.py
diff --git a/examples/foundational/55a-update-settings-deepgram-flux-stt.py b/examples/update-settings/stt/deepgram-flux.py
similarity index 100%
rename from examples/foundational/55a-update-settings-deepgram-flux-stt.py
rename to examples/update-settings/stt/deepgram-flux.py
diff --git a/examples/foundational/55a-update-settings-deepgram-sagemaker-stt.py b/examples/update-settings/stt/deepgram-sagemaker.py
similarity index 100%
rename from examples/foundational/55a-update-settings-deepgram-sagemaker-stt.py
rename to examples/update-settings/stt/deepgram-sagemaker.py
diff --git a/examples/foundational/55a-update-settings-deepgram-stt.py b/examples/update-settings/stt/deepgram.py
similarity index 100%
rename from examples/foundational/55a-update-settings-deepgram-stt.py
rename to examples/update-settings/stt/deepgram.py
diff --git a/examples/foundational/55f-update-settings-elevenlabs-realtime-stt.py b/examples/update-settings/stt/elevenlabs-realtime.py
similarity index 100%
rename from examples/foundational/55f-update-settings-elevenlabs-realtime-stt.py
rename to examples/update-settings/stt/elevenlabs-realtime.py
diff --git a/examples/foundational/55g-update-settings-elevenlabs-stt.py b/examples/update-settings/stt/elevenlabs.py
similarity index 100%
rename from examples/foundational/55g-update-settings-elevenlabs-stt.py
rename to examples/update-settings/stt/elevenlabs.py
diff --git a/examples/foundational/55zq-update-settings-fal-stt.py b/examples/update-settings/stt/fal.py
similarity index 100%
rename from examples/foundational/55zq-update-settings-fal-stt.py
rename to examples/update-settings/stt/fal.py
diff --git a/examples/foundational/55e-update-settings-gladia-stt.py b/examples/update-settings/stt/gladia.py
similarity index 100%
rename from examples/foundational/55e-update-settings-gladia-stt.py
rename to examples/update-settings/stt/gladia.py
diff --git a/examples/foundational/55c-update-settings-google-stt.py b/examples/update-settings/stt/google.py
similarity index 100%
rename from examples/foundational/55c-update-settings-google-stt.py
rename to examples/update-settings/stt/google.py
diff --git a/examples/foundational/55zr-update-settings-gradium-stt.py b/examples/update-settings/stt/gradium.py
similarity index 100%
rename from examples/foundational/55zr-update-settings-gradium-stt.py
rename to examples/update-settings/stt/gradium.py
diff --git a/examples/foundational/55zzn-update-settings-groq-stt.py b/examples/update-settings/stt/groq.py
similarity index 100%
rename from examples/foundational/55zzn-update-settings-groq-stt.py
rename to examples/update-settings/stt/groq.py
diff --git a/examples/foundational/55zt-update-settings-nvidia-segmented-stt.py b/examples/update-settings/stt/nvidia-segmented.py
similarity index 100%
rename from examples/foundational/55zt-update-settings-nvidia-segmented-stt.py
rename to examples/update-settings/stt/nvidia-segmented.py
diff --git a/examples/foundational/55zt-update-settings-nvidia-stt.py b/examples/update-settings/stt/nvidia.py
similarity index 100%
rename from examples/foundational/55zt-update-settings-nvidia-stt.py
rename to examples/update-settings/stt/nvidia.py
diff --git a/examples/foundational/55zu-update-settings-openai-realtime-stt.py b/examples/update-settings/stt/openai-realtime.py
similarity index 100%
rename from examples/foundational/55zu-update-settings-openai-realtime-stt.py
rename to examples/update-settings/stt/openai-realtime.py
diff --git a/examples/foundational/55j-update-settings-sarvam-stt.py b/examples/update-settings/stt/sarvam.py
similarity index 100%
rename from examples/foundational/55j-update-settings-sarvam-stt.py
rename to examples/update-settings/stt/sarvam.py
diff --git a/examples/foundational/55k-update-settings-soniox-stt.py b/examples/update-settings/stt/soniox.py
similarity index 100%
rename from examples/foundational/55k-update-settings-soniox-stt.py
rename to examples/update-settings/stt/soniox.py
diff --git a/examples/foundational/55h-update-settings-speechmatics-stt.py b/examples/update-settings/stt/speechmatics.py
similarity index 100%
rename from examples/foundational/55h-update-settings-speechmatics-stt.py
rename to examples/update-settings/stt/speechmatics.py
diff --git a/examples/foundational/55i-update-settings-whisper-api-stt.py b/examples/update-settings/stt/whisper-api.py
similarity index 100%
rename from examples/foundational/55i-update-settings-whisper-api-stt.py
rename to examples/update-settings/stt/whisper-api.py
diff --git a/examples/foundational/55zs-update-settings-whisper-mlx-stt.py b/examples/update-settings/stt/whisper-mlx.py
similarity index 100%
rename from examples/foundational/55zs-update-settings-whisper-mlx-stt.py
rename to examples/update-settings/stt/whisper-mlx.py
diff --git a/examples/foundational/55zs-update-settings-whisper-stt.py b/examples/update-settings/stt/whisper.py
similarity index 100%
rename from examples/foundational/55zs-update-settings-whisper-stt.py
rename to examples/update-settings/stt/whisper.py
diff --git a/examples/foundational/55zv-update-settings-asyncai-http-tts.py b/examples/update-settings/tts/asyncai-http.py
similarity index 100%
rename from examples/foundational/55zv-update-settings-asyncai-http-tts.py
rename to examples/update-settings/tts/asyncai-http.py
diff --git a/examples/foundational/55zv-update-settings-asyncai-tts.py b/examples/update-settings/tts/asyncai.py
similarity index 100%
rename from examples/foundational/55zv-update-settings-asyncai-tts.py
rename to examples/update-settings/tts/asyncai.py
diff --git a/examples/foundational/55zd-update-settings-aws-polly-tts.py b/examples/update-settings/tts/aws-polly.py
similarity index 100%
rename from examples/foundational/55zd-update-settings-aws-polly-tts.py
rename to examples/update-settings/tts/aws-polly.py
diff --git a/examples/foundational/55r-update-settings-azure-http-tts.py b/examples/update-settings/tts/azure-http.py
similarity index 100%
rename from examples/foundational/55r-update-settings-azure-http-tts.py
rename to examples/update-settings/tts/azure-http.py
diff --git a/examples/foundational/55r-update-settings-azure-tts.py b/examples/update-settings/tts/azure.py
similarity index 100%
rename from examples/foundational/55r-update-settings-azure-tts.py
rename to examples/update-settings/tts/azure.py
diff --git a/examples/foundational/55zf-update-settings-camb-tts.py b/examples/update-settings/tts/camb.py
similarity index 100%
rename from examples/foundational/55zf-update-settings-camb-tts.py
rename to examples/update-settings/tts/camb.py
diff --git a/examples/foundational/55n-update-settings-cartesia-http-tts.py b/examples/update-settings/tts/cartesia-http.py
similarity index 100%
rename from examples/foundational/55n-update-settings-cartesia-http-tts.py
rename to examples/update-settings/tts/cartesia-http.py
diff --git a/examples/foundational/55n-update-settings-cartesia-tts.py b/examples/update-settings/tts/cartesia.py
similarity index 100%
rename from examples/foundational/55n-update-settings-cartesia-tts.py
rename to examples/update-settings/tts/cartesia.py
diff --git a/examples/foundational/55q-update-settings-deepgram-http-tts.py b/examples/update-settings/tts/deepgram-http.py
similarity index 100%
rename from examples/foundational/55q-update-settings-deepgram-http-tts.py
rename to examples/update-settings/tts/deepgram-http.py
diff --git a/examples/foundational/55q-update-settings-deepgram-sagemaker-tts.py b/examples/update-settings/tts/deepgram-sagemaker.py
similarity index 100%
rename from examples/foundational/55q-update-settings-deepgram-sagemaker-tts.py
rename to examples/update-settings/tts/deepgram-sagemaker.py
diff --git a/examples/foundational/55q-update-settings-deepgram-tts.py b/examples/update-settings/tts/deepgram.py
similarity index 100%
rename from examples/foundational/55q-update-settings-deepgram-tts.py
rename to examples/update-settings/tts/deepgram.py
diff --git a/examples/foundational/55o-update-settings-elevenlabs-http-tts.py b/examples/update-settings/tts/elevenlabs-http.py
similarity index 100%
rename from examples/foundational/55o-update-settings-elevenlabs-http-tts.py
rename to examples/update-settings/tts/elevenlabs-http.py
diff --git a/examples/foundational/55o-update-settings-elevenlabs-tts.py b/examples/update-settings/tts/elevenlabs.py
similarity index 100%
rename from examples/foundational/55o-update-settings-elevenlabs-tts.py
rename to examples/update-settings/tts/elevenlabs.py
diff --git a/examples/foundational/55w-update-settings-fish-tts.py b/examples/update-settings/tts/fish.py
similarity index 100%
rename from examples/foundational/55w-update-settings-fish-tts.py
rename to examples/update-settings/tts/fish.py
diff --git a/examples/foundational/55zc-update-settings-gemini-tts.py b/examples/update-settings/tts/gemini.py
similarity index 100%
rename from examples/foundational/55zc-update-settings-gemini-tts.py
rename to examples/update-settings/tts/gemini.py
diff --git a/examples/foundational/55s-update-settings-google-http-tts.py b/examples/update-settings/tts/google-http.py
similarity index 100%
rename from examples/foundational/55s-update-settings-google-http-tts.py
rename to examples/update-settings/tts/google-http.py
diff --git a/examples/foundational/55s-update-settings-google-stream-tts.py b/examples/update-settings/tts/google-stream.py
similarity index 100%
rename from examples/foundational/55s-update-settings-google-stream-tts.py
rename to examples/update-settings/tts/google-stream.py
diff --git a/examples/foundational/55zw-update-settings-gradium-tts.py b/examples/update-settings/tts/gradium.py
similarity index 100%
rename from examples/foundational/55zw-update-settings-gradium-tts.py
rename to examples/update-settings/tts/gradium.py
diff --git a/examples/foundational/55y-update-settings-groq-tts.py b/examples/update-settings/tts/groq.py
similarity index 100%
rename from examples/foundational/55y-update-settings-groq-tts.py
rename to examples/update-settings/tts/groq.py
diff --git a/examples/foundational/55z-update-settings-hume-tts.py b/examples/update-settings/tts/hume.py
similarity index 100%
rename from examples/foundational/55z-update-settings-hume-tts.py
rename to examples/update-settings/tts/hume.py
diff --git a/examples/foundational/55zb-update-settings-inworld-http-tts.py b/examples/update-settings/tts/inworld-http.py
similarity index 100%
rename from examples/foundational/55zb-update-settings-inworld-http-tts.py
rename to examples/update-settings/tts/inworld-http.py
diff --git a/examples/foundational/55zb-update-settings-inworld-tts.py b/examples/update-settings/tts/inworld.py
similarity index 100%
rename from examples/foundational/55zb-update-settings-inworld-tts.py
rename to examples/update-settings/tts/inworld.py
diff --git a/examples/foundational/55zg-update-settings-kokoro-tts.py b/examples/update-settings/tts/kokoro.py
similarity index 100%
rename from examples/foundational/55zg-update-settings-kokoro-tts.py
rename to examples/update-settings/tts/kokoro.py
diff --git a/examples/foundational/55v-update-settings-lmnt-tts.py b/examples/update-settings/tts/lmnt.py
similarity index 100%
rename from examples/foundational/55v-update-settings-lmnt-tts.py
rename to examples/update-settings/tts/lmnt.py
diff --git a/examples/foundational/55x-update-settings-minimax-tts.py b/examples/update-settings/tts/minimax.py
similarity index 100%
rename from examples/foundational/55x-update-settings-minimax-tts.py
rename to examples/update-settings/tts/minimax.py
diff --git a/examples/foundational/55za-update-settings-neuphonic-http-tts.py b/examples/update-settings/tts/neuphonic-http.py
similarity index 100%
rename from examples/foundational/55za-update-settings-neuphonic-http-tts.py
rename to examples/update-settings/tts/neuphonic-http.py
diff --git a/examples/foundational/55za-update-settings-neuphonic-tts.py b/examples/update-settings/tts/neuphonic.py
similarity index 100%
rename from examples/foundational/55za-update-settings-neuphonic-tts.py
rename to examples/update-settings/tts/neuphonic.py
diff --git a/examples/foundational/55zzl-update-settings-nvidia-tts.py b/examples/update-settings/tts/nvidia.py
similarity index 100%
rename from examples/foundational/55zzl-update-settings-nvidia-tts.py
rename to examples/update-settings/tts/nvidia.py
diff --git a/examples/foundational/55p-update-settings-openai-tts.py b/examples/update-settings/tts/openai.py
similarity index 100%
rename from examples/foundational/55p-update-settings-openai-tts.py
rename to examples/update-settings/tts/openai.py
diff --git a/examples/foundational/55t-update-settings-piper-http-tts.py b/examples/update-settings/tts/piper-http.py
similarity index 100%
rename from examples/foundational/55t-update-settings-piper-http-tts.py
rename to examples/update-settings/tts/piper-http.py
diff --git a/examples/foundational/55t-update-settings-piper-tts.py b/examples/update-settings/tts/piper.py
similarity index 100%
rename from examples/foundational/55t-update-settings-piper-tts.py
rename to examples/update-settings/tts/piper.py
diff --git a/examples/foundational/55zh-update-settings-resembleai-tts.py b/examples/update-settings/tts/resembleai.py
similarity index 100%
rename from examples/foundational/55zh-update-settings-resembleai-tts.py
rename to examples/update-settings/tts/resembleai.py
diff --git a/examples/foundational/55u-update-settings-rime-http-tts.py b/examples/update-settings/tts/rime-http.py
similarity index 100%
rename from examples/foundational/55u-update-settings-rime-http-tts.py
rename to examples/update-settings/tts/rime-http.py
diff --git a/examples/foundational/55u-update-settings-rime-tts.py b/examples/update-settings/tts/rime.py
similarity index 100%
rename from examples/foundational/55u-update-settings-rime-tts.py
rename to examples/update-settings/tts/rime.py
diff --git a/examples/foundational/55ze-update-settings-sarvam-http-tts.py b/examples/update-settings/tts/sarvam-http.py
similarity index 100%
rename from examples/foundational/55ze-update-settings-sarvam-http-tts.py
rename to examples/update-settings/tts/sarvam-http.py
diff --git a/examples/foundational/55ze-update-settings-sarvam-tts.py b/examples/update-settings/tts/sarvam.py
similarity index 100%
rename from examples/foundational/55ze-update-settings-sarvam-tts.py
rename to examples/update-settings/tts/sarvam.py
diff --git a/examples/foundational/55zzm-update-settings-speechmatics-tts.py b/examples/update-settings/tts/speechmatics.py
similarity index 100%
rename from examples/foundational/55zzm-update-settings-speechmatics-tts.py
rename to examples/update-settings/tts/speechmatics.py
diff --git a/examples/foundational/55zzp-update-settings-xtts-tts.py b/examples/update-settings/tts/xtts.py
similarity index 100%
rename from examples/foundational/55zzp-update-settings-xtts-tts.py
rename to examples/update-settings/tts/xtts.py
diff --git a/examples/foundational/43-heygen-transport.py b/examples/video-avatar/heygen-transport.py
similarity index 100%
rename from examples/foundational/43-heygen-transport.py
rename to examples/video-avatar/heygen-transport.py
diff --git a/examples/foundational/43a-heygen-video-service.py b/examples/video-avatar/heygen-video-service.py
similarity index 100%
rename from examples/foundational/43a-heygen-video-service.py
rename to examples/video-avatar/heygen-video-service.py
diff --git a/examples/foundational/56-lemonslice-transport.py b/examples/video-avatar/lemonslice-transport.py
similarity index 100%
rename from examples/foundational/56-lemonslice-transport.py
rename to examples/video-avatar/lemonslice-transport.py
diff --git a/examples/foundational/27-simli-layer.py b/examples/video-avatar/simli-layer.py
similarity index 100%
rename from examples/foundational/27-simli-layer.py
rename to examples/video-avatar/simli-layer.py
diff --git a/examples/foundational/21-tavus-transport.py b/examples/video-avatar/tavus-transport.py
similarity index 100%
rename from examples/foundational/21-tavus-transport.py
rename to examples/video-avatar/tavus-transport.py
diff --git a/examples/foundational/21a-tavus-video-service.py b/examples/video-avatar/tavus-video-service.py
similarity index 100%
rename from examples/foundational/21a-tavus-video-service.py
rename to examples/video-avatar/tavus-video-service.py
diff --git a/examples/foundational/57-custom-video-track.py b/examples/video-processing/custom-video-track.py
similarity index 98%
rename from examples/foundational/57-custom-video-track.py
rename to examples/video-processing/custom-video-track.py
index 274ab6a5e..1e6190a3b 100644
--- a/examples/foundational/57-custom-video-track.py
+++ b/examples/video-processing/custom-video-track.py
@@ -13,8 +13,6 @@ This example outputs two video track simultaneously:
The pattern generator pushes frames to the default camera. A second processor
(BlueTintProcessor) duplicates each frame, applies a blue tint, and pushes it
to the "blue" custom video destination.
-
-Run with: python examples/foundational/56-custom-video-track.py -t daily
"""
import asyncio
diff --git a/examples/foundational/18-gstreamer-filesrc.py b/examples/video-processing/gstreamer-filesrc.py
similarity index 100%
rename from examples/foundational/18-gstreamer-filesrc.py
rename to examples/video-processing/gstreamer-filesrc.py
diff --git a/examples/foundational/18a-gstreamer-videotestsrc.py b/examples/video-processing/gstreamer-videotestsrc.py
similarity index 100%
rename from examples/foundational/18a-gstreamer-videotestsrc.py
rename to examples/video-processing/gstreamer-videotestsrc.py
diff --git a/examples/foundational/09a-local-mirror.py b/examples/video-processing/local-mirror.py
similarity index 100%
rename from examples/foundational/09a-local-mirror.py
rename to examples/video-processing/local-mirror.py
diff --git a/examples/foundational/09-mirror.py b/examples/video-processing/mirror.py
similarity index 100%
rename from examples/foundational/09-mirror.py
rename to examples/video-processing/mirror.py
diff --git a/examples/foundational/46-video-processing.py b/examples/video-processing/video-processing.py
similarity index 100%
rename from examples/foundational/46-video-processing.py
rename to examples/video-processing/video-processing.py
diff --git a/examples/foundational/12a-describe-image-anthropic.py b/examples/vision/anthropic.py
similarity index 100%
rename from examples/foundational/12a-describe-image-anthropic.py
rename to examples/vision/anthropic.py
diff --git a/examples/foundational/12b-describe-image-aws.py b/examples/vision/aws.py
similarity index 100%
rename from examples/foundational/12b-describe-image-aws.py
rename to examples/vision/aws.py
diff --git a/examples/foundational/12c-describe-image-gemini-flash.py b/examples/vision/gemini-flash.py
similarity index 100%
rename from examples/foundational/12c-describe-image-gemini-flash.py
rename to examples/vision/gemini-flash.py
diff --git a/examples/foundational/12d-describe-image-moondream.py b/examples/vision/moondream.py
similarity index 100%
rename from examples/foundational/12d-describe-image-moondream.py
rename to examples/vision/moondream.py
diff --git a/examples/foundational/12-describe-image-openai-responses-http.py b/examples/vision/openai-responses-http.py
similarity index 100%
rename from examples/foundational/12-describe-image-openai-responses-http.py
rename to examples/vision/openai-responses-http.py
diff --git a/examples/foundational/12-describe-image-openai-responses.py b/examples/vision/openai-responses.py
similarity index 100%
rename from examples/foundational/12-describe-image-openai-responses.py
rename to examples/vision/openai-responses.py
diff --git a/examples/foundational/12-describe-image-openai.py b/examples/vision/openai.py
similarity index 100%
rename from examples/foundational/12-describe-image-openai.py
rename to examples/vision/openai.py
diff --git a/examples/foundational/07zd-interruptible-aicoustics.py b/examples/voice/aicoustics.py
similarity index 100%
rename from examples/foundational/07zd-interruptible-aicoustics.py
rename to examples/voice/aicoustics.py
diff --git a/examples/foundational/07o-interruptible-assemblyai-turn-detection.py b/examples/voice/assemblyai-turn-detection.py
similarity index 100%
rename from examples/foundational/07o-interruptible-assemblyai-turn-detection.py
rename to examples/voice/assemblyai-turn-detection.py
diff --git a/examples/foundational/07o-interruptible-assemblyai.py b/examples/voice/assemblyai.py
similarity index 100%
rename from examples/foundational/07o-interruptible-assemblyai.py
rename to examples/voice/assemblyai.py
diff --git a/examples/foundational/07zc-interruptible-asyncai-http.py b/examples/voice/asyncai-http.py
similarity index 100%
rename from examples/foundational/07zc-interruptible-asyncai-http.py
rename to examples/voice/asyncai-http.py
diff --git a/examples/foundational/07zc-interruptible-asyncai.py b/examples/voice/asyncai.py
similarity index 100%
rename from examples/foundational/07zc-interruptible-asyncai.py
rename to examples/voice/asyncai.py
diff --git a/examples/foundational/07m-interruptible-aws-strands.py b/examples/voice/aws-strands.py
similarity index 100%
rename from examples/foundational/07m-interruptible-aws-strands.py
rename to examples/voice/aws-strands.py
diff --git a/examples/foundational/07m-interruptible-aws.py b/examples/voice/aws.py
similarity index 100%
rename from examples/foundational/07m-interruptible-aws.py
rename to examples/voice/aws.py
diff --git a/examples/foundational/07f-interruptible-azure-http.py b/examples/voice/azure-http.py
similarity index 100%
rename from examples/foundational/07f-interruptible-azure-http.py
rename to examples/voice/azure-http.py
diff --git a/examples/foundational/07f-interruptible-azure.py b/examples/voice/azure.py
similarity index 100%
rename from examples/foundational/07f-interruptible-azure.py
rename to examples/voice/azure.py
diff --git a/examples/foundational/07zg-interruptible-camb.py b/examples/voice/camb.py
similarity index 100%
rename from examples/foundational/07zg-interruptible-camb.py
rename to examples/voice/camb.py
diff --git a/examples/foundational/07-interruptible-cartesia-http.py b/examples/voice/cartesia-http.py
similarity index 100%
rename from examples/foundational/07-interruptible-cartesia-http.py
rename to examples/voice/cartesia-http.py
diff --git a/examples/foundational/06-listen-and-respond.py b/examples/voice/cartesia.py
similarity index 69%
rename from examples/foundational/06-listen-and-respond.py
rename to examples/voice/cartesia.py
index ec382681d..0489663e7 100644
--- a/examples/foundational/06-listen-and-respond.py
+++ b/examples/voice/cartesia.py
@@ -10,13 +10,7 @@ from dotenv import load_dotenv
from loguru import logger
from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import Frame, LLMRunFrame, MetricsFrame
-from pipecat.metrics.metrics import (
- LLMUsageMetricsData,
- ProcessingMetricsData,
- TTFBMetricsData,
- TTSUsageMetricsData,
-)
+from pipecat.frames.frames import LLMRunFrame
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineParams, PipelineTask
@@ -25,11 +19,10 @@ from pipecat.processors.aggregators.llm_response_universal import (
LLMContextAggregatorPair,
LLMUserAggregatorParams,
)
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
from pipecat.runner.types import RunnerArguments
from pipecat.runner.utils import create_transport
+from pipecat.services.cartesia.stt import CartesiaSTTService
from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
from pipecat.services.openai.llm import OpenAILLMService
from pipecat.transports.base_transport import BaseTransport, TransportParams
from pipecat.transports.daily.transport import DailyParams
@@ -37,27 +30,6 @@ from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams
load_dotenv(override=True)
-
-class MetricsLogger(FrameProcessor):
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, MetricsFrame):
- for d in frame.data:
- if isinstance(d, TTFBMetricsData):
- print(f"!!! MetricsFrame: {frame}, ttfb: {d.value}")
- elif isinstance(d, ProcessingMetricsData):
- print(f"!!! MetricsFrame: {frame}, processing: {d.value}")
- elif isinstance(d, LLMUsageMetricsData):
- tokens = d.value
- print(
- f"!!! MetricsFrame: {frame}, tokens: {tokens.prompt_tokens}, characters: {tokens.completion_tokens}"
- )
- elif isinstance(d, TTSUsageMetricsData):
- print(f"!!! MetricsFrame: {frame}, characters: {d.value}")
- await self.push_frame(frame, direction)
-
-
# We use lambdas to defer transport parameter creation until the transport
# type is selected at runtime.
transport_params = {
@@ -79,7 +51,7 @@ transport_params = {
async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
logger.info(f"Starting bot")
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
+ stt = CartesiaSTTService(api_key=os.getenv("CARTESIA_API_KEY"))
tts = CartesiaTTSService(
api_key=os.getenv("CARTESIA_API_KEY"),
@@ -95,8 +67,6 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
),
)
- ml = MetricsLogger()
-
context = LLMContext()
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
context,
@@ -105,14 +75,13 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
pipeline = Pipeline(
[
- transport.input(),
+ transport.input(), # Transport user input
stt,
- user_aggregator,
- llm,
- tts,
- ml,
- transport.output(),
- assistant_aggregator,
+ user_aggregator, # User responses
+ llm, # LLM
+ tts, # TTS
+ transport.output(), # Transport bot output
+ assistant_aggregator, # Assistant spoken responses
]
)
@@ -140,6 +109,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
await task.cancel()
runner = PipelineRunner(handle_sigint=runner_args.handle_sigint)
+
await runner.run(task)
diff --git a/examples/foundational/07c-interruptible-deepgram-flux-sagemaker.py b/examples/voice/deepgram-flux-sagemaker.py
similarity index 100%
rename from examples/foundational/07c-interruptible-deepgram-flux-sagemaker.py
rename to examples/voice/deepgram-flux-sagemaker.py
diff --git a/examples/foundational/07c-interruptible-deepgram-flux.py b/examples/voice/deepgram-flux.py
similarity index 100%
rename from examples/foundational/07c-interruptible-deepgram-flux.py
rename to examples/voice/deepgram-flux.py
diff --git a/examples/foundational/07c-interruptible-deepgram-http.py b/examples/voice/deepgram-http.py
similarity index 100%
rename from examples/foundational/07c-interruptible-deepgram-http.py
rename to examples/voice/deepgram-http.py
diff --git a/examples/foundational/07c-interruptible-deepgram-sagemaker.py b/examples/voice/deepgram-sagemaker.py
similarity index 100%
rename from examples/foundational/07c-interruptible-deepgram-sagemaker.py
rename to examples/voice/deepgram-sagemaker.py
diff --git a/examples/foundational/07c-interruptible-deepgram-vad.py b/examples/voice/deepgram-vad.py
similarity index 100%
rename from examples/foundational/07c-interruptible-deepgram-vad.py
rename to examples/voice/deepgram-vad.py
diff --git a/examples/foundational/07c-interruptible-deepgram.py b/examples/voice/deepgram.py
similarity index 100%
rename from examples/foundational/07c-interruptible-deepgram.py
rename to examples/voice/deepgram.py
diff --git a/examples/foundational/07d-interruptible-elevenlabs-http.py b/examples/voice/elevenlabs-http.py
similarity index 100%
rename from examples/foundational/07d-interruptible-elevenlabs-http.py
rename to examples/voice/elevenlabs-http.py
diff --git a/examples/foundational/07d-interruptible-elevenlabs.py b/examples/voice/elevenlabs.py
similarity index 100%
rename from examples/foundational/07d-interruptible-elevenlabs.py
rename to examples/voice/elevenlabs.py
diff --git a/examples/foundational/07w-interruptible-fal.py b/examples/voice/fal.py
similarity index 100%
rename from examples/foundational/07w-interruptible-fal.py
rename to examples/voice/fal.py
diff --git a/examples/foundational/07t-interruptible-fish.py b/examples/voice/fish.py
similarity index 100%
rename from examples/foundational/07t-interruptible-fish.py
rename to examples/voice/fish.py
diff --git a/examples/foundational/07j-interruptible-gladia-vad.py b/examples/voice/gladia-vad.py
similarity index 100%
rename from examples/foundational/07j-interruptible-gladia-vad.py
rename to examples/voice/gladia-vad.py
diff --git a/examples/foundational/07j-interruptible-gladia.py b/examples/voice/gladia.py
similarity index 100%
rename from examples/foundational/07j-interruptible-gladia.py
rename to examples/voice/gladia.py
diff --git a/examples/foundational/07s-interruptible-google-audio-in.py b/examples/voice/google-audio-in.py
similarity index 100%
rename from examples/foundational/07s-interruptible-google-audio-in.py
rename to examples/voice/google-audio-in.py
diff --git a/examples/foundational/07n-interruptible-gemini.py b/examples/voice/google-gemini-tts.py
similarity index 100%
rename from examples/foundational/07n-interruptible-gemini.py
rename to examples/voice/google-gemini-tts.py
diff --git a/examples/foundational/07n-interruptible-google-http.py b/examples/voice/google-http.py
similarity index 100%
rename from examples/foundational/07n-interruptible-google-http.py
rename to examples/voice/google-http.py
diff --git a/examples/foundational/07n-interruptible-gemini-image.py b/examples/voice/google-image.py
similarity index 98%
rename from examples/foundational/07n-interruptible-gemini-image.py
rename to examples/voice/google-image.py
index cb20178c5..80f115390 100644
--- a/examples/foundational/07n-interruptible-gemini-image.py
+++ b/examples/voice/google-image.py
@@ -13,9 +13,6 @@ Features showcased:
- Gemini LLM for conversation and image generation
- Google TTS and STT
-Run with:
- python examples/foundational/07n-interruptible-gemini-image.py
-
Make sure to set your environment variables:
export GOOGLE_API_KEY=your_api_key_here
"""
diff --git a/examples/foundational/07n-interruptible-google.py b/examples/voice/google.py
similarity index 100%
rename from examples/foundational/07n-interruptible-google.py
rename to examples/voice/google.py
diff --git a/examples/foundational/07zf-interruptible-gradium.py b/examples/voice/gradium.py
similarity index 100%
rename from examples/foundational/07zf-interruptible-gradium.py
rename to examples/voice/gradium.py
diff --git a/examples/foundational/07l-interruptible-groq.py b/examples/voice/groq.py
similarity index 100%
rename from examples/foundational/07l-interruptible-groq.py
rename to examples/voice/groq.py
diff --git a/examples/foundational/07ze-interruptible-hume.py b/examples/voice/hume.py
similarity index 100%
rename from examples/foundational/07ze-interruptible-hume.py
rename to examples/voice/hume.py
diff --git a/examples/foundational/07zb-interruptible-inworld-http.py b/examples/voice/inworld-http.py
similarity index 100%
rename from examples/foundational/07zb-interruptible-inworld-http.py
rename to examples/voice/inworld-http.py
diff --git a/examples/foundational/07zb-interruptible-inworld.py b/examples/voice/inworld.py
similarity index 100%
rename from examples/foundational/07zb-interruptible-inworld.py
rename to examples/voice/inworld.py
diff --git a/examples/foundational/07zj-interruptible-kokoro.py b/examples/voice/kokoro.py
similarity index 100%
rename from examples/foundational/07zj-interruptible-kokoro.py
rename to examples/voice/kokoro.py
diff --git a/examples/foundational/07p-interruptible-krisp-viva.py b/examples/voice/krisp-viva.py
similarity index 100%
rename from examples/foundational/07p-interruptible-krisp-viva.py
rename to examples/voice/krisp-viva.py
diff --git a/examples/foundational/07b-interruptible-langchain.py b/examples/voice/langchain.py
similarity index 100%
rename from examples/foundational/07b-interruptible-langchain.py
rename to examples/voice/langchain.py
diff --git a/examples/foundational/07k-interruptible-lmnt.py b/examples/voice/lmnt.py
similarity index 100%
rename from examples/foundational/07k-interruptible-lmnt.py
rename to examples/voice/lmnt.py
diff --git a/examples/foundational/07y-interruptible-minimax.py b/examples/voice/minimax.py
similarity index 100%
rename from examples/foundational/07y-interruptible-minimax.py
rename to examples/voice/minimax.py
diff --git a/examples/foundational/07v-interruptible-neuphonic-http.py b/examples/voice/neuphonic-http.py
similarity index 100%
rename from examples/foundational/07v-interruptible-neuphonic-http.py
rename to examples/voice/neuphonic-http.py
diff --git a/examples/foundational/07v-interruptible-neuphonic.py b/examples/voice/neuphonic.py
similarity index 100%
rename from examples/foundational/07v-interruptible-neuphonic.py
rename to examples/voice/neuphonic.py
diff --git a/examples/foundational/07r-interruptible-nvidia.py b/examples/voice/nvidia.py
similarity index 100%
rename from examples/foundational/07r-interruptible-nvidia.py
rename to examples/voice/nvidia.py
diff --git a/examples/foundational/07g-interruptible-openai-http.py b/examples/voice/openai-http.py
similarity index 100%
rename from examples/foundational/07g-interruptible-openai-http.py
rename to examples/voice/openai-http.py
diff --git a/examples/foundational/07-interruptible-openai-responses-http.py b/examples/voice/openai-responses-http.py
similarity index 100%
rename from examples/foundational/07-interruptible-openai-responses-http.py
rename to examples/voice/openai-responses-http.py
diff --git a/examples/foundational/07-interruptible-openai-responses.py b/examples/voice/openai-responses.py
similarity index 100%
rename from examples/foundational/07-interruptible-openai-responses.py
rename to examples/voice/openai-responses.py
diff --git a/examples/foundational/07g-interruptible-openai.py b/examples/voice/openai.py
similarity index 100%
rename from examples/foundational/07g-interruptible-openai.py
rename to examples/voice/openai.py
diff --git a/examples/foundational/07zi-interruptible-piper.py b/examples/voice/piper.py
similarity index 100%
rename from examples/foundational/07zi-interruptible-piper.py
rename to examples/voice/piper.py
diff --git a/examples/foundational/07zk-interruptible-resemble.py b/examples/voice/resemble.py
similarity index 100%
rename from examples/foundational/07zk-interruptible-resemble.py
rename to examples/voice/resemble.py
diff --git a/examples/foundational/07q-interruptible-rime-http.py b/examples/voice/rime-http.py
similarity index 100%
rename from examples/foundational/07q-interruptible-rime-http.py
rename to examples/voice/rime-http.py
diff --git a/examples/foundational/07q-interruptible-rime.py b/examples/voice/rime.py
similarity index 100%
rename from examples/foundational/07q-interruptible-rime.py
rename to examples/voice/rime.py
diff --git a/examples/foundational/07z-interruptible-sarvam-http.py b/examples/voice/sarvam-http.py
similarity index 100%
rename from examples/foundational/07z-interruptible-sarvam-http.py
rename to examples/voice/sarvam-http.py
diff --git a/examples/foundational/07z-interruptible-sarvam.py b/examples/voice/sarvam.py
similarity index 100%
rename from examples/foundational/07z-interruptible-sarvam.py
rename to examples/voice/sarvam.py
diff --git a/examples/foundational/07zl-interruptible-smallest.py b/examples/voice/smallest.py
similarity index 100%
rename from examples/foundational/07zl-interruptible-smallest.py
rename to examples/voice/smallest.py
diff --git a/examples/foundational/07za-interruptible-soniox.py b/examples/voice/soniox.py
similarity index 100%
rename from examples/foundational/07za-interruptible-soniox.py
rename to examples/voice/soniox.py
diff --git a/examples/foundational/07a-interruptible-speechmatics-vad.py b/examples/voice/speechmatics-vad.py
similarity index 100%
rename from examples/foundational/07a-interruptible-speechmatics-vad.py
rename to examples/voice/speechmatics-vad.py
diff --git a/examples/foundational/07a-interruptible-speechmatics.py b/examples/voice/speechmatics.py
similarity index 100%
rename from examples/foundational/07a-interruptible-speechmatics.py
rename to examples/voice/speechmatics.py
diff --git a/examples/foundational/07e-interruptible-xai.py b/examples/voice/xai.py
similarity index 100%
rename from examples/foundational/07e-interruptible-xai.py
rename to examples/voice/xai.py
diff --git a/examples/foundational/07i-interruptible-xtts.py b/examples/voice/xtts.py
similarity index 100%
rename from examples/foundational/07i-interruptible-xtts.py
rename to examples/voice/xtts.py
diff --git a/scripts/evals/run-release-evals.py b/scripts/evals/run-release-evals.py
index ea59988ac..be3bd1295 100644
--- a/scripts/evals/run-release-evals.py
+++ b/scripts/evals/run-release-evals.py
@@ -22,7 +22,7 @@ SCRIPT_DIR = Path(__file__).resolve().parent
ASSETS_DIR = SCRIPT_DIR / "assets"
-FOUNDATIONAL_DIR = SCRIPT_DIR.parent.parent / "examples" / "foundational"
+FOUNDATIONAL_DIR = SCRIPT_DIR.parent.parent / "examples"
EVAL_SIMPLE_MATH = EvalConfig(
prompt="A simple math addition.",
@@ -96,214 +96,175 @@ EVAL_COMPLETE_TURN = EvalConfig(
)
-TESTS_07 = [
- # 07 series
- ("07-interruptible.py", EVAL_SIMPLE_MATH),
- ("07-interruptible-cartesia-http.py", EVAL_SIMPLE_MATH),
- ("07a-interruptible-speechmatics.py", EVAL_SIMPLE_MATH),
- ("07a-interruptible-speechmatics-vad.py", EVAL_SIMPLE_MATH),
- ("07b-interruptible-langchain.py", EVAL_SIMPLE_MATH),
- ("07c-interruptible-deepgram.py", EVAL_SIMPLE_MATH),
- ("07c-interruptible-deepgram-flux.py", EVAL_SIMPLE_MATH),
- ("07c-interruptible-deepgram-http.py", EVAL_SIMPLE_MATH),
- ("07d-interruptible-elevenlabs.py", EVAL_SIMPLE_MATH),
- ("07d-interruptible-elevenlabs-http.py", EVAL_SIMPLE_MATH),
- ("07e-interruptible-xai.py", EVAL_SIMPLE_MATH),
- ("07f-interruptible-azure.py", EVAL_SIMPLE_MATH),
- ("07f-interruptible-azure-http.py", EVAL_SIMPLE_MATH),
- ("07g-interruptible-openai.py", EVAL_SIMPLE_MATH),
- ("07g-interruptible-openai-http.py", EVAL_SIMPLE_MATH),
- ("07j-interruptible-gladia.py", EVAL_SIMPLE_MATH),
- ("07j-interruptible-gladia-vad.py", EVAL_SIMPLE_MATH),
- ("07k-interruptible-lmnt.py", EVAL_SIMPLE_MATH),
- ("07l-interruptible-groq.py", EVAL_SIMPLE_MATH),
- ("07m-interruptible-aws.py", EVAL_SIMPLE_MATH),
- ("07m-interruptible-aws-strands.py", EVAL_WEATHER),
- ("07n-interruptible-gemini.py", EVAL_SIMPLE_MATH),
- ("07n-interruptible-google.py", EVAL_SIMPLE_MATH),
- ("07n-interruptible-google-http.py", EVAL_SIMPLE_MATH),
- ("07o-interruptible-assemblyai.py", EVAL_SIMPLE_MATH),
- ("07p-interruptible-krisp-viva.py", EVAL_SIMPLE_MATH),
- ("07q-interruptible-rime.py", EVAL_SIMPLE_MATH),
- ("07q-interruptible-rime-http.py", EVAL_SIMPLE_MATH),
- ("07r-interruptible-nvidia.py", EVAL_SIMPLE_MATH),
- ("07s-interruptible-google-audio-in.py", EVAL_SIMPLE_MATH),
- ("07t-interruptible-fish.py", EVAL_SIMPLE_MATH),
- ("07v-interruptible-neuphonic.py", EVAL_SIMPLE_MATH),
- ("07v-interruptible-neuphonic-http.py", EVAL_SIMPLE_MATH),
- ("07w-interruptible-fal.py", EVAL_SIMPLE_MATH),
- ("07y-interruptible-minimax.py", EVAL_SIMPLE_MATH),
- ("07z-interruptible-sarvam.py", EVAL_SIMPLE_MATH),
- ("07z-interruptible-sarvam-http.py", EVAL_SIMPLE_MATH),
- ("07za-interruptible-soniox.py", EVAL_SIMPLE_MATH),
- ("07zb-interruptible-inworld.py", EVAL_SIMPLE_MATH),
- ("07zb-interruptible-inworld-http.py", EVAL_SIMPLE_MATH),
- ("07zc-interruptible-asyncai.py", EVAL_SIMPLE_MATH),
- ("07zc-interruptible-asyncai-http.py", EVAL_SIMPLE_MATH),
- ("07zd-interruptible-aicoustics.py", EVAL_SIMPLE_MATH),
- ("07ze-interruptible-hume.py", EVAL_SIMPLE_MATH),
- ("07zf-interruptible-gradium.py", EVAL_SIMPLE_MATH),
- ("07zg-interruptible-camb.py", EVAL_SIMPLE_MATH),
- ("07zi-interruptible-piper.py", EVAL_SIMPLE_MATH),
- ("07zj-interruptible-kokoro.py", EVAL_SIMPLE_MATH),
- ("07zk-interruptible-resembleai.py", EVAL_SIMPLE_MATH),
- ("07zl-interruptible-smallest.py", EVAL_SIMPLE_MATH),
- ("07-interruptible-openai-responses.py", EVAL_SIMPLE_MATH),
- ("07-interruptible-openai-responses-http.py", EVAL_SIMPLE_MATH),
+TESTS_VOICE = [
+ ("voice/cartesia.py", EVAL_SIMPLE_MATH),
+ ("voice/cartesia-http.py", EVAL_SIMPLE_MATH),
+ ("voice/speechmatics.py", EVAL_SIMPLE_MATH),
+ ("voice/speechmatics-vad.py", EVAL_SIMPLE_MATH),
+ ("voice/langchain.py", EVAL_SIMPLE_MATH),
+ ("voice/deepgram.py", EVAL_SIMPLE_MATH),
+ ("voice/deepgram-flux.py", EVAL_SIMPLE_MATH),
+ ("voice/deepgram-http.py", EVAL_SIMPLE_MATH),
+ ("voice/elevenlabs.py", EVAL_SIMPLE_MATH),
+ ("voice/elevenlabs-http.py", EVAL_SIMPLE_MATH),
+ ("voice/xai.py", EVAL_SIMPLE_MATH),
+ ("voice/azure.py", EVAL_SIMPLE_MATH),
+ ("voice/azure-http.py", EVAL_SIMPLE_MATH),
+ ("voice/openai.py", EVAL_SIMPLE_MATH),
+ ("voice/openai-http.py", EVAL_SIMPLE_MATH),
+ ("voice/gladia.py", EVAL_SIMPLE_MATH),
+ ("voice/gladia-vad.py", EVAL_SIMPLE_MATH),
+ ("voice/lmnt.py", EVAL_SIMPLE_MATH),
+ ("voice/groq.py", EVAL_SIMPLE_MATH),
+ ("voice/aws.py", EVAL_SIMPLE_MATH),
+ ("voice/aws-strands.py", EVAL_WEATHER),
+ ("voice/google-gemini-tts.py", EVAL_SIMPLE_MATH),
+ ("voice/google.py", EVAL_SIMPLE_MATH),
+ ("voice/google-http.py", EVAL_SIMPLE_MATH),
+ ("voice/assemblyai.py", EVAL_SIMPLE_MATH),
+ ("voice/krisp-viva.py", EVAL_SIMPLE_MATH),
+ ("voice/rime.py", EVAL_SIMPLE_MATH),
+ ("voice/rime-http.py", EVAL_SIMPLE_MATH),
+ ("voice/nvidia.py", EVAL_SIMPLE_MATH),
+ ("voice/google-audio-in.py", EVAL_SIMPLE_MATH),
+ ("voice/fish.py", EVAL_SIMPLE_MATH),
+ ("voice/neuphonic.py", EVAL_SIMPLE_MATH),
+ ("voice/neuphonic-http.py", EVAL_SIMPLE_MATH),
+ ("voice/fal.py", EVAL_SIMPLE_MATH),
+ ("voice/minimax.py", EVAL_SIMPLE_MATH),
+ ("voice/sarvam.py", EVAL_SIMPLE_MATH),
+ ("voice/sarvam-http.py", EVAL_SIMPLE_MATH),
+ ("voice/soniox.py", EVAL_SIMPLE_MATH),
+ ("voice/inworld.py", EVAL_SIMPLE_MATH),
+ ("voice/inworld-http.py", EVAL_SIMPLE_MATH),
+ ("voice/asyncai.py", EVAL_SIMPLE_MATH),
+ ("voice/asyncai-http.py", EVAL_SIMPLE_MATH),
+ ("voice/aicoustics.py", EVAL_SIMPLE_MATH),
+ ("voice/hume.py", EVAL_SIMPLE_MATH),
+ ("voice/gradium.py", EVAL_SIMPLE_MATH),
+ ("voice/camb.py", EVAL_SIMPLE_MATH),
+ ("voice/piper.py", EVAL_SIMPLE_MATH),
+ ("voice/kokoro.py", EVAL_SIMPLE_MATH),
+ ("voice/resemble.py", EVAL_SIMPLE_MATH),
+ ("voice/smallest.py", EVAL_SIMPLE_MATH),
+ ("voice/openai-responses.py", EVAL_SIMPLE_MATH),
+ ("voice/openai-responses-http.py", EVAL_SIMPLE_MATH),
# Needs a local XTTS docker instance running.
- # ("07i-interruptible-xtts.py", EVAL_SIMPLE_MATH),
+ # ("voice/xtts.py", EVAL_SIMPLE_MATH),
]
-TESTS_12 = [
- ("12-describe-image-openai.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
- ("12-describe-image-openai-responses.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
- ("12-describe-image-openai-responses-http.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
- ("12a-describe-image-anthropic.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
- ("12b-describe-image-aws.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
- ("12c-describe-image-gemini-flash.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
- ("12d-describe-image-moondream.py", EVAL_VISION_IMAGE()),
+TESTS_VISION = [
+ ("vision/openai.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
+ ("vision/openai-responses.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
+ ("vision/openai-responses-http.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
+ ("vision/anthropic.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
+ ("vision/aws.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
+ ("vision/gemini-flash.py", EVAL_VISION_IMAGE(eval_speaks_first=True)),
+ ("vision/moondream.py", EVAL_VISION_IMAGE()),
]
# For a few major services, we also test parallel function calling.
# (We don't bother doing this with every single service, as it's expensive and
# most rely on the same OpenAI-compatible implementation.)
-TESTS_14 = [
- ("14-function-calling.py", EVAL_WEATHER),
- ("14-function-calling.py", EVAL_WEATHER_AND_RESTAURANT),
- ("14-function-calling-openai-responses.py", EVAL_WEATHER),
- ("14-function-calling-openai-responses.py", EVAL_WEATHER_AND_RESTAURANT),
- ("14-function-calling-openai-responses-http.py", EVAL_WEATHER),
- ("14-function-calling-openai-responses-http.py", EVAL_WEATHER_AND_RESTAURANT),
- ("14a-function-calling-anthropic.py", EVAL_WEATHER),
- ("14a-function-calling-anthropic.py", EVAL_WEATHER_AND_RESTAURANT),
- ("14b-function-calling-openai.py", EVAL_WEATHER),
- ("14e-function-calling-google.py", EVAL_WEATHER),
- ("14e-function-calling-google.py", EVAL_WEATHER_AND_RESTAURANT),
- ("14f-function-calling-groq.py", EVAL_WEATHER),
- ("14g-function-calling-grok.py", EVAL_WEATHER),
- ("14h-function-calling-azure.py", EVAL_WEATHER),
- ("14i-function-calling-fireworks.py", EVAL_WEATHER),
- ("14j-function-calling-nvidia.py", EVAL_WEATHER),
- ("14k-function-calling-cerebras.py", EVAL_WEATHER),
- ("14m-function-calling-openrouter.py", EVAL_WEATHER),
- ("14n-function-calling-perplexity.py", EVAL_WEATHER),
- ("14p-function-calling-gemini-vertex-ai.py", EVAL_WEATHER),
- ("14q-function-calling-qwen.py", EVAL_WEATHER),
- ("14r-function-calling-aws.py", EVAL_WEATHER),
- ("14s-function-calling-sambanova.py", EVAL_WEATHER),
- ("14r-function-calling-aws.py", EVAL_WEATHER_AND_RESTAURANT),
- ("14v-function-calling-nebius.py", EVAL_WEATHER),
- ("14w-function-calling-mistral.py", EVAL_WEATHER),
- ("14y-function-calling-sarvam.py", EVAL_WEATHER),
- ("14z-function-calling-novita.py", EVAL_WEATHER),
+TESTS_FUNCTION_CALLING = [
+ ("getting-started/07-function-calling.py", EVAL_WEATHER),
+ ("getting-started/07-function-calling.py", EVAL_WEATHER_AND_RESTAURANT),
+ ("function-calling/openai-responses.py", EVAL_WEATHER),
+ ("function-calling/openai-responses.py", EVAL_WEATHER_AND_RESTAURANT),
+ ("function-calling/openai-responses-http.py", EVAL_WEATHER),
+ ("function-calling/openai-responses-http.py", EVAL_WEATHER_AND_RESTAURANT),
+ ("function-calling/anthropic.py", EVAL_WEATHER),
+ ("function-calling/anthropic.py", EVAL_WEATHER_AND_RESTAURANT),
+ ("function-calling/openai.py", EVAL_WEATHER),
+ ("function-calling/google.py", EVAL_WEATHER),
+ ("function-calling/google.py", EVAL_WEATHER_AND_RESTAURANT),
+ ("function-calling/groq.py", EVAL_WEATHER),
+ ("function-calling/grok.py", EVAL_WEATHER),
+ ("function-calling/azure.py", EVAL_WEATHER),
+ ("function-calling/fireworks.py", EVAL_WEATHER),
+ ("function-calling/nvidia.py", EVAL_WEATHER),
+ ("function-calling/cerebras.py", EVAL_WEATHER),
+ ("function-calling/openrouter.py", EVAL_WEATHER),
+ ("function-calling/perplexity.py", EVAL_WEATHER),
+ ("function-calling/google-vertex.py", EVAL_WEATHER),
+ ("function-calling/qwen.py", EVAL_WEATHER),
+ ("function-calling/aws.py", EVAL_WEATHER),
+ ("function-calling/sambanova.py", EVAL_WEATHER),
+ ("function-calling/aws.py", EVAL_WEATHER_AND_RESTAURANT),
+ ("function-calling/nebius.py", EVAL_WEATHER),
+ ("function-calling/mistral.py", EVAL_WEATHER),
+ ("function-calling/sarvam.py", EVAL_WEATHER),
+ ("function-calling/novita.py", EVAL_WEATHER),
# Video
- ("14d-function-calling-anthropic-video.py", EVAL_VISION_CAMERA),
- ("14d-function-calling-aws-video.py", EVAL_VISION_CAMERA),
- ("14d-function-calling-gemini-flash-video.py", EVAL_VISION_CAMERA),
- ("14d-function-calling-moondream-video.py", EVAL_VISION_CAMERA),
- ("14d-function-calling-openai-video.py", EVAL_VISION_CAMERA),
- ("14d-function-calling-openai-responses-video.py", EVAL_VISION_CAMERA),
- ("14d-function-calling-openai-responses-video-http.py", EVAL_VISION_CAMERA),
+ ("function-calling/anthropic-video.py", EVAL_VISION_CAMERA),
+ ("function-calling/aws-video.py", EVAL_VISION_CAMERA),
+ ("function-calling/google-video.py", EVAL_VISION_CAMERA),
+ ("function-calling/moondream-video.py", EVAL_VISION_CAMERA),
+ ("function-calling/openai-video.py", EVAL_VISION_CAMERA),
+ ("function-calling/openai-responses-video.py", EVAL_VISION_CAMERA),
+ ("function-calling/openai-responses-video-http.py", EVAL_VISION_CAMERA),
# Currently not working.
- # ("14c-function-calling-together.py", EVAL_WEATHER),
- # ("14l-function-calling-deepseek.py", EVAL_WEATHER),
- # ("14o-function-calling-gemini-openai-format.py", EVAL_WEATHER),
+ # ("function-calling/together.py", EVAL_WEATHER),
+ # ("function-calling/deepseek.py", EVAL_WEATHER),
+ # ("function-calling/gemini-openai-format.py", EVAL_WEATHER),
]
-TESTS_15 = [
- ("15a-switch-languages.py", EVAL_SWITCH_LANGUAGE),
+TESTS_FEATURES = [
+ ("features/switch-languages.py", EVAL_SWITCH_LANGUAGE),
+ ("features/voicemail-detection.py", EVAL_VOICEMAIL),
+ ("features/voicemail-detection.py", EVAL_CONVERSATION),
+ ("features/concurrent-llm-evaluation.py", EVAL_SIMPLE_MATH),
]
-TESTS_19 = [
- ("19-openai-realtime.py", EVAL_WEATHER),
- ("19-openai-realtime-beta.py", EVAL_WEATHER),
+TESTS_REALTIME = [
+ ("realtime/openai.py", EVAL_WEATHER),
+ ("realtime/openai-beta.py", EVAL_WEATHER),
# OpenAI Realtime not released on Azure yet
- # ("19a-azure-realtime.py", EVAL_WEATHER),
- ("19a-azure-realtime-beta.py", EVAL_WEATHER),
- ("19b-openai-realtime-text.py", EVAL_WEATHER),
- ("19b-openai-realtime-beta-text.py", EVAL_WEATHER),
- ("19c-openai-realtime-live-video.py", EVAL_VISION_CAMERA),
-]
-
-TESTS_21 = [
- ("21a-tavus-video-service.py", EVAL_SIMPLE_MATH),
-]
-
-TESTS_22 = [
- ("22-filter-incomplete-turns.py", EVAL_COMPLETE_TURN),
-]
-
-TESTS_26 = [
- ("26-gemini-live.py", EVAL_SIMPLE_MATH),
- ("26a-gemini-live-local-vad.py", EVAL_SIMPLE_MATH),
- ("26b-gemini-live-function-calling.py", EVAL_WEATHER),
- ("26c-gemini-live-video.py", EVAL_VISION_CAMERA),
- ("26e-gemini-live-google-search.py", EVAL_ONLINE_SEARCH),
- ("26h-gemini-live-vertex-function-calling.py", EVAL_WEATHER),
+ # ("realtime/azure.py", EVAL_WEATHER),
+ ("realtime/azure-beta.py", EVAL_WEATHER),
+ ("realtime/openai-text.py", EVAL_WEATHER),
+ ("realtime/openai-beta-text.py", EVAL_WEATHER),
+ ("realtime/openai-live-video.py", EVAL_VISION_CAMERA),
+ ("realtime/gemini-live.py", EVAL_SIMPLE_MATH),
+ ("realtime/gemini-live-local-vad.py", EVAL_SIMPLE_MATH),
+ ("realtime/gemini-live-function-calling.py", EVAL_WEATHER),
+ ("realtime/gemini-live-video.py", EVAL_VISION_CAMERA),
+ ("realtime/gemini-live-google-search.py", EVAL_ONLINE_SEARCH),
+ ("realtime/gemini-live-vertex-function-calling.py", EVAL_WEATHER),
# Currently not working.
- # ("26d-gemini-live-text.py", EVAL_SIMPLE_MATH),
+ # ("realtime/gemini-live-text.py", EVAL_SIMPLE_MATH),
+ ("realtime/aws-nova-sonic.py", EVAL_SIMPLE_MATH),
+ ("realtime/ultravox.py", EVAL_ORDER),
+ ("realtime/grok.py", EVAL_WEATHER),
]
-TESTS_27 = [
- ("27-simli-layer.py", EVAL_SIMPLE_MATH),
+TESTS_VIDEO_AVATAR = [
+ ("video-avatar/tavus-video-service.py", EVAL_SIMPLE_MATH),
+ ("video-avatar/heygen-video-service.py", EVAL_SIMPLE_MATH),
+ ("video-avatar/simli-layer.py", EVAL_SIMPLE_MATH),
+ ("video-avatar/lemonslice-transport.py", EVAL_SIMPLE_MATH),
]
-TESTS_40 = [
- ("40-aws-nova-sonic.py", EVAL_SIMPLE_MATH),
+TESTS_TURN_MANAGEMENT = [
+ ("turn-management/filter-incomplete-turns.py", EVAL_COMPLETE_TURN),
]
-TESTS_43 = [
- ("43a-heygen-video-service.py", EVAL_SIMPLE_MATH),
-]
-
-TESTS_44 = [
- ("44-voicemail-detection.py", EVAL_VOICEMAIL),
- ("44-voicemail-detection.py", EVAL_CONVERSATION),
-]
-
-TESTS_49 = [
- ("49a-thinking-anthropic.py", EVAL_SIMPLE_MATH),
- ("49b-thinking-google.py", EVAL_SIMPLE_MATH),
- ("49c-thinking-functions-anthropic.py", EVAL_FLIGHT_STATUS),
- ("49d-thinking-functions-google.py", EVAL_FLIGHT_STATUS),
-]
-
-
-TESTS_50 = [
- ("50-ultravox-realtime.py", EVAL_ORDER),
-]
-
-
-TESTS_51 = [
- ("51-grok-realtime.py", EVAL_WEATHER),
-]
-
-TESTS_53 = [
- ("53-concurrent-llm-evaluation.py", EVAL_SIMPLE_MATH),
-]
-
-TESTS_56 = [
- ("56-lemonslice-transport.py", EVAL_SIMPLE_MATH),
+TESTS_THINKING_AND_MCP = [
+ ("thinking-and-mcp/thinking-anthropic.py", EVAL_SIMPLE_MATH),
+ ("thinking-and-mcp/thinking-google.py", EVAL_SIMPLE_MATH),
+ ("thinking-and-mcp/thinking-functions-anthropic.py", EVAL_FLIGHT_STATUS),
+ ("thinking-and-mcp/thinking-functions-google.py", EVAL_FLIGHT_STATUS),
]
TESTS = [
- *TESTS_07,
- *TESTS_12,
- *TESTS_14,
- *TESTS_15,
- *TESTS_19,
- *TESTS_21,
- *TESTS_22,
- *TESTS_26,
- *TESTS_27,
- *TESTS_40,
- *TESTS_43,
- *TESTS_44,
- *TESTS_49,
- *TESTS_50,
- *TESTS_51,
- *TESTS_53,
- *TESTS_56,
+ *TESTS_VOICE,
+ *TESTS_VISION,
+ *TESTS_FUNCTION_CALLING,
+ *TESTS_FEATURES,
+ *TESTS_REALTIME,
+ *TESTS_VIDEO_AVATAR,
+ *TESTS_TURN_MANAGEMENT,
+ *TESTS_THINKING_AND_MCP,
]
diff --git a/src/pipecat/services/settings.py b/src/pipecat/services/settings.py
index a0bf3cd58..54465b041 100644
--- a/src/pipecat/services/settings.py
+++ b/src/pipecat/services/settings.py
@@ -365,7 +365,7 @@ class LLMSettings(ServiceSettings):
seed: Random seed for reproducibility.
filter_incomplete_user_turns: Enable LLM-based turn completion detection
to suppress bot responses when the user was cut off mid-thought.
- See ``examples/foundational/22-filter-incomplete-turns.py`` and
+ See ``examples/22-filter-incomplete-turns.py`` and
``UserTurnCompletionLLMServiceMixin``.
user_turn_completion_config: Configuration for turn completion behavior
when ``filter_incomplete_user_turns`` is enabled. Controls timeouts