Integrations
August 14, 2026
The SLNG plugin for LiveKit Agents
LiveKit Agents is the open-source framework most teams reach for when building production voice agents. The SLNG plugin ships with it, and the latest release cuts hundreds of milliseconds off every turn. One install puts the execution layer between LiveKit and your models.

SLNG Team
Team

Keep your models. Keep your keys.
The plugin routes through the SLNG gateway. Your orchestrator stays the same. Your models stay the same. Your provider contracts stay the same.
SLNG sits in the middle and handles routing, smart caching, PII redaction, and regional compliance. Switching between Deepgram, Sarvam, Rime, Cartesia, and others is a model string change. Agent logic doesn't move.
Prerequisites:
- Python 3.10+
- livekit-agents>=1.6.10
- A LiveKit Agents project
- A SLNG API key
import os
from livekit.agents import AgentSession
from livekit.plugins import slng, silero
session = AgentSession(
stt=slng.STT(
api_key=os.environ["SLNG_API_KEY"],
model="deepgram/nova:3",
language="en",
),
tts=slng.TTS(
api_key=os.environ["SLNG_API_KEY"],
model="deepgram/aura:2",
voice="aura-2-thalia-en",
),
vad=silero.VAD.load(),
)
Swap model="sarvam/bulbul:v3" for Sarvam Bulbul TTS, or model="slng/deepgram/nova:3-multi" for multilingual Nova-3.
Full catalog in the docs.
Faster turns
Two opt-ins, one line each.
The agent starts speaking sooner.
tts = slng.TTS(
api_key=os.environ["SLNG_API_KEY"],
model="deepgram/aura:2",
voice="aura-2-thalia-en",
warm_standby_enabled=True,
)
The plugin opens the next connection while the current reply is still playing, so first audio arrives at the model's raw generation speed instead of waiting on connection setup. In our tests that meant first audio in as little as ~120ms in our own testings, down from 800ms+.
The agent hears the end of a turn sooner.
stt = slng.STT(`
api_key=os.environ["SLNG_API_KEY"],
model="deepgram/nova:3",
)
stt.attach_to_session(session)
The plugin tells the STT model exactly when the user stopped talking. The model no longer works it out on its own, so the transcript closes several hundred milliseconds sooner. Verified in production.
Smoother audio, nothing to configure.
Text is grouped into natural phrases before synthesis. On by default. No more word-by-word delivery from providers that stream token by token.
BYOK: Bring your own provider key
Already have a contract with Deepgram, ElevenLabs, or Cartesia? Bring your own key. Pass provider_api_key and the plugin sends it upstream as the X-Slng-Provider-Key header.
tts = slng.TTS(`
model="cartesia/sonic:3",
voice="your-voice-id",
provider_api_key="your-cartesia-key",
)
Smart caching on TTS means cache hits never reach your provider. That call costs you nothing. Cache misses pass through on your key as normal.
Early results from beta users: ~1/3 off TTS costs. Up to 80% less latency on cache hits. Works with Cartesia, Deepgram, Sarvam, Soniox, Kugel, and Murf. Full BYOK guide.
Regional compliance without the rewiring
If your agents run under data residency requirements like EU, UK, India, UAE, region_override pins traffic to the right gateway hub. Audio is processed in-region and stays there. No architecture changes or separate deployment needed.
tts = slng.TTS(
api_key=os.environ["SLNG_API_KEY"],
model="deepgram/aura:2",
voice="aura-2-thalia-en",
region_override=["eu-north-1", "us-east-1"],
)
11 sovereign hubs. ISO 27001 certified. HIPAA and GDPR compliant. Learn more about SLNG data security.
Failover that doesn't take your agent down
List backup models in priority order:
stt = slng.STT(
connections=[
"deepgram/nova:3",
"soniox/speech-ai:rt-v5",
],
)
If the primary fails, the plugin switches to the next candidate. For STT it replays the audio it had buffered, so nothing is lost mid-sentence. Traffic returns to the primary once it recovers.
Even with a single model configured, transient connection drops now recover in place instead of ending the stream. Optional watchdog timers cover stalled final transcripts and slow first audio.
Also included
- WebSocket streaming STT and TTS
- Connection pooling for TTS
- Interim transcription results
- Speaker diarization The plugin is open source: livekit/agents repo.
What the execution layer does on every call
A 16-turn voice call makes 48 model calls. STT, LLM, and TTS on every turn. Without an execution layer each one runs from scratch, including the greeting, the consent disclosure, and the hold message your agent has already said thousands of times.
Three stages run per turn:
-
STT Performance. Input goes to the right transcription model for the language, accent, and region.
-
Context Router. The layer works out whether a turn needs full LLM reasoning or can be resolved through a shorter path. Most turns can.
-
TTS Optimization. Speech is assembled from cache and synthesis. What already exists isn't generated again.
All three run in-region across 11 sovereign hubs, with BYOK and automatic failover throughout.
The layer improves with volume. More calls means more cache coverage and better routing decisions, so cost per call falls as usage rises. You don't retrain anything.
Keep LiveKit. Keep your models. Keep your provider contracts. 53% less LLM cost, 39% less turn latency. Nothing else changes.
US$ 0.0033 / agent minute. 30+ STT and TTS models available as add-ons. No contracts. No minimums.
Read the docs.
Upgrading from an earlier version
pip install --upgrade livekit-plugins-slng
Version 1.6.7 is a breaking rewrite. What changed::
Routing goes through the unified bridge only. No dual implementation path.
You name the model. No default. Every STT and TTS instance needs an explicit model.
Failover moved from model_endpoints to connections.
Before:
stt = slng.STT(
model_endpoints=[
"wss://api.slng.ai/v1/stt/deepgram/nova:3",
"wss://api.slng.ai/v1/stt/slng/deepgram/nova:3-en",
],
)
After:
stt = slng.STT(
connections=[
"deepgram/nova:3",
"soniox/speech-ai:rt-v5",
],
)
Voice IDs and language codes pass to providers verbatim.
Language codes are no longer normalized. Send the value the model expects. Sarvam Bulbul takes BCP-47 codes such as hi-IN, not hi.
STT recognize() is gone. The bridge is WebSocket only, so use stream().
Provider-specific defaults were removed. Voice normalization and implicit fallbacks are gone.
Configure candidates explicitly via Provider-specific defaults were removed. Voice normalization and implicit fallbacks are gone. Configure candidates explicitly via connections.
api_token still works on STT but is deprecated. Use api_key.
Most migrations take a few minutes. Full step-by-step in the plugin docs.
Start routing your LiveKit agents through SLNG
- Get an API key
- Read the plugin docs for the full model catalog and configuration reference
- BYOK guide if you're bringing your own provider keys
- LiveKit Agents quickstart if you're new to the framework
FAQ: SLNG x LiveKit Integration
What is the SLNG plugin for LiveKit Agents?
The SLNG plugin connects LiveKit Agents to the SLNG voice AI gateway. It gives your agent access to every STT and TTS model in the SLNG catalog — Deepgram, ElevenLabs, Sarvam, Rime, Cartesia, and others — through a single integration. You install it with uv add livekit-plugins-slng and configure it like any other LiveKit plugin.
Does the SLNG plugin change how I write my agent logic?
No. Your agent logic stays the same. The plugin routes through the SLNG gateway at the model level — switching providers is a model string change, not a code change.
How do I switch between STT or TTS providers with the SLNG plugin?
Change the model parameter. For example, swap model="deepgram/nova:3" for model="deepgram/nova:3-multi" for multilingual STT, or model="sarvam/bulbul:v3" for Sarvam TTS. No other changes needed.
Does SLNG support data residency requirements in LiveKit agents?
Yes. Pass region_override on the STT or TTS class to pin traffic to a specific gateway hub — EU, UK, India, UAE, and others. Audio is processed in-region and stays there.
What happens if a model endpoint goes down?
List backup models in connections, in priority order. If the primary fails the plugin switches to the next one automatically, and for STT it replays the buffered audio so nothing is lost mid-sentence. Traffic returns to the primary once it recovers. No retry logic required on your side.
Is the SLNG LiveKit plugin open source?
Yes. The plugin is part of the official livekit/agents repo.
How do I reduce first-audio latency with the SLNG plugin?
Set warm_standby_enabled=True on the TTS class. The plugin prepares the next connection while the current reply is still playing, so time-to-first-audio drops to the model's raw generation speed. In our tests, first audio in as little as ~120ms, down from 800ms+.
Is the latest plugin release a breaking change?
Yes. Routing now goes exclusively through the unified bridge, a model must be specified explicitly, failover moved from model_endpoints to connections, and voice IDs and language codes pass to providers verbatim. Most integrations migrate in a few minutes. See the migration section above.

SLNG Team
Team
Index
Keep your models. Keep your keys.
Faster turns
BYOK: Bring your own provider key
Regional compliance without the rewiring
Failover that doesn't take your agent down
What the execution layer does on every call
Upgrading from an earlier version
Start routing your LiveKit agents through SLNG
FAQ: SLNG x LiveKit Integration
Other posts