blue-ability-56213
12/25/2025, 2:33 PMtall-airline-16756
12/25/2025, 2:33 PMtall-airline-16756
12/25/2025, 2:33 PMParticipantKind.AGENT via the AgentSession when you call session.start().
• The avatar worker (the plugin) joins as a separate participant also with ParticipantKind.AGENT when you call avatar.start(session, room=...) (for Bey: bey.AvatarSession).
• The frontend can distinguish the original agent vs. the avatar worker using the lk.publish_on_behalf attribute:
◦ Agent: p.attributes['lk.publish_on_behalf'] === null
◦ Avatar worker: p.attributes['lk.publish_on_behalf'] === <agent_identity>
If you want, tell me:
• which plugin you’re using (Bey / Tavus / etc.), and
• whether you’re starting sessions from the server SDK or a specific example file —
and I’ll give the exact code snippet to use.
Sources: livekit/livekit_composite | DeepWiki | Beyond Presence virtual avatar integration guide | LiveKit docs | Virtual avatar plugins | LiveKit Docs | examples/avatar_agents | livekit/livekit_composite | DeepWikiblue-ability-56213
12/25/2025, 2:34 PMtall-airline-16756
12/25/2025, 2:34 PMAvatarSession / avatar.start(...) and session.start(...) (redact secrets).
3. In the room, what do you observe for the avatar participant’s properties? Please paste the values for:
◦ p.kind
◦ p.identity
◦ p.attributes['lk.publish_on_behalf']
◦ p.name (if set)
1. Are you seeing separate participants for the agent and the avatar worker, or just one participant?
2. Any custom room options or attribute overrides when creating the avatar session?
While you gather that, check these quick items:
• Confirm you called await avatar.start(session, room=ctx.room) (or equivalent) before/while starting the agent session.
• Ensure the avatar library version matches the AgentSession version — mismatched versions can change behavior.
• Verify the frontend is reading p.kind using the SDK enum (not a string compare mismatch).
Reply with the SDK/version, your start code, and the participant property outputs and I’ll point out exactly what’s wrong and the minimal fix.blue-ability-56213
12/25/2025, 2:38 PMtall-airline-16756
12/25/2025, 2:39 PMkind is standard while lk.publish_on_behalf is set to the agent identity.
That mismatch explains why it’s being treated as a human. Let’s pinpoint the cause quickly — please provide the following so I can give an exact fix:
1. SDKs & versions:
◦ Server SDK language/version (Python or Node and version).
◦ Frontend SDK language/version (JS/TS and version).
1. The exact code snippets you call to start the avatar and agent (redact keys/secrets). Specifically the lines where you create/start:
◦ AvatarSession(...) and await avatar.start(...)
◦ AgentSession(...) and await session.start(...)
1. The order you call those start functions (avatar before agent, after, or concurrently).
2. The avatar plugin package/version (Beyond Presence / bey package version).
3. The full participant object for the avatar (paste JSON of p or the fields: identity, name, kind, and full attributes).
Quick checks you can do now:
• Confirm you’re using matching versions of the avatar plugin and AgentSession; version mismatch can leave kind as standard.
• Ensure the server-side AvatarSession is the one creating the participant (not a separate flow that creates a standard participant).
• If you start the avatar from frontend code instead of via the plugin’s avatar.start(session, room=...), it may join as standard.
Send the items above and I’ll tell you the minimal code change to make the avatar participant AGENT.blue-ability-56213
12/25/2025, 2:40 PMtall-airline-16756
12/25/2025, 2:41 PMkind: "standard" despite lk.publish_on_behalf being set.
The Bey plugin should create the avatar worker as AGENT automatically and you don’t manually set kind. Given your snippet, the most likely causes are version mismatch or the avatar joining via a different flow. Please check/provide the following so I can give the exact minimal fix:
1. Versions
◦ Server SDK language/version (Node) and livekit-server-sdk version.
◦ livekit-plugins-bey package version.
◦ Frontend SDK version (livekit-client).
1. Confirm call order
◦ You call await session.start({...}) first, then await avatar.start(session, ctx.room) — please confirm.
1. Full participant object for the avatar (paste JSON): identity, name, kind, and attributes.
Quick things to try now
• Upgrade livekit-plugins-bey to a recent version (≥1.3). Older Bey versions may not set kind correctly.
• Ensure the avatar is started from your server/plugin code (not from frontend) so the plugin creates the worker participant.
• If you customized avatar_participant_identity or room participant creation elsewhere, revert that to test default behavior.
Send the versions and the avatar participant JSON and I’ll tell you the exact code change or upgrade step to make it appear as AGENT.
Sources: Virtual avatar plugins | LiveKit Docs | Beyond Presence virtual avatar integration guide | LiveKit docsblue-ability-56213
12/25/2025, 2:41 PMtall-airline-16756
12/25/2025, 2:42 PMkind: AGENT. If you’re seeing kind: STANDARD, that indicates the avatar worker was created/connected via a different flow or a version mismatch/bug.
Please provide the following so I can pinpoint the issue and give the minimal fix:
1. Versions
◦ livekit-plugins-bey version
◦ Server SDK and version (Node)
◦ Frontend livekit-client version
1. Exact call order (confirm you run await session.start(...) then await avatar.start(session, ctx.room)).
2. Full avatar participant JSON (or at least identity, name, kind, and attributes).
3. Any customization you set on AvatarSession (e.g., avatar_participant_identity) or code that creates LiveKit tokens for participants.
Quick checks you can run now:
• Upgrade livekit-plugins-bey to the latest stable (older Bey versions may not set kind).
• Ensure the avatar is started from the plugin/server process (not manually connecting from frontend with your own token).
• Search your codebase for any place that creates a LiveKit participant/token for the avatar identity — if you create a token and connect as that identity, it will be STANDARD.
Send the versions and the participant JSON and I’ll tell you the exact change (or patch) to make the avatar join as AGENT.
Sources: Virtual avatar plugins | LiveKit Docs