- Realtime: the agent’s reply streams to Finesse as the LLM writes it, so speech starts before the reply is finished.
- Interruptions: when the user talks over the agent, the reply is cancelled on the Finesse server straight away.
- Telephony: 8 kHz audio for phone calls, or up to 48 kHz for everything else.
npm
@flamai/livekit-plugin-finesse, for Node 20+ and @livekit/agents 1.9+.Source on GitHub
homingos/livekit-finesse, Apache-2.0.The plugin is for Node.js. Python support for LiveKit Agents is coming soon.
Install
Add it to your agent
Settts on your AgentSession to a Finesse TTS with the id of a ready voice:
agent.ts
tsx agent.ts dev and talk to it in the
Agents Playground. Already have an agent? The only change is
the tts line.
To find a voice id, copy one from Voices in the dashboard, or call
List voices. Cloned voices work like any other. See Voices.
Options
updateOptions() changes the voice, language or synthesis settings from the agent’s next reply:
Phone calls
For SIP and telephony agents, ask for 8 kHz so the audio goes to the call without resampling:Connections and limits
Replies share a pool of WebSocket connections, so only the first reply pays to connect. Calltts.prewarm() when the agent starts to open one early. Each open connection holds one of your
plan’s concurrent streams: see Rate limits.
Errors
Errors are LiveKit’sAPIStatusError, APIConnectionError and APITimeoutError, so they work with
AgentSession error events and LiveKit’s fallback adapter. Errors that can’t succeed on a retry are
marked retryable: false.
See Errors for every code. The plugin streams over the
Realtime WebSocket, so everything there applies.

