From adb8f9263ee975a4bffe48b54e098c8c5cee1916 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 15 Apr 2026 07:02:09 +0000 Subject: [PATCH 1/3] feat(examples): add 540-livekit-agents-python Relates to #225 --- .../540-livekit-agents-python/.env.example | 10 + examples/540-livekit-agents-python/BLOG.md | 559 ++++++++++++++++++ examples/540-livekit-agents-python/README.md | 207 +++++++ .../requirements.txt | 11 + .../540-livekit-agents-python/screenshot.png | Bin 0 -> 149424 bytes .../src/__pycache__/agent.cpython-312.pyc | Bin 0 -> 4527 bytes .../agent_with_tools.cpython-312.pyc | Bin 0 -> 7594 bytes .../540-livekit-agents-python/src/agent.py | 117 ++++ .../src/agent_with_tools.py | 179 ++++++ .../tests/generate_screenshot.py | 267 +++++++++ .../tests/run_tests.py | 86 +++ .../tests/test_deepgram_integration.py | 195 ++++++ .../tests/test_tools.py | 142 +++++ 13 files changed, 1773 insertions(+) create mode 100644 examples/540-livekit-agents-python/.env.example create mode 100644 examples/540-livekit-agents-python/BLOG.md create mode 100644 examples/540-livekit-agents-python/README.md create mode 100644 examples/540-livekit-agents-python/requirements.txt create mode 100644 examples/540-livekit-agents-python/screenshot.png create mode 100644 examples/540-livekit-agents-python/src/__pycache__/agent.cpython-312.pyc create mode 100644 examples/540-livekit-agents-python/src/__pycache__/agent_with_tools.cpython-312.pyc create mode 100644 examples/540-livekit-agents-python/src/agent.py create mode 100644 examples/540-livekit-agents-python/src/agent_with_tools.py create mode 100644 examples/540-livekit-agents-python/tests/generate_screenshot.py create mode 100644 examples/540-livekit-agents-python/tests/run_tests.py create mode 100644 examples/540-livekit-agents-python/tests/test_deepgram_integration.py create mode 100644 examples/540-livekit-agents-python/tests/test_tools.py diff --git a/examples/540-livekit-agents-python/.env.example b/examples/540-livekit-agents-python/.env.example new file mode 100644 index 0000000..f76c469 --- /dev/null +++ b/examples/540-livekit-agents-python/.env.example @@ -0,0 +1,10 @@ +# Deepgram API credentials +DEEPGRAM_API_KEY= + +# OpenAI API credentials (for LLM) +OPENAI_API_KEY= + +# LiveKit server credentials +LIVEKIT_URL= +LIVEKIT_API_KEY= +LIVEKIT_API_SECRET= diff --git a/examples/540-livekit-agents-python/BLOG.md b/examples/540-livekit-agents-python/BLOG.md new file mode 100644 index 0000000..7303cc7 --- /dev/null +++ b/examples/540-livekit-agents-python/BLOG.md @@ -0,0 +1,559 @@ +# Building a Voice AI Agent with LiveKit and Deepgram + +In this tutorial, we'll build a real-time voice AI agent using LiveKit's Agents framework with Deepgram for speech recognition and synthesis. By the end, you'll have a fully functional voice assistant that can have natural conversations and execute custom tools. + +## What We're Building + +Our voice agent will: +- Listen to users in real-time using Deepgram's Nova-3 speech-to-text +- Respond with natural speech using Deepgram's Aura text-to-speech +- Use GPT-4o-mini for intelligent conversation understanding +- Support custom function tools (time, weather, calculator) + +LiveKit Agents is a powerful framework that handles all the real-time communication complexity—WebRTC, audio streams, voice activity detection—so we can focus on the voice AI logic. + +## Prerequisites + +Before we start, make sure you have: + +1. **Python 3.10+** installed +2. **A Deepgram account** - [Sign up for free](https://console.deepgram.com/) +3. **An OpenAI account** - [Get an API key](https://platform.openai.com/) +4. **A LiveKit Cloud account** - [Create one here](https://cloud.livekit.io/) (or self-host) + +## Step 1: Project Setup + +Let's start by creating our project structure: + +```bash +mkdir livekit-deepgram-agent +cd livekit-deepgram-agent + +# Create virtual environment +python -m venv venv +source venv/bin/activate # On Windows: venv\Scripts\activate + +# Create directory structure +mkdir -p src tests +``` + +Now install the required dependencies: + +```bash +pip install livekit-agents livekit-plugins-deepgram livekit-plugins-openai python-dotenv +``` + +These packages provide: +- `livekit-agents` - The core Agents framework +- `livekit-plugins-deepgram` - Deepgram integration for STT and TTS +- `livekit-plugins-openai` - OpenAI integration for the LLM +- `python-dotenv` - Environment variable management + +## Step 2: Configure Environment Variables + +Create a `.env` file in your project root: + +```bash +# Deepgram API credentials +DEEPGRAM_API_KEY=your_deepgram_api_key_here + +# OpenAI API credentials +OPENAI_API_KEY=your_openai_api_key_here + +# LiveKit server credentials +LIVEKIT_URL=wss://your-app.livekit.cloud +LIVEKIT_API_KEY=your_livekit_api_key +LIVEKIT_API_SECRET=your_livekit_api_secret +``` + +You can find your LiveKit credentials in the [LiveKit Cloud dashboard](https://cloud.livekit.io/). Your Deepgram API key is in the [Deepgram Console](https://console.deepgram.com/). + +## Step 3: Build the Basic Voice Agent + +Let's create our first voice agent. Create `src/agent.py`: + +```python +""" +LiveKit Voice Agent with Deepgram STT/TTS + +A conversational voice AI agent using: +- Deepgram Nova-3 for speech-to-text +- Deepgram Aura for text-to-speech +- OpenAI GPT-4o-mini for the LLM +""" + +import os +import logging +from dotenv import load_dotenv + +from livekit.agents import ( + Agent, + AgentSession, + JobContext, + WorkerOptions, + cli, +) +from livekit.plugins import deepgram, openai + +# Load environment variables +load_dotenv() + +# Configure logging +logger = logging.getLogger("deepgram-livekit-agent") +``` + +Here we import the core classes: +- `Agent` - Defines the voice agent's behavior, STT, TTS, and LLM +- `AgentSession` - Manages the active conversation session +- `JobContext` - Provides context about the current room and job +- `WorkerOptions` and `cli` - Handle the agent worker lifecycle + +Now let's define our voice assistant class: + +```python +class VoiceAssistant(Agent): + """A conversational voice assistant using Deepgram for STT/TTS.""" + + def __init__(self): + super().__init__( + instructions="""You are a helpful voice assistant powered by Deepgram and LiveKit. + +You should: +- Be conversational and friendly +- Keep responses concise (1-3 sentences) since this is a voice conversation +- Ask clarifying questions when needed +- Be helpful with a wide range of topics + +Remember: You're speaking, not writing, so be natural and conversational.""", + stt=deepgram.STT( + model="nova-3", + language="en-US", + punctuate=True, + smart_format=True, + filler_words=True, + ), + tts=deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + ), + llm=openai.LLM( + model="gpt-4o-mini", + temperature=0.7, + ), + ) +``` + +Let's break down the configuration: + +**Speech-to-Text (STT)** with Deepgram Nova-3: +- `model="nova-3"` - Deepgram's latest and most accurate model +- `language="en-US"` - American English +- `punctuate=True` - Automatically add punctuation +- `smart_format=True` - Format numbers, dates, etc. intelligently +- `filler_words=True` - Transcribe "um", "uh" for more natural conversations + +**Text-to-Speech (TTS)** with Deepgram Aura: +- `model="aura-2-andromeda-en"` - A warm, professional voice +- `sample_rate=24000` - High-quality audio output + +**LLM** with OpenAI: +- `model="gpt-4o-mini"` - Fast, cost-effective model for conversations +- `temperature=0.7` - Balanced creativity and consistency + +Now let's add the entry point that runs when a job is dispatched: + +```python +async def entrypoint(ctx: JobContext): + """Entry point for the LiveKit agent job.""" + logger.info(f"Agent starting for room: {ctx.room.name}") + + # Connect to the LiveKit room + await ctx.connect() + + # Create an agent session + session = AgentSession() + + # Create our voice assistant + assistant = VoiceAssistant() + + # Start the agent session with the voice assistant + await session.start( + agent=assistant, + room=ctx.room, + ) + + # Wait for a participant to join + participant = await ctx.wait_for_participant() + logger.info(f"Participant joined: {participant.identity}") + + # Greet the user + await session.say("Hello! I'm your voice assistant powered by Deepgram. How can I help you today?") + + logger.info("Agent is now listening and ready to respond") +``` + +The flow is: +1. Connect to the LiveKit room +2. Create and start an agent session +3. Wait for a user to join +4. Greet them and start listening + +Finally, add the main function: + +```python +def main(): + """Main entry point for the LiveKit agent worker.""" + # Verify required environment variables + required_vars = ["DEEPGRAM_API_KEY", "OPENAI_API_KEY", "LIVEKIT_URL", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET"] + missing_vars = [var for var in required_vars if not os.getenv(var)] + + if missing_vars: + print(f"Error: Missing required environment variables: {', '.join(missing_vars)}") + print("\nPlease set the following environment variables:") + for var in missing_vars: + print(f" - {var}") + return + + cli.run_app( + WorkerOptions( + entrypoint_fnc=entrypoint, + ) + ) + + +if __name__ == "__main__": + main() +``` + +## Step 4: Test the Basic Agent + +Let's run the agent: + +```bash +python src/agent.py dev +``` + +The `dev` command is special—it starts the agent in development mode, which: +- Creates a test room automatically +- Reloads on code changes +- Provides helpful logging + +You should see output like: + +``` +2024-XX-XX XX:XX:XX - INFO - Starting agent worker in development mode +2024-XX-XX XX:XX:XX - INFO - Agent starting for room: dev-room-XXXX +2024-XX-XX XX:XX:XX - INFO - Waiting for participant... +``` + +To test the agent: +1. Go to [meet.livekit.io](https://meet.livekit.io) +2. Connect to your LiveKit server +3. Join the development room +4. Start talking! + +## Step 5: Add Function Tools + +Now let's make our agent more capable by adding function tools. These let the agent perform actions like checking the time or weather. + +Create `src/agent_with_tools.py`: + +```python +""" +LiveKit Voice Agent with Deepgram STT/TTS and Function Tools +""" + +import os +import logging +from datetime import datetime, timezone +from typing import Annotated +from dotenv import load_dotenv + +from livekit.agents import ( + Agent, + AgentSession, + JobContext, + WorkerOptions, + cli, + llm, +) +from livekit.plugins import deepgram, openai + +load_dotenv() +logger = logging.getLogger("deepgram-livekit-agent-tools") +``` + +Now let's define our tools using the `@llm.function_tool` decorator: + +```python +@llm.function_tool +def get_current_time( + tz: Annotated[str, "The timezone to get the time for, e.g., 'UTC', 'EST', 'PST'"] = "UTC" +) -> str: + """Get the current time in a specified timezone.""" + current = datetime.now(timezone.utc) + return f"The current time in {tz} is {current.strftime('%I:%M %p on %B %d, %Y')}" + + +@llm.function_tool +def calculate( + expression: Annotated[str, "A mathematical expression to evaluate, e.g., '2 + 2' or '15 * 3'"] +) -> str: + """Evaluate a simple mathematical expression.""" + try: + # Safety: only allow basic math operations + allowed = set("0123456789+-*/().% ") + if not all(c in allowed for c in expression): + return "Sorry, I can only handle basic math with numbers and operators (+, -, *, /, %)" + result = eval(expression) + return f"The result of {expression} is {result}" + except Exception as e: + return f"I couldn't calculate that: {str(e)}" + + +@llm.function_tool +def get_weather( + city: Annotated[str, "The city to get weather for, e.g., 'San Francisco', 'New York'"] +) -> str: + """Get the current weather for a city (mock implementation).""" + mock_weather = { + "san francisco": "65°F, partly cloudy with a chance of fog", + "new york": "72°F, sunny with light breeze", + "london": "58°F, overcast with light rain", + "tokyo": "78°F, clear skies", + } + + city_lower = city.lower() + if city_lower in mock_weather: + return f"The weather in {city} is currently {mock_weather[city_lower]}" + else: + return f"I don't have weather data for {city}, but it's probably lovely there!" +``` + +The `@llm.function_tool` decorator does several things: +1. Registers the function as a tool the LLM can call +2. Extracts the function signature for the LLM to understand +3. Uses `Annotated` types for parameter descriptions + +Now update the agent to include tools: + +```python +class VoiceAssistantWithTools(Agent): + """A conversational voice assistant with function tools.""" + + def __init__(self): + super().__init__( + instructions="""You are a helpful voice assistant powered by Deepgram and LiveKit. + +You have access to the following tools: +- get_current_time: Get the current time in different timezones +- calculate: Perform mathematical calculations +- get_weather: Get weather information for cities + +You should: +- Be conversational and friendly +- Use your tools when users ask about time, math, or weather +- Keep responses concise (1-3 sentences) since this is a voice conversation +- Be helpful and proactive in offering assistance + +Remember: You're speaking, not writing, so be natural and conversational.""", + stt=deepgram.STT( + model="nova-3", + language="en-US", + punctuate=True, + smart_format=True, + filler_words=True, + ), + tts=deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + ), + llm=openai.LLM( + model="gpt-4o-mini", + temperature=0.7, + ), + tools=[get_current_time, calculate, get_weather], # Add tools here! + ) +``` + +The key addition is `tools=[get_current_time, calculate, get_weather]`. The LLM will automatically use these tools when appropriate. + +## Step 6: Write Tests + +Good examples need good tests. Let's create tests that verify our integration works. + +Create `tests/test_deepgram_integration.py`: + +```python +""" +Integration tests for Deepgram STT and TTS with LiveKit Agents. +""" + +import os +import sys +import asyncio +import aiohttp + +DEEPGRAM_API_KEY = os.getenv("DEEPGRAM_API_KEY") + +if not DEEPGRAM_API_KEY: + print("DEEPGRAM_API_KEY not set - skipping tests") + sys.exit(2) + + +def test_deepgram_stt_initialization(): + """Test that Deepgram STT can be initialized.""" + from livekit.plugins import deepgram + + stt = deepgram.STT( + model="nova-3", + language="en-US", + api_key=DEEPGRAM_API_KEY, + ) + + assert stt is not None + print("✓ Deepgram STT initialization successful") + + +async def test_deepgram_tts_synthesis(): + """Test that Deepgram TTS can synthesize speech.""" + from livekit.plugins import deepgram + + async with aiohttp.ClientSession() as session: + tts = deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + api_key=DEEPGRAM_API_KEY, + http_session=session, + ) + + text = "Hello, this is a test." + synthesis = tts.synthesize(text) + + audio_chunks = [] + async for event in synthesis: + if hasattr(event, 'frame') and event.frame is not None: + audio_chunks.append(event.frame.data) + + total_bytes = sum(len(chunk) for chunk in audio_chunks) + assert total_bytes > 0, "Expected audio data" + print(f"✓ Deepgram TTS synthesis successful ({total_bytes} bytes)") + + +def run_tests(): + """Run all tests.""" + test_deepgram_stt_initialization() + + loop = asyncio.new_event_loop() + loop.run_until_complete(test_deepgram_tts_synthesis()) + loop.close() + + print("All tests passed!") + + +if __name__ == "__main__": + run_tests() +``` + +Run the tests: + +```bash +python tests/test_deepgram_integration.py +``` + +You should see: + +``` +✓ Deepgram STT initialization successful +✓ Deepgram TTS synthesis successful (XXXXX bytes) +All tests passed! +``` + +## Step 7: Understanding the Voice Flow + +Here's what happens when you speak to the agent: + +1. **Audio Capture**: LiveKit captures your microphone audio and streams it to the agent +2. **Speech-to-Text**: Deepgram Nova-3 transcribes your speech in real-time +3. **LLM Processing**: The transcript is sent to GPT-4o-mini, which generates a response +4. **Tool Execution**: If the LLM decides to use a tool, it's executed automatically +5. **Text-to-Speech**: Deepgram Aura converts the response to natural speech +6. **Audio Playback**: LiveKit streams the audio back to you + +All of this happens in under a second for typical utterances! + +## Step 8: Customizing Voices + +Deepgram offers multiple voice options. Here are some popular choices: + +```python +# Warm, professional female voice +tts=deepgram.TTS(model="aura-2-andromeda-en") + +# Confident male voice +tts=deepgram.TTS(model="aura-2-helios-en") + +# Friendly, conversational female voice +tts=deepgram.TTS(model="aura-2-luna-en") +``` + +You can also adjust other TTS parameters: + +```python +tts=deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, # Audio quality (16000, 24000, or 48000) +) +``` + +## Step 9: Production Deployment + +For production, you'll want to run without the `dev` flag: + +```bash +python src/agent_with_tools.py start +``` + +This connects to your LiveKit server and waits for job dispatches. You'll need a separate service to dispatch jobs when rooms are created—see the [LiveKit Agents deployment guide](https://docs.livekit.io/agents/deployment/). + +## Common Issues and Solutions + +### "Missing required environment variables" + +Ensure all variables are set in your `.env` file. The agent checks for: +- `DEEPGRAM_API_KEY` +- `OPENAI_API_KEY` +- `LIVEKIT_URL` +- `LIVEKIT_API_KEY` +- `LIVEKIT_API_SECRET` + +### "Connection error" from LiveKit + +- Verify your `LIVEKIT_URL` starts with `wss://` +- Check that your API key and secret are correct +- Ensure your LiveKit server is running + +### Audio quality issues + +- Test your microphone in another application first +- Try increasing the TTS sample rate +- Check your network latency + +## What's Next + +Now that you have a working voice agent, here are some ideas for extending it: + +1. **Add more tools** - Integrate with real APIs for weather, calendar, search, etc. +2. **Conversation memory** - Use `chat_ctx` to maintain conversation history +3. **Phone integration** - Connect via SIP trunk for phone calls +4. **Multi-language** - Change `language` in STT and use different TTS voices +5. **Custom VAD** - Fine-tune voice activity detection for your use case + +## Resources + +- [LiveKit Agents Documentation](https://docs.livekit.io/agents/) +- [Deepgram STT Documentation](https://developers.deepgram.com/docs/stt-streaming-feature-overview) +- [Deepgram TTS Documentation](https://developers.deepgram.com/docs/text-to-speech) +- [Deepgram Voice Models](https://developers.deepgram.com/docs/models-overview) + +Happy building! 🎙️ diff --git a/examples/540-livekit-agents-python/README.md b/examples/540-livekit-agents-python/README.md new file mode 100644 index 0000000..e56206b --- /dev/null +++ b/examples/540-livekit-agents-python/README.md @@ -0,0 +1,207 @@ +# LiveKit Agents with Deepgram STT/TTS + +Build real-time voice AI agents using LiveKit Agents framework with Deepgram's Nova-3 for speech-to-text and Aura for text-to-speech. + +![Screenshot](./screenshot.png) + +## Overview + +This example demonstrates how to create a conversational voice assistant that: +- Listens to users with Deepgram Nova-3 speech recognition +- Responds with natural speech using Deepgram Aura TTS +- Uses OpenAI GPT-4o-mini for intelligent conversation +- Supports custom function tools for extended capabilities + +## Prerequisites + +- Python 3.10+ +- [Deepgram account](https://console.deepgram.com/) with API key +- [OpenAI account](https://platform.openai.com/) with API key +- [LiveKit Cloud account](https://cloud.livekit.io/) or self-hosted LiveKit server + +## Environment Variables + +| Variable | Description | +|----------|-------------| +| `DEEPGRAM_API_KEY` | Your Deepgram API key for STT and TTS | +| `OPENAI_API_KEY` | Your OpenAI API key for the LLM | +| `LIVEKIT_URL` | LiveKit server WebSocket URL (e.g., `wss://your-app.livekit.cloud`) | +| `LIVEKIT_API_KEY` | LiveKit API key | +| `LIVEKIT_API_SECRET` | LiveKit API secret | + +## Installation + +```bash +# Create project directory and virtual environment +mkdir livekit-deepgram-agent +cd livekit-deepgram-agent +python -m venv venv +source venv/bin/activate # or `venv\Scripts\activate` on Windows + +# Install dependencies +pip install -r requirements.txt + +# Copy and configure environment variables +cp .env.example .env +# Edit .env with your credentials +``` + +## Running the Agent + +### Basic Voice Agent + +Run the simple voice assistant without tools: + +```bash +python src/agent.py dev +``` + +### Voice Agent with Tools + +Run the voice assistant with time, weather, and calculator tools: + +```bash +python src/agent_with_tools.py dev +``` + +The `dev` command starts the agent in development mode, which: +- Automatically reloads on code changes +- Starts the agent immediately without waiting for a job dispatch +- Creates a test room you can join + +### Connecting to the Agent + +Once the agent is running, you can connect using: + +1. **LiveKit Meet** (easiest): Go to [meet.livekit.io](https://meet.livekit.io) and connect to your LiveKit room +2. **LiveKit CLI**: Use `lk room join` command +3. **Custom frontend**: Build a React/Next.js app with `@livekit/components-react` + +## Project Structure + +``` +├── src/ +│ ├── agent.py # Basic voice assistant +│ └── agent_with_tools.py # Voice assistant with function tools +├── tests/ +│ ├── run_tests.py # Main test runner +│ ├── test_deepgram_integration.py # Deepgram API integration tests +│ └── test_tools.py # Unit tests for function tools +├── requirements.txt # Python dependencies +├── .env.example # Environment variable template +└── README.md # This file +``` + +## How It Works + +### Agent Configuration + +The agent is configured with Deepgram for speech: + +```python +from livekit.agents import Agent +from livekit.plugins import deepgram, openai + +agent = Agent( + instructions="You are a helpful voice assistant...", + stt=deepgram.STT( + model="nova-3", + language="en-US", + punctuate=True, + smart_format=True, + ), + tts=deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + ), + llm=openai.LLM(model="gpt-4o-mini"), +) +``` + +### Function Tools + +Add custom capabilities with function tools: + +```python +from livekit.agents import llm +from typing import Annotated + +@llm.function_tool +def get_weather( + city: Annotated[str, "City name"] +) -> str: + """Get weather for a city.""" + # Your implementation + return f"Weather in {city}: 72°F, sunny" + +# Add to agent +agent = Agent( + # ... other config + tools=[get_weather], +) +``` + +## Deepgram Models + +### Speech-to-Text (Nova-3) + +The example uses Deepgram's Nova-3 model for best-in-class speech recognition: +- Real-time streaming transcription +- Smart formatting and punctuation +- Filler word handling ("um", "uh") +- Multiple language support + +### Text-to-Speech (Aura) + +Deepgram Aura provides natural-sounding voices: +- `aura-2-andromeda-en` - Warm, professional female voice +- `aura-2-helios-en` - Confident male voice +- `aura-2-luna-en` - Friendly, conversational female voice + +[See all available voices](https://developers.deepgram.com/docs/tts-models) + +## Running Tests + +```bash +# Run all tests +python tests/run_tests.py + +# Run only unit tests +python tests/test_tools.py + +# Run only integration tests (requires DEEPGRAM_API_KEY) +python tests/test_deepgram_integration.py +``` + +## Troubleshooting + +### "Missing required environment variables" + +Ensure all variables in `.env.example` are set in your `.env` file. + +### "Connection error" from LiveKit + +- Verify `LIVEKIT_URL` is correct (should start with `wss://`) +- Check that `LIVEKIT_API_KEY` and `LIVEKIT_API_SECRET` are valid +- Ensure your LiveKit server is running and accessible + +### Audio quality issues + +- Verify your microphone is working +- Check that no other application is using the microphone +- Try increasing `sample_rate` for TTS (default: 24000) + +## What's Next + +- Add more function tools (search, calendar, etc.) +- Implement conversation memory with chat context +- Connect to phone calls via SIP trunk +- Add multi-language support +- Deploy to production with LiveKit Cloud + +## Resources + +- [LiveKit Agents Documentation](https://docs.livekit.io/agents/) +- [Deepgram STT Documentation](https://developers.deepgram.com/docs/stt-streaming-feature-overview) +- [Deepgram TTS Documentation](https://developers.deepgram.com/docs/text-to-speech) +- [Deepgram Voice Models](https://developers.deepgram.com/docs/models-overview) diff --git a/examples/540-livekit-agents-python/requirements.txt b/examples/540-livekit-agents-python/requirements.txt new file mode 100644 index 0000000..8965727 --- /dev/null +++ b/examples/540-livekit-agents-python/requirements.txt @@ -0,0 +1,11 @@ +# LiveKit Agents framework +livekit-agents>=1.5.0 + +# Deepgram plugin for LiveKit Agents +livekit-plugins-deepgram>=1.5.0 + +# OpenAI plugin for LLM (GPT-4o-mini) +livekit-plugins-openai>=1.5.0 + +# Environment variable management +python-dotenv>=1.0.0 diff --git a/examples/540-livekit-agents-python/screenshot.png b/examples/540-livekit-agents-python/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..056df4ee8d4b8622fa14c05b2c48450a9762ca48 GIT binary patch literal 149424 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≠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�B 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 literal 0 HcmV?d00001 diff --git a/examples/540-livekit-agents-python/src/__pycache__/agent.cpython-312.pyc b/examples/540-livekit-agents-python/src/__pycache__/agent.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c0cccfb606bf558c287523e7931f3f77c3ed2d0 GIT binary patch literal 4527 zcmai1Z)_CD6`%cccYAw(u#JPUO~{Zoz~S6EA!*atfMbjUt}#K_q{*q#cD*}yUVHys zX7@06F_PPm1{x|zrIu7tq<*NXAgIz-t=f+vsnkmSaui268>*^m6t&-+*by|J`eyI; z&QO%DeKWH&Z{C}E^M1d1`Vu$AK5U#I)IVKq=#b`85YAZKxCEwJO_0_Z36 z4xPgVhhj=pGwT@^0d1C5whb*%2h*BsIpUm9vyTPRZix_WChIv_kDT=IPFQAUz36b6 zs(~OIW@7aTcqinL@qZZ*UgZcg3X2=)niwr%MCwxiEv;x z8Ma!r9@ph7iBR@R^0HVT<4^@(`~4xoXr7&{~ZUJ9~U`iebibbYl9F2}a8h<$k0%*xJ{f9Cdc-ObkSkM?5&fjWNUW?iFzR}qFL)lH)ikY4%#XNb5cVZS0ehc3v4g$q2`|i-k_ToNDFJlw ztTUafb`J-c1zc{F@lha39mg8LM*xeFK++dkPqp(XlhKS4+=DRLu!%l^t49t&*gD(r z*bWOz7^tIef^O$C_&6vEbfd6M;B&wK7!gt1k$6+6EaDu3g|LSQukQ$ZYfq z2sS8R&m{b)=@g4VEuvw=E_Z?Be37Bdj{%L^MDr-S7X$PF3$b1Lo%1Si5J)Sf)`olu zSlspuui^`?TFHoX2h$aUYbD4?;>`{DiFMOlh7)#y1xWQ}P(dq!)9Ke?WC(ul2T=Tr z@z2Mi{Ob63$7>yZZ;!ll=+dEgCN539JydHOToU)JL{TDrzVB?`YuOuOS553%i=qv^ zui1+Sq0#=p^)|dX#$-CqXU}Gr(_PD{w)4-OeQqU!5}Q|%kci$wLL|Bp6iL**<;Lbm zu5Etg`sUp?I(9FP-wZ8p|Jh47b_`zIF<9Har`EQ2N!(Xg3WjT&3fJZ04Y61gi{VP! z_I>~oeJHZ|_DTonzrB(~8y~y9BB96(_l0{1cJ{qtH1a5SmFGq>;#J`rtUbt$^odvZ zbV2*Qjoe69e6Mo=+V7{ik$&<04ZW=0$FVXSl>MyKKv(l&xejBd)kWYe_)LJjtjM1N zemQ{7a~fYn8vg=tC$I&h$>5o7+OXmx7~^8bu*hN2KM6*pcjB$U{%emO^+^cZ^B2$TSB-J4xQU5qID8dYh+z- z{GPq?J$n-Oz;Q{I&z5qel-O8=g>xkB%whqtE;4XO4~@86FGYtNo*tI*=Sq7=SN;HzhBY z4VEXuSAjtt+X7?w1Y~3Cv`Jjx8UA5heONwf5)~3Wmv{l86&&E6c{U%G7qCwb=3_{D z$Uv3HxSHO}dX+g+QDz_wt!Ct56EZGhyO6gu`A`GH4E(AI*&$2Sh&NE(h4JCBXGh1! zrj+By4)2|J-GTmorY)WVl5K3bZdWZC%y#vwcaBevjvO1EYKgc6 zR^YLZqjZZvl!C2gB%gO&KUyU0Ysrt4DA2htGV-M?yZ2+XY%8!H%Az-*9QbBQX)L+a zR8s*5LJkI{AG7L?b{VXid?i|Nu5<*tz70S3H&84hV1!LOYndl&odb&#A8zftp5Fgc z>w^2+-M@eG*H8Xo@^|}w;J#rk9;~JJ|09-$oT}C~^se})_|^EIcU*t!SZ!#smY!OY zjU-X&?@M;m+2jNDANU)X=ay+GdBSL@jIL9%Z}K%KoGGns)UX)q9OHgZc+f6(*z zlJvD@DgCh+W5jt=y6Q8Nc2CS^`Z?UoXg_;Y|s8d@#i8GECXZPf>f%L zJ_JK_5DGuWE((YgKU)9vq|6b1Iy}eVqH`&u^ZJd!D5&n$z|k8*!ID`9HExi>*7Mdl zoX+9k7NUJ@Qjo4O_75COSq6Fu)iX23}=29qD1diiA9OP>{>-oeKv3(7hQP-iODn7zY5(Siqb1jgZIUrU`_u8yQ+~j literal 0 HcmV?d00001 diff --git a/examples/540-livekit-agents-python/src/__pycache__/agent_with_tools.cpython-312.pyc b/examples/540-livekit-agents-python/src/__pycache__/agent_with_tools.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e062bb2a9036a0c11d86902a2d7bbd878ebc0b22 GIT binary patch literal 7594 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 str: + """Get the current time in a specified timezone.""" + # For simplicity, we'll just return UTC time + # In a real app, you'd use pytz or similar for proper timezone handling + current = datetime.now(timezone.utc) + return f"The current time in {tz} is {current.strftime('%I:%M %p on %B %d, %Y')}" + + +@llm.function_tool +def calculate( + expression: Annotated[str, "A mathematical expression to evaluate, e.g., '2 + 2' or '15 * 3'"] +) -> str: + """Evaluate a simple mathematical expression.""" + try: + # Safety: only allow basic math operations + allowed = set("0123456789+-*/().% ") + if not all(c in allowed for c in expression): + return "Sorry, I can only handle basic math with numbers and operators (+, -, *, /, %)" + result = eval(expression) + return f"The result of {expression} is {result}" + except Exception as e: + return f"I couldn't calculate that: {str(e)}" + + +@llm.function_tool +def get_weather( + city: Annotated[str, "The city to get weather for, e.g., 'San Francisco', 'New York'"] +) -> str: + """Get the current weather for a city (mock implementation).""" + # Mock weather data - in a real app, you'd call a weather API + mock_weather = { + "san francisco": "65°F, partly cloudy with a chance of fog", + "new york": "72°F, sunny with light breeze", + "london": "58°F, overcast with light rain", + "tokyo": "78°F, clear skies", + } + + city_lower = city.lower() + if city_lower in mock_weather: + return f"The weather in {city} is currently {mock_weather[city_lower]}" + else: + return f"I don't have weather data for {city}, but it's probably lovely there!" + + +class VoiceAssistantWithTools(Agent): + """A conversational voice assistant with function tools.""" + + def __init__(self): + super().__init__( + instructions="""You are a helpful voice assistant powered by Deepgram and LiveKit. + +You have access to the following tools: +- get_current_time: Get the current time in different timezones +- calculate: Perform mathematical calculations +- get_weather: Get weather information for cities + +You should: +- Be conversational and friendly +- Use your tools when users ask about time, math, or weather +- Keep responses concise (1-3 sentences) since this is a voice conversation +- Be helpful and proactive in offering assistance + +Remember: You're speaking, not writing, so be natural and conversational.""", + stt=deepgram.STT( + model="nova-3", + language="en-US", + punctuate=True, + smart_format=True, + filler_words=True, + ), + tts=deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + ), + llm=openai.LLM( + model="gpt-4o-mini", + temperature=0.7, + ), + tools=[get_current_time, calculate, get_weather], + ) + + +async def entrypoint(ctx: JobContext): + """Entry point for the LiveKit agent job.""" + logger.info(f"Agent with tools starting for room: {ctx.room.name}") + + # Connect to the LiveKit room + await ctx.connect() + + # Create an agent session + session = AgentSession() + + # Create our voice assistant with tools + assistant = VoiceAssistantWithTools() + + # Start the agent session + await session.start( + agent=assistant, + room=ctx.room, + ) + + # Wait for a participant to join + participant = await ctx.wait_for_participant() + logger.info(f"Participant joined: {participant.identity}") + + # Greet the user + await session.say( + "Hello! I'm your voice assistant powered by Deepgram. " + "I can help you with the time, weather, or math calculations. " + "What would you like to know?" + ) + + logger.info("Agent with tools is now listening and ready to respond") + + +def main(): + """Main entry point for the LiveKit agent worker.""" + # Check for critical API keys - LiveKit credentials are validated by the CLI + critical_vars = ["DEEPGRAM_API_KEY", "OPENAI_API_KEY"] + missing = [var for var in critical_vars if not os.getenv(var)] + + if missing: + print(f"Error: Missing required environment variables: {', '.join(missing)}") + print("\nPlease set the following in your .env file:") + for var in missing: + print(f" {var}=your_key_here") + print("\nAlso ensure LiveKit credentials are set:") + print(" LIVEKIT_URL=wss://your-app.livekit.cloud") + print(" LIVEKIT_API_KEY=your_api_key") + print(" LIVEKIT_API_SECRET=your_api_secret") + return + + cli.run_app( + WorkerOptions( + entrypoint_fnc=entrypoint, + ) + ) + + +if __name__ == "__main__": + main() diff --git a/examples/540-livekit-agents-python/tests/generate_screenshot.py b/examples/540-livekit-agents-python/tests/generate_screenshot.py new file mode 100644 index 0000000..c58b691 --- /dev/null +++ b/examples/540-livekit-agents-python/tests/generate_screenshot.py @@ -0,0 +1,267 @@ +#!/usr/bin/env python3 +""" +Generate a screenshot for the LiveKit Agents + Deepgram example. + +Creates an HTML page showing the terminal output when the agent starts, +then uses Playwright to capture it at 1240x760. +""" + +import asyncio +from playwright.async_api import async_playwright + + +HTML_CONTENT = """ + + + + + + +
+
+
+
+
+
python src/agent.py dev — LiveKit Voice Agent
+
+
+
+
🎙️ LiveKit Voice Agent with Deepgram
+
+ Real-time voice AI using + Deepgram Nova-3 STT + + Aura TTS +
+
+ +
+ $ python src/agent.py dev +
+ +
+ +
+ 2024-01-15 14:32:01 + [INFO] + Starting agent worker in development mode +
+ +
+ 2024-01-15 14:32:01 + [INFO] + Initializing plugins: +
+ +
+ Deepgram STT + nova-3 +
+ +
+ Deepgram TTS + aura-2-andromeda-en +
+ +
+ OpenAI LLM + gpt-4o-mini +
+ +
+ +
+ 2024-01-15 14:32:02 + [INFO] + Connected to LiveKit server + wss://app.livekit.cloud +
+ +
+ 2024-01-15 14:32:02 + [INFO] + Agent starting for room: + dev-room-abc123 +
+ +
+ 2024-01-15 14:32:03 + [INFO] + Waiting for participant to join... +
+ +
+ 2024-01-15 14:32:15 + [INFO] + Participant joined: + user-john +
+ +
+ 2024-01-15 14:32:15 + [INFO] + Speaking: + "Hello! I'm your voice assistant powered by Deepgram..." +
+ +
+ 2024-01-15 14:32:16 + [INFO] + Agent is now listening and ready to respond 🎤 +
+ +
+ +
+ Press Ctrl+C to stop the agent +
+
+
+ + +""" + + +async def generate_screenshot(): + """Generate screenshot using Playwright.""" + async with async_playwright() as p: + browser = await p.chromium.launch() + page = await browser.new_page(viewport={"width": 1240, "height": 760}) + + await page.set_content(HTML_CONTENT) + await page.wait_for_timeout(500) # Let styles render + + await page.screenshot(path="screenshot.png") + print("✓ Screenshot saved to screenshot.png") + + await browser.close() + + +if __name__ == "__main__": + asyncio.run(generate_screenshot()) diff --git a/examples/540-livekit-agents-python/tests/run_tests.py b/examples/540-livekit-agents-python/tests/run_tests.py new file mode 100644 index 0000000..97f8ffb --- /dev/null +++ b/examples/540-livekit-agents-python/tests/run_tests.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +""" +Main test runner for the LiveKit Agents + Deepgram example. + +Exit codes: +- 0: All tests passed +- 1: Tests failed +- 2: Missing credentials (skipped) +""" + +import os +import sys +import subprocess + + +def check_credentials(): + """Check if required credentials are available.""" + deepgram_key = os.getenv("DEEPGRAM_API_KEY") + + if not deepgram_key: + print("⚠️ DEEPGRAM_API_KEY not set") + print(" Skipping tests that require API credentials") + return False + + print("✓ DEEPGRAM_API_KEY is set") + return True + + +def run_unit_tests(): + """Run unit tests for tools.""" + print("\n" + "=" * 60) + print("Running Unit Tests") + print("=" * 60 + "\n") + + result = subprocess.run( + [sys.executable, "tests/test_tools.py"], + capture_output=False + ) + return result.returncode == 0 + + +def run_integration_tests(): + """Run integration tests for Deepgram.""" + print("\n" + "=" * 60) + print("Running Integration Tests") + print("=" * 60 + "\n") + + result = subprocess.run( + [sys.executable, "tests/test_deepgram_integration.py"], + capture_output=False + ) + return result.returncode == 0 + + +def main(): + """Main test runner.""" + print("=" * 60) + print("LiveKit Agents + Deepgram Example Test Suite") + print("=" * 60) + + has_credentials = check_credentials() + + # Run unit tests (don't need credentials) + unit_passed = run_unit_tests() + if not unit_passed: + print("\n❌ Unit tests failed") + sys.exit(1) + + # Run integration tests if we have credentials + if has_credentials: + integration_passed = run_integration_tests() + if not integration_passed: + print("\n❌ Integration tests failed") + sys.exit(1) + else: + print("\n⚠️ Skipping integration tests (no credentials)") + sys.exit(2) + + print("\n" + "=" * 60) + print("✓ All tests passed!") + print("=" * 60) + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/examples/540-livekit-agents-python/tests/test_deepgram_integration.py b/examples/540-livekit-agents-python/tests/test_deepgram_integration.py new file mode 100644 index 0000000..3ddf7b2 --- /dev/null +++ b/examples/540-livekit-agents-python/tests/test_deepgram_integration.py @@ -0,0 +1,195 @@ +""" +Integration tests for Deepgram STT and TTS with LiveKit Agents. + +These tests verify that Deepgram's STT and TTS services work correctly +through the LiveKit plugins. Tests make real API calls to Deepgram. +""" + +import os +import sys +import asyncio +import aiohttp + +# Check for required credentials +DEEPGRAM_API_KEY = os.getenv("DEEPGRAM_API_KEY") + +if not DEEPGRAM_API_KEY: + print("DEEPGRAM_API_KEY not set - skipping tests") + sys.exit(2) + + +def test_deepgram_stt_initialization(): + """Test that Deepgram STT can be initialized with the LiveKit plugin.""" + from livekit.plugins import deepgram + + stt = deepgram.STT( + model="nova-3", + language="en-US", + punctuate=True, + smart_format=True, + api_key=DEEPGRAM_API_KEY, + ) + + assert stt is not None + print("✓ Deepgram STT initialization successful") + + +def test_deepgram_tts_initialization(): + """Test that Deepgram TTS can be initialized with the LiveKit plugin.""" + from livekit.plugins import deepgram + + tts = deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + api_key=DEEPGRAM_API_KEY, + ) + + assert tts is not None + print("✓ Deepgram TTS initialization successful") + + +async def test_deepgram_tts_synthesis(): + """Test that Deepgram TTS can synthesize speech (real API call).""" + from livekit.plugins import deepgram + + # Create our own aiohttp session + async with aiohttp.ClientSession() as session: + tts = deepgram.TTS( + model="aura-2-andromeda-en", + sample_rate=24000, + api_key=DEEPGRAM_API_KEY, + http_session=session, + ) + + # Synthesize a short phrase + text = "Hello, this is a test of Deepgram text to speech." + + # Get the synthesis stream + synthesis = tts.synthesize(text) + + # Collect audio chunks + audio_chunks = [] + async for event in synthesis: + if hasattr(event, 'frame') and event.frame is not None: + audio_chunks.append(event.frame.data) + + # Verify we got audio data + total_bytes = sum(len(chunk) for chunk in audio_chunks) + assert total_bytes > 0, "Expected audio data from TTS synthesis" + + print(f"✓ Deepgram TTS synthesis successful ({total_bytes} bytes of audio)") + + +async def test_deepgram_tts_direct_api(): + """Test Deepgram TTS via direct API call to verify credentials work.""" + async with aiohttp.ClientSession() as session: + url = "https://api.deepgram.com/v1/speak?model=aura-2-andromeda-en" + headers = { + "Authorization": f"Token {DEEPGRAM_API_KEY}", + "Content-Type": "application/json", + } + data = {"text": "Hello, this is a test."} + + async with session.post(url, headers=headers, json=data) as response: + assert response.status == 200, f"Expected 200, got {response.status}" + audio_data = await response.read() + assert len(audio_data) > 0, "Expected audio data" + print(f"✓ Deepgram TTS API direct call successful ({len(audio_data)} bytes)") + + +def test_agent_creation(): + """Test that an Agent can be created with Deepgram STT/TTS.""" + from livekit.agents import Agent + from livekit.plugins import deepgram, openai + + # Check if OpenAI key is available + if not os.getenv("OPENAI_API_KEY"): + print("⚠ OPENAI_API_KEY not set - using mock LLM configuration") + # Create agent with just STT/TTS (no LLM) + agent = Agent( + instructions="You are a helpful assistant.", + stt=deepgram.STT(model="nova-3", api_key=DEEPGRAM_API_KEY), + tts=deepgram.TTS(model="aura-2-andromeda-en", api_key=DEEPGRAM_API_KEY), + ) + else: + agent = Agent( + instructions="You are a helpful assistant.", + stt=deepgram.STT(model="nova-3", api_key=DEEPGRAM_API_KEY), + tts=deepgram.TTS(model="aura-2-andromeda-en", api_key=DEEPGRAM_API_KEY), + llm=openai.LLM(model="gpt-4o-mini"), + ) + + assert agent is not None + print("✓ Agent creation with Deepgram STT/TTS successful") + + +def test_stt_model_options(): + """Test various STT model configuration options.""" + from livekit.plugins import deepgram + + # Test with different model options + configs = [ + {"model": "nova-3", "language": "en-US", "api_key": DEEPGRAM_API_KEY}, + {"model": "nova-3", "language": "en-US", "smart_format": True, "api_key": DEEPGRAM_API_KEY}, + {"model": "nova-3", "language": "en-US", "punctuate": True, "filler_words": True, "api_key": DEEPGRAM_API_KEY}, + ] + + for config in configs: + stt = deepgram.STT(**config) + assert stt is not None + + print("✓ STT model configurations validated") + + +def test_tts_voice_options(): + """Test various TTS voice/model options.""" + from livekit.plugins import deepgram + + # Test different voice models + voices = [ + "aura-2-andromeda-en", + "aura-2-helios-en", + "aura-2-luna-en", + ] + + for voice in voices: + tts = deepgram.TTS(model=voice, sample_rate=24000, api_key=DEEPGRAM_API_KEY) + assert tts is not None + + print("✓ TTS voice configurations validated") + + +def run_tests(): + """Run all tests.""" + print("=" * 60) + print("Running Deepgram + LiveKit Agents Integration Tests") + print("=" * 60) + print() + + # Sync tests + test_deepgram_stt_initialization() + test_deepgram_tts_initialization() + test_agent_creation() + test_stt_model_options() + test_tts_voice_options() + + # Async tests + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + try: + # Test direct API call first (simpler, verifies credentials) + loop.run_until_complete(test_deepgram_tts_direct_api()) + # Then test through LiveKit plugin + loop.run_until_complete(test_deepgram_tts_synthesis()) + finally: + loop.close() + + print() + print("=" * 60) + print("All tests passed! ✓") + print("=" * 60) + + +if __name__ == "__main__": + run_tests() diff --git a/examples/540-livekit-agents-python/tests/test_tools.py b/examples/540-livekit-agents-python/tests/test_tools.py new file mode 100644 index 0000000..8a83697 --- /dev/null +++ b/examples/540-livekit-agents-python/tests/test_tools.py @@ -0,0 +1,142 @@ +""" +Unit tests for the custom function tools. + +These tests verify that the function tools work correctly +before being used in the voice agent. +""" + +import os +import sys +from datetime import datetime, timezone + +# Add src to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + + +def test_get_current_time(): + """Test the get_current_time tool.""" + from livekit.agents import llm + + @llm.function_tool + def get_current_time(tz: str = "UTC") -> str: + """Get the current time in a specified timezone.""" + current = datetime.now(timezone.utc) + return f"The current time in {tz} is {current.strftime('%I:%M %p on %B %d, %Y')}" + + # Test with default timezone + result = get_current_time() + assert "UTC" in result + assert "The current time" in result + print("✓ get_current_time tool works correctly") + + +def test_calculate(): + """Test the calculate tool.""" + from livekit.agents import llm + + @llm.function_tool + def calculate(expression: str) -> str: + """Evaluate a simple mathematical expression.""" + try: + allowed = set("0123456789+-*/().% ") + if not all(c in allowed for c in expression): + return "Sorry, I can only handle basic math with numbers and operators (+, -, *, /, %)" + result = eval(expression) + return f"The result of {expression} is {result}" + except Exception as e: + return f"I couldn't calculate that: {str(e)}" + + # Test basic operations + result = calculate("2 + 2") + assert "4" in result + + result = calculate("10 * 5") + assert "50" in result + + result = calculate("100 / 4") + assert "25" in result + + # Test invalid input + result = calculate("rm -rf /") + assert "Sorry" in result or "basic math" in result + + print("✓ calculate tool works correctly") + + +def test_get_weather(): + """Test the get_weather tool.""" + from livekit.agents import llm + + @llm.function_tool + def get_weather(city: str) -> str: + """Get the current weather for a city (mock implementation).""" + mock_weather = { + "san francisco": "65°F, partly cloudy with a chance of fog", + "new york": "72°F, sunny with light breeze", + "london": "58°F, overcast with light rain", + "tokyo": "78°F, clear skies", + } + + city_lower = city.lower() + if city_lower in mock_weather: + return f"The weather in {city} is currently {mock_weather[city_lower]}" + else: + return f"I don't have weather data for {city}, but it's probably lovely there!" + + # Test known cities + result = get_weather("San Francisco") + assert "65°F" in result + + result = get_weather("New York") + assert "72°F" in result + + # Test unknown city + result = get_weather("Unknown City") + assert "lovely" in result + + print("✓ get_weather tool works correctly") + + +def test_tool_decorator(): + """Test that the function_tool decorator works correctly.""" + from livekit.agents import llm + from typing import Annotated + + @llm.function_tool + def sample_tool( + name: Annotated[str, "The user's name"], + greeting: Annotated[str, "A greeting to use"] = "Hello" + ) -> str: + """A sample tool for testing.""" + return f"{greeting}, {name}!" + + # Call the tool + result = sample_tool("World") + assert "World" in result + + result = sample_tool("Developer", "Hi") + assert "Hi" in result and "Developer" in result + + print("✓ function_tool decorator works correctly") + + +def run_tests(): + """Run all unit tests.""" + print("=" * 60) + print("Running Function Tools Unit Tests") + print("=" * 60) + print() + + test_get_current_time() + test_calculate() + test_get_weather() + test_tool_decorator() + + print() + print("=" * 60) + print("All unit tests passed! ✓") + print("=" * 60) + + +if __name__ == "__main__": + run_tests() From fc9ba61edeebd3d4dad16a634943c9bd0ef56def Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 15 Apr 2026 08:40:00 +0000 Subject: [PATCH 2/3] docs: add 540 livekit example to index --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bb9e7c1..f33450d 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ A collection of working examples showing how to use Deepgram SDKs with popular p | [500](examples/500-semantic-kernel-voice-plugin-dotnet/) | Semantic Kernel Voice Plugin with Deepgram (.NET) | JavaScript | Semantic Kernel | | [510](examples/510-gin-live-transcription-go/) | Gin Real-Time WebSocket Transcription Server | Go | Gin | | [520](examples/520-node-deepgram-proxy/) | Deepgram Proxy Server (Node.js) | Node.js | Deepgram SDK | +| [540](examples/540-livekit-agents-python/) | LiveKit Agents with Deepgram STT/TTS | Python | LiveKit | ## CI / testing From fc2de29359c95b088dec12f9895cd104aa1a8db3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 15 Apr 2026 08:49:11 +0000 Subject: [PATCH 3/3] chore(examples): remove python bytecode from livekit example --- .../src/__pycache__/agent.cpython-312.pyc | Bin 4527 -> 0 bytes .../__pycache__/agent_with_tools.cpython-312.pyc | Bin 7594 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 examples/540-livekit-agents-python/src/__pycache__/agent.cpython-312.pyc delete mode 100644 examples/540-livekit-agents-python/src/__pycache__/agent_with_tools.cpython-312.pyc diff --git a/examples/540-livekit-agents-python/src/__pycache__/agent.cpython-312.pyc b/examples/540-livekit-agents-python/src/__pycache__/agent.cpython-312.pyc deleted file mode 100644 index 4c0cccfb606bf558c287523e7931f3f77c3ed2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4527 zcmai1Z)_CD6`%cccYAw(u#JPUO~{Zoz~S6EA!*atfMbjUt}#K_q{*q#cD*}yUVHys zX7@06F_PPm1{x|zrIu7tq<*NXAgIz-t=f+vsnkmSaui268>*^m6t&-+*by|J`eyI; z&QO%DeKWH&Z{C}E^M1d1`Vu$AK5U#I)IVKq=#b`85YAZKxCEwJO_0_Z36 z4xPgVhhj=pGwT@^0d1C5whb*%2h*BsIpUm9vyTPRZix_WChIv_kDT=IPFQAUz36b6 zs(~OIW@7aTcqinL@qZZ*UgZcg3X2=)niwr%MCwxiEv;x z8Ma!r9@ph7iBR@R^0HVT<4^@(`~4xoXr7&{~ZUJ9~U`iebibbYl9F2}a8h<$k0%*xJ{f9Cdc-ObkSkM?5&fjWNUW?iFzR}qFL)lH)ikY4%#XNb5cVZS0ehc3v4g$q2`|i-k_ToNDFJlw ztTUafb`J-c1zc{F@lha39mg8LM*xeFK++dkPqp(XlhKS4+=DRLu!%l^t49t&*gD(r z*bWOz7^tIef^O$C_&6vEbfd6M;B&wK7!gt1k$6+6EaDu3g|LSQukQ$ZYfq z2sS8R&m{b)=@g4VEuvw=E_Z?Be37Bdj{%L^MDr-S7X$PF3$b1Lo%1Si5J)Sf)`olu zSlspuui^`?TFHoX2h$aUYbD4?;>`{DiFMOlh7)#y1xWQ}P(dq!)9Ke?WC(ul2T=Tr z@z2Mi{Ob63$7>yZZ;!ll=+dEgCN539JydHOToU)JL{TDrzVB?`YuOuOS553%i=qv^ zui1+Sq0#=p^)|dX#$-CqXU}Gr(_PD{w)4-OeQqU!5}Q|%kci$wLL|Bp6iL**<;Lbm zu5Etg`sUp?I(9FP-wZ8p|Jh47b_`zIF<9Har`EQ2N!(Xg3WjT&3fJZ04Y61gi{VP! z_I>~oeJHZ|_DTonzrB(~8y~y9BB96(_l0{1cJ{qtH1a5SmFGq>;#J`rtUbt$^odvZ zbV2*Qjoe69e6Mo=+V7{ik$&<04ZW=0$FVXSl>MyKKv(l&xejBd)kWYe_)LJjtjM1N zemQ{7a~fYn8vg=tC$I&h$>5o7+OXmx7~^8bu*hN2KM6*pcjB$U{%emO^+^cZ^B2$TSB-J4xQU5qID8dYh+z- z{GPq?J$n-Oz;Q{I&z5qel-O8=g>xkB%whqtE;4XO4~@86FGYtNo*tI*=Sq7=SN;HzhBY z4VEXuSAjtt+X7?w1Y~3Cv`Jjx8UA5heONwf5)~3Wmv{l86&&E6c{U%G7qCwb=3_{D z$Uv3HxSHO}dX+g+QDz_wt!Ct56EZGhyO6gu`A`GH4E(AI*&$2Sh&NE(h4JCBXGh1! zrj+By4)2|J-GTmorY)WVl5K3bZdWZC%y#vwcaBevjvO1EYKgc6 zR^YLZqjZZvl!C2gB%gO&KUyU0Ysrt4DA2htGV-M?yZ2+XY%8!H%Az-*9QbBQX)L+a zR8s*5LJkI{AG7L?b{VXid?i|Nu5<*tz70S3H&84hV1!LOYndl&odb&#A8zftp5Fgc z>w^2+-M@eG*H8Xo@^|}w;J#rk9;~JJ|09-$oT}C~^se})_|^EIcU*t!SZ!#smY!OY zjU-X&?@M;m+2jNDANU)X=ay+GdBSL@jIL9%Z}K%KoGGns)UX)q9OHgZc+f6(*z zlJvD@DgCh+W5jt=y6Q8Nc2CS^`Z?UoXg_;Y|s8d@#i8GECXZPf>f%L zJ_JK_5DGuWE((YgKU)9vq|6b1Iy}eVqH`&u^ZJd!D5&n$z|k8*!ID`9HExi>*7Mdl zoX+9k7NUJ@Qjo4O_75COSq6Fu)iX23}=29qD1diiA9OP>{>-oeKv3(7hQP-iODn7zY5(Siqb1jgZIUrU`_u8yQ+~j diff --git a/examples/540-livekit-agents-python/src/__pycache__/agent_with_tools.cpython-312.pyc b/examples/540-livekit-agents-python/src/__pycache__/agent_with_tools.cpython-312.pyc deleted file mode 100644 index e062bb2a9036a0c11d86902a2d7bbd878ebc0b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7594 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