microscopic-gold-81132
03/09/2026, 7:28 PM@self.room.on("participant_disconnected")
Is this the old syntax? Is there some new syntax to hook up room events in newer LiveKit agents version? Can you give me an example if yes?tall-airline-16756
03/09/2026, 7:28 PMtall-airline-16756
03/09/2026, 7:29 PM@self.room.on("participant_disconnected") is old syntax and if there’s a newer way to hook room events in recent LiveKit agents. Short answer: that decorator-style listener is still valid, and you can also use the RoomEvent enum for safer, less typo-prone code.
Here are two clear Python examples you can use:
1) Using the string event name (works and is common)
@self.room.on("participant_disconnected")
def on_participant_disconnected(self, participant):
print(f"Participant {participant.identity} disconnected")
2) Using the RoomEvent enum (recommended for type-safety)
from livekit import rtc
@self.room.on(rtc.RoomEvent.PARTICIPANT_DISCONNECTED)
def on_participant_disconnected(self, participant):
print(f"Participant {participant.identity} disconnected")
A couple of practical notes:
• Event names are case-sensitive — ensure exact spelling if you use strings.
• Register your listeners before calling connect() so you don’t miss events.
If you tell me which LiveKit SDK version or agent library you’re using (Python package name/version or repository), I can show an exact minimal example that matches your environment.
Sources: client-sdk-js | livekit/livekit_composite | DeepWikimicroscopic-gold-81132
03/09/2026, 7:31 PMtall-airline-16756
03/09/2026, 7:31 PMconnect() (or before initiating the room connection). Doing so ensures you don’t miss any events that may fire immediately when the connection completes.
Why register listeners early:
• Some events (like participants joining/disconnecting, track added, or initial state events) can occur as soon as the connection is established. If your handlers aren’t registered yet, those events can be missed.
• Registering first produces deterministic behavior: you know every relevant event will be delivered to your handlers from the moment the client becomes active.
How to do it safely (Python example):
1. Create the Room / agent instance.
2. Register event handlers on that instance.
3. Call connect() to join the room.
Example:
# 1. create room (or agent)
room = Room(...)
# 2. register handlers before connecting
@room.on("participant_disconnected")
def on_participant_disconnected(participant):
print(f"Participant {participant.identity} disconnected")
@room.on(rtc.RoomEvent.PARTICIPANT_CONNECTED)
def on_participant_connected(participant):
print(f"Participant {participant.identity} connected")
# 3. now connect (or call room.connect(...))
await room.connect(url, token)
A couple more practical tips:
• If you need to attach handlers after connect (for dynamic behavior), that’s allowed — but understand you may not receive earlier events.
• If you must add listeners later and want missed state, call APIs that fetch current room state (like listing participants) after connecting and handle that snapshot in addition to event handlers.
If you’d like, tell me which SDK and version you’re using and I’ll give a minimal example tailored to that environment.microscopic-gold-81132
03/09/2026, 7:35 PMtall-airline-16756
03/09/2026, 7:35 PMRoomEvent is not available in livekit-agents==1.3.12. In that version you should register listeners using string event names on the Room object and not the RoomEvent enum.
What to do
• Use string event names (case-sensitive) such as "participant_disconnected".
• Register your listeners before calling connect() so you don’t miss events.
• If you want the RoomEvent enum, upgrade to a newer SDK or use the standalone livekit-client package that includes it.
Example that works for livekit-agents==1.3.12
room = Room(...)
@room.on("participant_disconnected")
def on_participant_disconnected(participant):
print(f"Participant {participant.identity} disconnected")
# register other handlers here...
await room.connect(url, token)
If you prefer an enum-style approach, tell me whether you can upgrade your package and I’ll provide the exact version to move to and a matching example. If upgrading isn’t possible, I can help you audit your current handlers to ensure they’re registered early and receiving events correctly.
Sources: client-sdk-js | livekit/livekit_composite | DeepWiki | client-sdk-flutter | livekit/livekit_composite | DeepWiki | Company directory phone assistant | LiveKit Documentationmicroscopic-gold-81132
03/09/2026, 7:44 PMtall-airline-16756
03/09/2026, 7:45 PMRoomEvent enum is not available; you must use string event names (e.g., "participant_disconnected"). If you want RoomEvent, you need a newer client SDK.
Could you answer these four short questions?
1. Which SDK/package and language are you using right now? (e.g., livekit-agents==1.3.12 in Python, or livekit-client in JS/TS)
2. Do you specifically need the RoomEvent enum (typed events), or do you just want a newer SDK for other features/bugfixes?
3. Can you upgrade packages in your environment, or do you have constraints (pinned deps, OS, company policy)?
4. If you’re on Python, are you able to switch from livekit-agents to the standalone livekit-client, or must you remain on livekit-agents?
If you can upgrade and you want RoomEvent in JS/TS, update to livekit-client v2.17.2 or later. If you reply with your answers above (especially which language/package), I’ll give a precise upgrade recommendation and a matching example you can drop into your project.
Sources: Client SDKs | livekit/livekit_composite | DeepWiki | client-sdk-js | livekit/livekit_composite | DeepWiki