Created
January 28, 2025 20:41
-
-
Save ShayneP/ef947e4d2a72e4920aeca065f755db12 to your computer and use it in GitHub Desktop.
LiveKit, DeepSeek, and Groq
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import asyncio | |
import logging | |
import os | |
import aiohttp | |
from typing import Annotated | |
from dotenv import load_dotenv | |
from livekit import rtc | |
from livekit.agents import ( | |
AutoSubscribe, | |
JobContext, | |
JobProcess, | |
WorkerOptions, | |
cli, | |
llm, | |
metrics, | |
) | |
from livekit.agents.pipeline import VoicePipelineAgent | |
from livekit.plugins import deepgram, openai, silero, cartesia | |
from weather_utils import WeatherFunctionsMixin | |
load_dotenv() | |
logger = logging.getLogger("voice-assistant") | |
def prewarm(proc: JobProcess): | |
proc.userdata["vad"] = silero.VAD.load() | |
async def entrypoint(ctx: JobContext): | |
initial_ctx = llm.ChatContext().append( | |
role="system", | |
text=( | |
"You are a voice assistant created by LiveKit. Your interface with users will be voice. " | |
"You should use short and concise responses, and avoiding usage of unpronouncable punctuation." | |
), | |
) | |
logger.info(f"connecting to room {ctx.room.name}") | |
await ctx.connect(auto_subscribe=AutoSubscribe.AUDIO_ONLY) | |
# wait for the first participant to connect | |
participant = await ctx.wait_for_participant() | |
logger.info(f"starting voice assistant for participant {participant.identity}") | |
agent = VoicePipelineAgent( | |
vad=ctx.proc.userdata["vad"], | |
stt=deepgram.STT(), | |
llm=openai.LLM.with_groq(model="deepseek-r1-distill-llama-70b"), | |
tts=cartesia.TTS(), | |
chat_ctx=initial_ctx | |
) | |
agent.start(ctx.room, participant) | |
usage_collector = metrics.UsageCollector() | |
@agent.on("metrics_collected") | |
def _on_metrics_collected(mtrcs: metrics.AgentMetrics): | |
metrics.log_metrics(mtrcs) | |
usage_collector.collect(mtrcs) | |
async def log_usage(): | |
summary = usage_collector.get_summary() | |
logger.info(f"Usage: ${summary}") | |
ctx.add_shutdown_callback(log_usage) | |
if __name__ == "__main__": | |
cli.run_app( | |
WorkerOptions( | |
entrypoint_fnc=entrypoint, | |
prewarm_fnc=prewarm, | |
), | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment