diff --git a/examples/README.md b/examples/README.md index 08dc58de5..5ec86002e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -61,12 +61,13 @@ uv run getting-started/06-voice-agent.py -t twilio -x NGROK_HOST_NAME Progressive introduction to Pipecat, from minimal TTS to a full voice agent with function calling. -### [`services/`](./services/) +### [`voice/`](./voice/) -Service provider integration examples, organized into subfolders: +Full STT + LLM + TTS voice agent pipelines showcasing different speech service providers (Deepgram, ElevenLabs, Cartesia, etc.) -- **[`speech/`](./services/speech/)** — Full STT + LLM + TTS pipelines showcasing different speech service providers (Deepgram, ElevenLabs, Cartesia, etc.) -- **[`function-calling/`](./services/function-calling/)** — Function calling with different LLM providers (OpenAI, Anthropic, Google, etc.) +### [`function-calling/`](./function-calling/) + +Function calling with different LLM providers (OpenAI, Anthropic, Google, etc.) ### [`transcription/`](./transcription/) diff --git a/examples/services/function-calling/anthropic-video.py b/examples/function-calling/anthropic-video.py similarity index 100% rename from examples/services/function-calling/anthropic-video.py rename to examples/function-calling/anthropic-video.py diff --git a/examples/services/function-calling/anthropic.py b/examples/function-calling/anthropic.py similarity index 100% rename from examples/services/function-calling/anthropic.py rename to examples/function-calling/anthropic.py diff --git a/examples/services/function-calling/aws-video.py b/examples/function-calling/aws-video.py similarity index 100% rename from examples/services/function-calling/aws-video.py rename to examples/function-calling/aws-video.py diff --git a/examples/services/function-calling/aws.py b/examples/function-calling/aws.py similarity index 100% rename from examples/services/function-calling/aws.py rename to examples/function-calling/aws.py diff --git a/examples/services/function-calling/azure.py b/examples/function-calling/azure.py similarity index 100% rename from examples/services/function-calling/azure.py rename to examples/function-calling/azure.py diff --git a/examples/services/function-calling/cerebras.py b/examples/function-calling/cerebras.py similarity index 100% rename from examples/services/function-calling/cerebras.py rename to examples/function-calling/cerebras.py diff --git a/examples/services/function-calling/deepseek.py b/examples/function-calling/deepseek.py similarity index 100% rename from examples/services/function-calling/deepseek.py rename to examples/function-calling/deepseek.py diff --git a/examples/services/function-calling/direct.py b/examples/function-calling/direct.py similarity index 100% rename from examples/services/function-calling/direct.py rename to examples/function-calling/direct.py diff --git a/examples/services/function-calling/fireworks.py b/examples/function-calling/fireworks.py similarity index 100% rename from examples/services/function-calling/fireworks.py rename to examples/function-calling/fireworks.py diff --git a/examples/services/function-calling/gemini-openai-format.py b/examples/function-calling/gemini-openai-format.py similarity index 100% rename from examples/services/function-calling/gemini-openai-format.py rename to examples/function-calling/gemini-openai-format.py diff --git a/examples/services/function-calling/google-video.py b/examples/function-calling/google-video.py similarity index 100% rename from examples/services/function-calling/google-video.py rename to examples/function-calling/google-video.py diff --git a/examples/services/function-calling/google.py b/examples/function-calling/google.py similarity index 100% rename from examples/services/function-calling/google.py rename to examples/function-calling/google.py diff --git a/examples/services/function-calling/grok.py b/examples/function-calling/grok.py similarity index 100% rename from examples/services/function-calling/grok.py rename to examples/function-calling/grok.py diff --git a/examples/services/function-calling/groq.py b/examples/function-calling/groq.py similarity index 100% rename from examples/services/function-calling/groq.py rename to examples/function-calling/groq.py diff --git a/examples/services/function-calling/mistral.py b/examples/function-calling/mistral.py similarity index 100% rename from examples/services/function-calling/mistral.py rename to examples/function-calling/mistral.py diff --git a/examples/services/function-calling/moondream-video.py b/examples/function-calling/moondream-video.py similarity index 100% rename from examples/services/function-calling/moondream-video.py rename to examples/function-calling/moondream-video.py diff --git a/examples/services/function-calling/nebius.py b/examples/function-calling/nebius.py similarity index 100% rename from examples/services/function-calling/nebius.py rename to examples/function-calling/nebius.py diff --git a/examples/services/function-calling/novita.py b/examples/function-calling/novita.py similarity index 100% rename from examples/services/function-calling/novita.py rename to examples/function-calling/novita.py diff --git a/examples/services/function-calling/nvidia.py b/examples/function-calling/nvidia.py similarity index 100% rename from examples/services/function-calling/nvidia.py rename to examples/function-calling/nvidia.py diff --git a/examples/services/function-calling/ollama.py b/examples/function-calling/ollama.py similarity index 100% rename from examples/services/function-calling/ollama.py rename to examples/function-calling/ollama.py diff --git a/examples/services/function-calling/openai-responses-http.py b/examples/function-calling/openai-responses-http.py similarity index 100% rename from examples/services/function-calling/openai-responses-http.py rename to examples/function-calling/openai-responses-http.py diff --git a/examples/services/function-calling/openai-responses-video-http.py b/examples/function-calling/openai-responses-video-http.py similarity index 100% rename from examples/services/function-calling/openai-responses-video-http.py rename to examples/function-calling/openai-responses-video-http.py diff --git a/examples/services/function-calling/openai-responses-video.py b/examples/function-calling/openai-responses-video.py similarity index 100% rename from examples/services/function-calling/openai-responses-video.py rename to examples/function-calling/openai-responses-video.py diff --git a/examples/services/function-calling/openai-responses.py b/examples/function-calling/openai-responses.py similarity index 100% rename from examples/services/function-calling/openai-responses.py rename to examples/function-calling/openai-responses.py diff --git a/examples/services/function-calling/openai-video.py b/examples/function-calling/openai-video.py similarity index 100% rename from examples/services/function-calling/openai-video.py rename to examples/function-calling/openai-video.py diff --git a/examples/services/function-calling/openai.py b/examples/function-calling/openai.py similarity index 100% rename from examples/services/function-calling/openai.py rename to examples/function-calling/openai.py diff --git a/examples/services/function-calling/openrouter.py b/examples/function-calling/openrouter.py similarity index 100% rename from examples/services/function-calling/openrouter.py rename to examples/function-calling/openrouter.py diff --git a/examples/services/function-calling/perplexity.py b/examples/function-calling/perplexity.py similarity index 100% rename from examples/services/function-calling/perplexity.py rename to examples/function-calling/perplexity.py diff --git a/examples/services/function-calling/qwen.py b/examples/function-calling/qwen.py similarity index 100% rename from examples/services/function-calling/qwen.py rename to examples/function-calling/qwen.py diff --git a/examples/services/function-calling/sambanova.py b/examples/function-calling/sambanova.py similarity index 100% rename from examples/services/function-calling/sambanova.py rename to examples/function-calling/sambanova.py diff --git a/examples/services/function-calling/sarvam.py b/examples/function-calling/sarvam.py similarity index 100% rename from examples/services/function-calling/sarvam.py rename to examples/function-calling/sarvam.py diff --git a/examples/services/function-calling/together.py b/examples/function-calling/together.py similarity index 100% rename from examples/services/function-calling/together.py rename to examples/function-calling/together.py diff --git a/examples/services/function-calling/google-vertex-ai.py b/examples/services/function-calling/google-vertex-ai.py deleted file mode 100644 index 3bee2f1bb..000000000 --- a/examples/services/function-calling/google-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/services/speech/aicoustics.py b/examples/voice/aicoustics.py similarity index 100% rename from examples/services/speech/aicoustics.py rename to examples/voice/aicoustics.py diff --git a/examples/services/speech/assemblyai-turn-detection.py b/examples/voice/assemblyai-turn-detection.py similarity index 100% rename from examples/services/speech/assemblyai-turn-detection.py rename to examples/voice/assemblyai-turn-detection.py diff --git a/examples/services/speech/assemblyai.py b/examples/voice/assemblyai.py similarity index 100% rename from examples/services/speech/assemblyai.py rename to examples/voice/assemblyai.py diff --git a/examples/services/speech/asyncai-http.py b/examples/voice/asyncai-http.py similarity index 100% rename from examples/services/speech/asyncai-http.py rename to examples/voice/asyncai-http.py diff --git a/examples/services/speech/asyncai.py b/examples/voice/asyncai.py similarity index 100% rename from examples/services/speech/asyncai.py rename to examples/voice/asyncai.py diff --git a/examples/services/speech/aws-strands.py b/examples/voice/aws-strands.py similarity index 100% rename from examples/services/speech/aws-strands.py rename to examples/voice/aws-strands.py diff --git a/examples/services/speech/aws.py b/examples/voice/aws.py similarity index 100% rename from examples/services/speech/aws.py rename to examples/voice/aws.py diff --git a/examples/services/speech/azure-http.py b/examples/voice/azure-http.py similarity index 100% rename from examples/services/speech/azure-http.py rename to examples/voice/azure-http.py diff --git a/examples/services/speech/azure.py b/examples/voice/azure.py similarity index 100% rename from examples/services/speech/azure.py rename to examples/voice/azure.py diff --git a/examples/services/speech/camb.py b/examples/voice/camb.py similarity index 100% rename from examples/services/speech/camb.py rename to examples/voice/camb.py diff --git a/examples/services/speech/cartesia-http.py b/examples/voice/cartesia-http.py similarity index 100% rename from examples/services/speech/cartesia-http.py rename to examples/voice/cartesia-http.py diff --git a/examples/services/speech/cartesia.py b/examples/voice/cartesia.py similarity index 100% rename from examples/services/speech/cartesia.py rename to examples/voice/cartesia.py diff --git a/examples/services/speech/deepgram-flux-sagemaker.py b/examples/voice/deepgram-flux-sagemaker.py similarity index 100% rename from examples/services/speech/deepgram-flux-sagemaker.py rename to examples/voice/deepgram-flux-sagemaker.py diff --git a/examples/services/speech/deepgram-flux.py b/examples/voice/deepgram-flux.py similarity index 100% rename from examples/services/speech/deepgram-flux.py rename to examples/voice/deepgram-flux.py diff --git a/examples/services/speech/deepgram-http.py b/examples/voice/deepgram-http.py similarity index 100% rename from examples/services/speech/deepgram-http.py rename to examples/voice/deepgram-http.py diff --git a/examples/services/speech/deepgram-sagemaker.py b/examples/voice/deepgram-sagemaker.py similarity index 100% rename from examples/services/speech/deepgram-sagemaker.py rename to examples/voice/deepgram-sagemaker.py diff --git a/examples/services/speech/deepgram-vad.py b/examples/voice/deepgram-vad.py similarity index 100% rename from examples/services/speech/deepgram-vad.py rename to examples/voice/deepgram-vad.py diff --git a/examples/services/speech/deepgram.py b/examples/voice/deepgram.py similarity index 100% rename from examples/services/speech/deepgram.py rename to examples/voice/deepgram.py diff --git a/examples/services/speech/elevenlabs-http.py b/examples/voice/elevenlabs-http.py similarity index 100% rename from examples/services/speech/elevenlabs-http.py rename to examples/voice/elevenlabs-http.py diff --git a/examples/services/speech/elevenlabs.py b/examples/voice/elevenlabs.py similarity index 100% rename from examples/services/speech/elevenlabs.py rename to examples/voice/elevenlabs.py diff --git a/examples/services/speech/fal.py b/examples/voice/fal.py similarity index 100% rename from examples/services/speech/fal.py rename to examples/voice/fal.py diff --git a/examples/services/speech/fish.py b/examples/voice/fish.py similarity index 100% rename from examples/services/speech/fish.py rename to examples/voice/fish.py diff --git a/examples/services/speech/gladia-vad.py b/examples/voice/gladia-vad.py similarity index 100% rename from examples/services/speech/gladia-vad.py rename to examples/voice/gladia-vad.py diff --git a/examples/services/speech/gladia.py b/examples/voice/gladia.py similarity index 100% rename from examples/services/speech/gladia.py rename to examples/voice/gladia.py diff --git a/examples/services/speech/google-audio-in.py b/examples/voice/google-audio-in.py similarity index 100% rename from examples/services/speech/google-audio-in.py rename to examples/voice/google-audio-in.py diff --git a/examples/services/speech/google-gemini-tts.py b/examples/voice/google-gemini-tts.py similarity index 100% rename from examples/services/speech/google-gemini-tts.py rename to examples/voice/google-gemini-tts.py diff --git a/examples/services/speech/google-http.py b/examples/voice/google-http.py similarity index 100% rename from examples/services/speech/google-http.py rename to examples/voice/google-http.py diff --git a/examples/services/speech/google-image.py b/examples/voice/google-image.py similarity index 100% rename from examples/services/speech/google-image.py rename to examples/voice/google-image.py diff --git a/examples/services/speech/google.py b/examples/voice/google.py similarity index 100% rename from examples/services/speech/google.py rename to examples/voice/google.py diff --git a/examples/services/speech/gradium.py b/examples/voice/gradium.py similarity index 100% rename from examples/services/speech/gradium.py rename to examples/voice/gradium.py diff --git a/examples/services/speech/groq.py b/examples/voice/groq.py similarity index 100% rename from examples/services/speech/groq.py rename to examples/voice/groq.py diff --git a/examples/services/speech/hume.py b/examples/voice/hume.py similarity index 100% rename from examples/services/speech/hume.py rename to examples/voice/hume.py diff --git a/examples/services/speech/inworld-http.py b/examples/voice/inworld-http.py similarity index 100% rename from examples/services/speech/inworld-http.py rename to examples/voice/inworld-http.py diff --git a/examples/services/speech/inworld.py b/examples/voice/inworld.py similarity index 100% rename from examples/services/speech/inworld.py rename to examples/voice/inworld.py diff --git a/examples/services/speech/kokoro.py b/examples/voice/kokoro.py similarity index 100% rename from examples/services/speech/kokoro.py rename to examples/voice/kokoro.py diff --git a/examples/services/speech/krisp-viva.py b/examples/voice/krisp-viva.py similarity index 100% rename from examples/services/speech/krisp-viva.py rename to examples/voice/krisp-viva.py diff --git a/examples/services/speech/langchain.py b/examples/voice/langchain.py similarity index 100% rename from examples/services/speech/langchain.py rename to examples/voice/langchain.py diff --git a/examples/services/speech/lmnt.py b/examples/voice/lmnt.py similarity index 100% rename from examples/services/speech/lmnt.py rename to examples/voice/lmnt.py diff --git a/examples/services/speech/minimax.py b/examples/voice/minimax.py similarity index 100% rename from examples/services/speech/minimax.py rename to examples/voice/minimax.py diff --git a/examples/services/speech/neuphonic-http.py b/examples/voice/neuphonic-http.py similarity index 100% rename from examples/services/speech/neuphonic-http.py rename to examples/voice/neuphonic-http.py diff --git a/examples/services/speech/neuphonic.py b/examples/voice/neuphonic.py similarity index 100% rename from examples/services/speech/neuphonic.py rename to examples/voice/neuphonic.py diff --git a/examples/services/speech/nvidia.py b/examples/voice/nvidia.py similarity index 100% rename from examples/services/speech/nvidia.py rename to examples/voice/nvidia.py diff --git a/examples/services/speech/openai-http.py b/examples/voice/openai-http.py similarity index 100% rename from examples/services/speech/openai-http.py rename to examples/voice/openai-http.py diff --git a/examples/services/speech/openai-responses-http.py b/examples/voice/openai-responses-http.py similarity index 100% rename from examples/services/speech/openai-responses-http.py rename to examples/voice/openai-responses-http.py diff --git a/examples/services/speech/openai-responses.py b/examples/voice/openai-responses.py similarity index 100% rename from examples/services/speech/openai-responses.py rename to examples/voice/openai-responses.py diff --git a/examples/services/speech/openai.py b/examples/voice/openai.py similarity index 100% rename from examples/services/speech/openai.py rename to examples/voice/openai.py diff --git a/examples/services/speech/piper.py b/examples/voice/piper.py similarity index 100% rename from examples/services/speech/piper.py rename to examples/voice/piper.py diff --git a/examples/services/speech/resemble.py b/examples/voice/resemble.py similarity index 100% rename from examples/services/speech/resemble.py rename to examples/voice/resemble.py diff --git a/examples/services/speech/rime-http.py b/examples/voice/rime-http.py similarity index 100% rename from examples/services/speech/rime-http.py rename to examples/voice/rime-http.py diff --git a/examples/services/speech/rime.py b/examples/voice/rime.py similarity index 100% rename from examples/services/speech/rime.py rename to examples/voice/rime.py diff --git a/examples/services/speech/sarvam-http.py b/examples/voice/sarvam-http.py similarity index 100% rename from examples/services/speech/sarvam-http.py rename to examples/voice/sarvam-http.py diff --git a/examples/services/speech/sarvam.py b/examples/voice/sarvam.py similarity index 100% rename from examples/services/speech/sarvam.py rename to examples/voice/sarvam.py diff --git a/examples/services/speech/smallest.py b/examples/voice/smallest.py similarity index 100% rename from examples/services/speech/smallest.py rename to examples/voice/smallest.py diff --git a/examples/services/speech/soniox.py b/examples/voice/soniox.py similarity index 100% rename from examples/services/speech/soniox.py rename to examples/voice/soniox.py diff --git a/examples/services/speech/speechmatics-vad.py b/examples/voice/speechmatics-vad.py similarity index 100% rename from examples/services/speech/speechmatics-vad.py rename to examples/voice/speechmatics-vad.py diff --git a/examples/services/speech/speechmatics.py b/examples/voice/speechmatics.py similarity index 100% rename from examples/services/speech/speechmatics.py rename to examples/voice/speechmatics.py diff --git a/examples/services/speech/xai.py b/examples/voice/xai.py similarity index 100% rename from examples/services/speech/xai.py rename to examples/voice/xai.py diff --git a/examples/services/speech/xtts.py b/examples/voice/xtts.py similarity index 100% rename from examples/services/speech/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 3c540ff87..be3bd1295 100644 --- a/scripts/evals/run-release-evals.py +++ b/scripts/evals/run-release-evals.py @@ -96,61 +96,61 @@ EVAL_COMPLETE_TURN = EvalConfig( ) -TESTS_SPEECH = [ - ("services/speech/cartesia.py", EVAL_SIMPLE_MATH), - ("services/speech/cartesia-http.py", EVAL_SIMPLE_MATH), - ("services/speech/speechmatics.py", EVAL_SIMPLE_MATH), - ("services/speech/speechmatics-vad.py", EVAL_SIMPLE_MATH), - ("services/speech/langchain.py", EVAL_SIMPLE_MATH), - ("services/speech/deepgram.py", EVAL_SIMPLE_MATH), - ("services/speech/deepgram-flux.py", EVAL_SIMPLE_MATH), - ("services/speech/deepgram-http.py", EVAL_SIMPLE_MATH), - ("services/speech/elevenlabs.py", EVAL_SIMPLE_MATH), - ("services/speech/elevenlabs-http.py", EVAL_SIMPLE_MATH), - ("services/speech/xai.py", EVAL_SIMPLE_MATH), - ("services/speech/azure.py", EVAL_SIMPLE_MATH), - ("services/speech/azure-http.py", EVAL_SIMPLE_MATH), - ("services/speech/openai.py", EVAL_SIMPLE_MATH), - ("services/speech/openai-http.py", EVAL_SIMPLE_MATH), - ("services/speech/gladia.py", EVAL_SIMPLE_MATH), - ("services/speech/gladia-vad.py", EVAL_SIMPLE_MATH), - ("services/speech/lmnt.py", EVAL_SIMPLE_MATH), - ("services/speech/groq.py", EVAL_SIMPLE_MATH), - ("services/speech/aws.py", EVAL_SIMPLE_MATH), - ("services/speech/aws-strands.py", EVAL_WEATHER), - ("services/speech/google-gemini-tts.py", EVAL_SIMPLE_MATH), - ("services/speech/google.py", EVAL_SIMPLE_MATH), - ("services/speech/google-http.py", EVAL_SIMPLE_MATH), - ("services/speech/assemblyai.py", EVAL_SIMPLE_MATH), - ("services/speech/krisp-viva.py", EVAL_SIMPLE_MATH), - ("services/speech/rime.py", EVAL_SIMPLE_MATH), - ("services/speech/rime-http.py", EVAL_SIMPLE_MATH), - ("services/speech/nvidia.py", EVAL_SIMPLE_MATH), - ("services/speech/google-audio-in.py", EVAL_SIMPLE_MATH), - ("services/speech/fish.py", EVAL_SIMPLE_MATH), - ("services/speech/neuphonic.py", EVAL_SIMPLE_MATH), - ("services/speech/neuphonic-http.py", EVAL_SIMPLE_MATH), - ("services/speech/fal.py", EVAL_SIMPLE_MATH), - ("services/speech/minimax.py", EVAL_SIMPLE_MATH), - ("services/speech/sarvam.py", EVAL_SIMPLE_MATH), - ("services/speech/sarvam-http.py", EVAL_SIMPLE_MATH), - ("services/speech/soniox.py", EVAL_SIMPLE_MATH), - ("services/speech/inworld.py", EVAL_SIMPLE_MATH), - ("services/speech/inworld-http.py", EVAL_SIMPLE_MATH), - ("services/speech/asyncai.py", EVAL_SIMPLE_MATH), - ("services/speech/asyncai-http.py", EVAL_SIMPLE_MATH), - ("services/speech/aicoustics.py", EVAL_SIMPLE_MATH), - ("services/speech/hume.py", EVAL_SIMPLE_MATH), - ("services/speech/gradium.py", EVAL_SIMPLE_MATH), - ("services/speech/camb.py", EVAL_SIMPLE_MATH), - ("services/speech/piper.py", EVAL_SIMPLE_MATH), - ("services/speech/kokoro.py", EVAL_SIMPLE_MATH), - ("services/speech/resemble.py", EVAL_SIMPLE_MATH), - ("services/speech/smallest.py", EVAL_SIMPLE_MATH), - ("services/speech/openai-responses.py", EVAL_SIMPLE_MATH), - ("services/speech/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. - # ("services/speech/xtts.py", EVAL_SIMPLE_MATH), + # ("voice/xtts.py", EVAL_SIMPLE_MATH), ] TESTS_VISION = [ @@ -169,44 +169,44 @@ TESTS_VISION = [ TESTS_FUNCTION_CALLING = [ ("getting-started/07-function-calling.py", EVAL_WEATHER), ("getting-started/07-function-calling.py", EVAL_WEATHER_AND_RESTAURANT), - ("services/function-calling/openai-responses.py", EVAL_WEATHER), - ("services/function-calling/openai-responses.py", EVAL_WEATHER_AND_RESTAURANT), - ("services/function-calling/openai-responses-http.py", EVAL_WEATHER), - ("services/function-calling/openai-responses-http.py", EVAL_WEATHER_AND_RESTAURANT), - ("services/function-calling/anthropic.py", EVAL_WEATHER), - ("services/function-calling/anthropic.py", EVAL_WEATHER_AND_RESTAURANT), - ("services/function-calling/openai.py", EVAL_WEATHER), - ("services/function-calling/google.py", EVAL_WEATHER), - ("services/function-calling/google.py", EVAL_WEATHER_AND_RESTAURANT), - ("services/function-calling/groq.py", EVAL_WEATHER), - ("services/function-calling/grok.py", EVAL_WEATHER), - ("services/function-calling/azure.py", EVAL_WEATHER), - ("services/function-calling/fireworks.py", EVAL_WEATHER), - ("services/function-calling/nvidia.py", EVAL_WEATHER), - ("services/function-calling/cerebras.py", EVAL_WEATHER), - ("services/function-calling/openrouter.py", EVAL_WEATHER), - ("services/function-calling/perplexity.py", EVAL_WEATHER), - ("services/function-calling/google-vertex.py", EVAL_WEATHER), - ("services/function-calling/qwen.py", EVAL_WEATHER), - ("services/function-calling/aws.py", EVAL_WEATHER), - ("services/function-calling/sambanova.py", EVAL_WEATHER), - ("services/function-calling/aws.py", EVAL_WEATHER_AND_RESTAURANT), - ("services/function-calling/nebius.py", EVAL_WEATHER), - ("services/function-calling/mistral.py", EVAL_WEATHER), - ("services/function-calling/sarvam.py", EVAL_WEATHER), - ("services/function-calling/novita.py", EVAL_WEATHER), + ("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 - ("services/function-calling/anthropic-video.py", EVAL_VISION_CAMERA), - ("services/function-calling/aws-video.py", EVAL_VISION_CAMERA), - ("services/function-calling/google-video.py", EVAL_VISION_CAMERA), - ("services/function-calling/moondream-video.py", EVAL_VISION_CAMERA), - ("services/function-calling/openai-video.py", EVAL_VISION_CAMERA), - ("services/function-calling/openai-responses-video.py", EVAL_VISION_CAMERA), - ("services/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. - # ("services/function-calling/together.py", EVAL_WEATHER), - # ("services/function-calling/deepseek.py", EVAL_WEATHER), - # ("services/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_FEATURES = [ @@ -257,7 +257,7 @@ TESTS_THINKING_AND_MCP = [ ] TESTS = [ - *TESTS_SPEECH, + *TESTS_VOICE, *TESTS_VISION, *TESTS_FUNCTION_CALLING, *TESTS_FEATURES,