Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added explicit agent dispatch example #311

Merged
merged 3 commits into from
Nov 22, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions examples/agent_dispatch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import asyncio
import os
import aiohttp
from livekit.protocol.room import RoomConfiguration
from livekit.protocol.agent_dispatch import (
RoomAgentDispatch,
CreateAgentDispatchRequest,
)
from livekit.api import AccessToken, VideoGrants
from livekit.api.agent_dispatch_service import AgentDispatchService


room_name = "my-room"
agent_name = "test-agent"

"""
This example demonstrates how to have an agent join a room
without using the automatic dispatch. In order to use this
feature, you must have an agent running with `agent_name` set
when defining your WorkerOptions. A dispatch requests the
agent to enter a specific room with optional metadata.
"""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

link to the docs you wrote too

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the docs is still not published as DZ is taking it over and creating a dedicated docs page for dispatching. will link to it once that is out



async def create_explicit_disptach(http_session: aiohttp.ClientSession):
agent_disptach_service = AgentDispatchService(
session=http_session,
url=os.getenv("LIVEKIT_URL"),
api_key=os.getenv("LIVEKIT_API_KEY"),
api_secret=os.getenv("LIVEKIT_API_SECRET"),
)
dispatch_request = CreateAgentDispatchRequest(
agent_name=agent_name, room=room_name, metadata="my_metadata"
)
dispatch = await agent_disptach_service.create_dispatch(dispatch_request)
print("created dispatch", dispatch)
dispatches = await agent_disptach_service.list_dispatch(room_name=room_name)
print(f"there are {len(dispatches)} dispatches in {room_name}")


"""
When agent name is set, the agent will no longer be automatically dispatched
to new rooms. If you want that agent to be dispatched to a new room as soon as
the participant connects, you can set the RoomConfiguration with the agent
definition in the access token.
"""


async def create_token_with_agent_dispatch() -> str:
token = (
AccessToken()
.with_identity("my_participant")
.with_grants(VideoGrants(room_join=True, room=room_name))
.with_room_config(
RoomConfiguration(
agents=[
RoomAgentDispatch(agent_name="test-agent", metadata="my_metadata")
],
),
)
.to_jwt()
)
return token


async def main():
async with aiohttp.ClientSession() as http_session:
token = await create_token_with_agent_dispatch()
print("created participant token", token)
print("creating explicit dispatch")
await create_explicit_disptach(http_session)


asyncio.run(main())
Loading