Hi Sahiti,
LiveKit Inference on self-hosted? Is Inference available for self-hosted servers, or does that require LiveKit Cloud / a LiveKit account? If self-hosted, we’d use our own Deepgram/AssemblyAI/OpenAI API keys directly via the agent plugin — just want to confirm Inference isn’t a prerequisite.
LiveKit Inference is not available for self-hosted LiveKit servers and you would need to use your own API keys directly via the agent plugins. The nuance comes with customers who choose to use LiveKit cloud and self-host their own agents, and in that scenario LiveKit Inference IS available, however you are not in that category.
Agent hosting/ops on self-hosted. We know Cloud Agent isn’t an option — we’d run the agent process ourselves. Any recommended deployment pattern? One long-lived agent process that accepts dispatch for any room (worker pool), or one agent per room? And is there a documented token/API setup for a self-hosted agent joining rooms (access token + server URL + a dedicated participant name)?
The documentation for self-hosted agent deployments is here: Self-hosted deployments | LiveKit Documentation and is the same regardless of whether you are using LiveKit cloud for media, or self-hosting LiveKit. Just avoid burstable instance types.
Dispatch wiring on self-hosted. Do we configure an agent-dispatch webhook ourselves on the self-hosted server, and does the standard RoomServiceClient / createDispatchToken flow in livekit-server-sdk@2.14.2 work as-is? Also — is there a minimum server version required for lk.transcription text streams to reach clients (since publishTranscription is deprecated)?
The deployment logic along with token flow is the same for both LiveKit Cloud and self-hosted since that’s all open source. Agent dispatch | LiveKit Documentation
I’m not sure what the minimum server version is for lk.transcription, but it will work with the latest release (or, it should do).
Scale of the multi-user pattern. The multi-user-transcriber.py example spins one AgentSession per remote participant. With 10–20 participants that’s N concurrent STT streams and the agent subscribing to all audio tracks — fine on a self-hosted agent, or is there a ceiling where a single agent per room starts to struggle? Any way to share one STT session with diarization instead?
We have software we use to host meetings internally with agent transcription that can handle that many participants (and more)
That’s a good question about diarization, I suspect the accuracy of transcriptions for that many participants would struggle, so I would recommend the one user per track approach.
Our docs AI hallucinated the following, but I was happy to see he agreed with me
“One important caveat: accuracy generally drops as simultaneous speakers increase, especially with overlap/crosstalk. The docs describe primary-speaker detection as RMS/loudness based, so in crowded conversations the “active speaker” can shift rapidly. For meetings with many participants, separate audio tracks per participant usually produce better results than diarizing a single mixed room feed.”
Persisted transcripts. You suggested accumulating finalized turns and writing them to our backend in a shutdown callback. Our stack already has a Next.js /api/save-transcript endpoint (Redis + JSON storage). Is “agent HTTP-POSTs merged segments back to the Next.js API” the standard pattern, or does the Agents framework have any built-in persistence we should use instead?
Nothing built in for this. In general it is best to use the on_session_end callback for tidy up
Agent restarts / missed audio. If the agent dies mid-meeting and dispatch respawns it, do clients re-see earlier caption text (replay from lk.transcription history), or is the transcript lost from that gap?
The best resource for agent behaviour after restart is this blog from CWilson: Why Your Agent Leaves on Browser Refresh (and When to Keep It) | LiveKit