models.listen picks the service that turns the caller’s voice into text.
SLNG is a host and a proxy, and one key covers both. It runs its own
copies of speech models, and it also forwards to the vendors’ own endpoints.
So a single
SLNG_API_KEY reaches many vendors’ models, and you choose which
of thirteen regions the audio is processed in. One key, many
models is the whole picture.- Quickstart - the smallest binding that works
- Every key a listen binding takes - the full shape
- One key, many models - hosted, proxied, and where it runs
- Pipecat and LiveKit - the vendors each target can construct
- Fallback - what to try when the first call fails
- Troubleshooting - the refusals that come up most
Quickstart
agent.yaml
provider: says who runs it, model: says which
one, and the name you give the entry, transcriber here, is how the rest of
the package refers to it.
Every key a listen binding takes
Onlymodel: is required. The rest narrow where the model runs and what
happens when it fails.
string
A provider supported for this role and target, listed on the model pages. Required for
an API binding; there is no inferred API provider.
local selects local placement.string
Provider model id, passed through as written. Required where the selected integration
requires a model; otherwise its default applies. No model id is checked against a provider catalog.
string
BCP-47 language tag, such as
en or en-US, on listen or speak. Omit to leave
language selection to the integration.api | local
Whether the model is called over the network or runs in the agent’s own
process. Left out, it is
api whenever the entry names a provider or a
model. local is refused on the slng target, which has no machine of yours
to run on.an environment variable name
Points at a variable holding an OpenAI-compatible endpoint URL. This is what
lets a vendor that is not on Pipecat’s list through. Pipecat only: LiveKit
has no custom speech endpoint at all, and neither does the slng target.
object
Provider parameter names and values. Omit to add no extra parameters. Provider limits
apply; Unmute does not define a universal accepted set. SLNG
params.world_part
is checked against its supported regions.list of strings
Names from the same
think or listen section, in retry order. Omit for no fallback
chain. Cycles and other roles are refused; Pipecat refuses generated fallback.One key, many models
SLNG serves a speech model two ways, and the shape of the id says which:
Both are one binding and one
SLNG_API_KEY. The point is that you do not
collect a key per vendor to reach a vendor’s model. The difference is who runs
the model and how it is billed, which
docs.slng.ai covers.
Where it runs
params.world_part picks the SLNG speech gateway that serves the call:
agent.yaml
us-east, us-west, br, eu-west, eu-north,
gb, za, il, jp, sg, id, au and in. Left out, the SDK default
stands. A hosted slng/ id is a separate question: those run only where SLNG
has put them, so a region you need may rule one out.
Regional infrastructure explains the
separate model, worker and media regions.
Which shape to pick for listening
The scaffold and every example take the proxied route. Routing through a hosted id adds a hop the proxied route skips, on the one leg the caller waits through on every turn, from the end of their speech to the final transcript. Measure your own route rather than assuming this holds for you; see Optimizing your agent.The ids the scaffold and examples use
The ids the scaffold and examples use
Those are the only exact ids the docs name, because they are the ones the
examples run. The full SLNG catalog, with languages, regions and hosting, is
at docs.slng.ai/models; any id from there goes
in
model: as written.Pipecat
An unlisted provider is legal on Pipecat on one condition: it has to be a
genuinely OpenAI-compatible endpoint, named with
endpoint_env. Without that
it is refused, and the message lists what the role does take.
LiveKit
This list is closed. LiveKit speech to text has no custom endpoint slot, so a
provider that is not here cannot be bound at all.
The difference between the two
Pipecat hasopenai, LiveKit has sarvam. Everything else matches.
Fallback
fallback: names other listen entries, tried in order when the primary
transcriber’s call fails:
agent.yaml
Troubleshooting
The provider is refused, and the message lists other names
The vendor is not on your target’s list for this role. Fix: pick one from the list above, or on Pipecat pointendpoint_env at a variable holding an
OpenAI-compatible endpoint. On LiveKit there is no such escape for listening.
language is refused on a provider that clearly supports languages
The vendor carries the language inside the model id rather than in a separate
field, so the binding has no slot for it. Fix: drop language: and name
the language variant in model:.
voice, speed, temperature, top_p or top_k is refused
Those are speak and think fields. A transcriber takes none of them. Fix:
move the key to the binding it belongs to, or delete it.
pace, endpointing_delay or semantic_endpointing is refused
All three belong on a turn binding, which decides when the caller has
finished. Fix: move them; see Turn detection.
The package compiles for LiveKit and is refused for Pipecat
Pipecat does not emit listen fallback yet. Fix: removefallback: from
the listen section, or keep that package on LiveKit or slng.
Where to go next
Text to speech
The voice the caller hears.
SLNG Execution Layer
The SLNG Execution Layer behind these models.
Regional infrastructure
Place speech compute and the agent worker separately.