Skip to main content
LiveKit Agents is an open-source Python framework for realtime voice agents. The Lokutor plugin, livekit-plugins-lokutor, is part of the livekit/agents repository (merged on 2026-11-12 in livekit/agents#7256). It adds two services to an AgentSession:
  • lokutor.STT: Conv 2.0 speech to text, streaming over /ws/stt.
  • lokutor.TTS: Versa 2.0 text to speech, streaming over /ws/tts.
Both cover English, Spanish, Catalan, Galician, Basque, Portuguese, French, Italian and German. LiveKit runs the LLM, turn-taking and the room; Lokutor hears the user and speaks the replies.

Installation

The plugin is published to PyPI with the first LiveKit Agents release after 1.8.11. Until that release, install it from GitHub:
GIT_LFS_SKIP_SMUDGE=1 skips the example media files that the LiveKit repository keeps in Git LFS; without it the clone can fail.

Authentication

Create an API key in the dashboard and set it as LOKUTOR_API_KEY, or pass api_key= to lokutor.STT and lokutor.TTS.

A voice agent

This example also needs pip install "livekit-agents[openai,silero]~=1.8" python-dotenv and an OPENAI_API_KEY; any LiveKit LLM plugin works in its place. Run python agent.py console to talk to the agent in your terminal, or python agent.py dev to connect it to a LiveKit server (LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET). Keep language the same on both services: it chooses how the recogniser writes the text and which native speaker the voice slot uses.

Speech to text

  • Streaming: interim transcripts while the user speaks, then a final transcript when the utterance ends, after about 0.7 s without speech (how utterances end). The text comes back written out, with punctuation, casing and digits.
  • Audio: frames at any sample rate; the plugin resamples to the 16 kHz the API takes.
  • One clip: await stt.recognize(frames) transcribes a list of rtc.AudioFrame with one POST /stt/transcribe request.
  • Not exposed: custom vocabulary (keyterms) and word timings.

Text to speech

  • Audio: 16-bit PCM, 44.1 kHz, mono. LiveKit resamples it if the room needs another rate.
  • Sentences: the first sentence is sent as soon as the tokenizer completes it, so the agent starts speaking before the LLM has finished the reply.
  • Pronunciation: your account’s default pronunciation dictionary applies to every sentence.
  • Server defaults: temperature (0.3) and the other /ws/tts fields the plugin does not send keep their defaults.

Outside an agent

Inside an agent job, LiveKit supplies the HTTP session. In a script or a test, pass your own:

Concurrency and billing

  • Two sessions per agent. While an AgentSession runs it holds one /ws/stt stream and one /ws/tts socket, and each counts as one of your account’s concurrent sessions (Limits): 3 before the first top-up, 10 after. An account carries one LiveKit agent at a time before its first top-up and five after; past that, the next connection is refused (429 / auth.rate_limited). Higher limits on request.
  • Billing. The same prices as calling the API directly, from your prepaid balance: speech to text per minute of audio, text to speech per million characters (rate card). The LLM and LiveKit itself are billed by their providers.

When to use Lokutor’s own agent instead

The plugin brings Lokutor’s voices and recognition into a LiveKit pipeline. To run the whole conversation on Lokutor (LLM, turn-taking, tools, phone numbers, call recording), use a Lokutor agent and the Voice Agent API instead.

Resources