Merge pull request #32 from livekit-examples/kat/dpro-563-upgrade-python-example-to-agents-13
1.3 update
This commit is contained in:
@@ -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
@@ -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
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user