Merge pull request #32 from livekit-examples/kat/dpro-563-upgrade-python-example-to-agents-13

1.3 update
This commit is contained in:
Kat Ahn
2025-11-17 09:24:21 -08:00
committed by GitHub
3 changed files with 20 additions and 26 deletions
+1 -1
View File
@@ -139,4 +139,4 @@ You can also self-host LiveKit instead of using LiveKit Cloud. See the [self-hos
## License ## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
+1 -1
View File
@@ -9,7 +9,7 @@ description = "Simple voice AI assistant built with LiveKit Agents for Python"
requires-python = ">=3.9" requires-python = ">=3.9"
dependencies = [ dependencies = [
"livekit-agents[silero,turn-detector]~=1.2", "livekit-agents[silero,turn-detector]~=1.3",
"livekit-plugins-noise-cancellation~=0.2", "livekit-plugins-noise-cancellation~=0.2",
"python-dotenv", "python-dotenv",
] ]
+18 -24
View File
@@ -1,17 +1,16 @@
import logging import logging
from dotenv import load_dotenv from dotenv import load_dotenv
from livekit import rtc
from livekit.agents import ( from livekit.agents import (
Agent, Agent,
AgentServer,
AgentSession, AgentSession,
JobContext, JobContext,
JobProcess, JobProcess,
MetricsCollectedEvent,
RoomInputOptions,
WorkerOptions,
cli, cli,
inference, inference,
metrics, room_io,
) )
from livekit.plugins import noise_cancellation, silero from livekit.plugins import noise_cancellation, silero
from livekit.plugins.turn_detector.multilingual import MultilingualModel from livekit.plugins.turn_detector.multilingual import MultilingualModel
@@ -48,11 +47,18 @@ class Assistant(Agent):
# return "sunny with a temperature of 70 degrees." # return "sunny with a temperature of 70 degrees."
server = AgentServer()
def prewarm(proc: JobProcess): def prewarm(proc: JobProcess):
proc.userdata["vad"] = silero.VAD.load() proc.userdata["vad"] = silero.VAD.load()
async def entrypoint(ctx: JobContext): server.setup_fnc = prewarm
@server.rtc_session()
async def my_agent(ctx: JobContext):
# Logging setup # Logging setup
# Add any other context you want in all log entries here # Add any other context you want in all log entries here
ctx.log_context_fields = { ctx.log_context_fields = {
@@ -91,21 +97,6 @@ async def entrypoint(ctx: JobContext):
# llm=openai.realtime.RealtimeModel(voice="marin") # llm=openai.realtime.RealtimeModel(voice="marin")
# ) # )
# Metrics collection, to measure pipeline performance
# For more information, see https://docs.livekit.io/agents/build/metrics/
usage_collector = metrics.UsageCollector()
@session.on("metrics_collected")
def _on_metrics_collected(ev: MetricsCollectedEvent):
metrics.log_metrics(ev.metrics)
usage_collector.collect(ev.metrics)
async def log_usage():
summary = usage_collector.get_summary()
logger.info(f"Usage: {summary}")
ctx.add_shutdown_callback(log_usage)
# # Add a virtual avatar to the session, if desired # # Add a virtual avatar to the session, if desired
# # For other providers, see https://docs.livekit.io/agents/models/avatar/ # # For other providers, see https://docs.livekit.io/agents/models/avatar/
# avatar = hedra.AvatarSession( # avatar = hedra.AvatarSession(
@@ -118,9 +109,12 @@ async def entrypoint(ctx: JobContext):
await session.start( await session.start(
agent=Assistant(), agent=Assistant(),
room=ctx.room, room=ctx.room,
room_input_options=RoomInputOptions( room_options=room_io.RoomOptions(
# For telephony applications, use `BVCTelephony` for best results audio_input=room_io.AudioInputOptions(
noise_cancellation=noise_cancellation.BVC(), noise_cancellation=lambda params: noise_cancellation.BVCTelephony()
if params.participant.kind == rtc.ParticipantKind.PARTICIPANT_KIND_SIP
else noise_cancellation.BVC(),
),
), ),
) )
@@ -129,4 +123,4 @@ async def entrypoint(ctx: JobContext):
if __name__ == "__main__": if __name__ == "__main__":
cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint, prewarm_fnc=prewarm)) cli.run_app(server)