agent-config.yml, drop in the credentials, and the TeleQuick Agent Runtime opens a streaming session with each vendor on the caller’s shard. No code — the pipeline is assembled from config.
Prefer a single low-latency duplex model? See BYO speech-to-speech, which sets
pipeline_mode: realtime and hands the whole turn to one provider (OpenAI Realtime, Gemini Live, and others). A cascade gives you more control and per-stage swappability; speech-to-speech gives you the lowest turn latency.Set the pipeline
Choose your three providers
Pick one id from each table below. The defaults —
deepgram for ASR, openai for LLM, elevenlabs for TTS — are what a bare cascade falls back to, so you can start by overriding just the stage you care about.Add credentials
Each provider reads a per-tenant key resolved at call setup (see Credentials). Set the keys for the providers you selected — an agent with no usable provider key is refused rather than started.
Write agent-config.yml
Set
pipeline_mode: cascaded and the per-stage provider/model/voice fields. Full example below.Save and place a test call
Config is hydrated into the runtime from the control plane — no rebuild. Place a call and watch the latency breakdown to see per-stage timing (ASR final, LLM first token, TTS first audio).
agent-config.yml
agent-config.yml
encoding=linear16; providers that natively want 16/24 kHz are resampled for you).
ASR providers
Setasr_provider (and optionally asr_model, forwarded as the provider’s model hint).
asr_provider | Vendor | Notes |
|---|---|---|
deepgram (default) | Deepgram | Streaming, interim + final transcripts. Default model nova-2. |
elevenlabs | ElevenLabs | Streaming ASR surface (shares your ElevenLabs key). |
Additional streaming ASR ids exist for Indic and regional coverage and for self-hosted transcription on a co-located model server — see Self-hosted inference. Deepgram is the recommended default for English telephony.
LLM providers
Setllm_provider and llm_model. The LLM stage is where tool calling runs — see Tool calling.
- OpenAI
- Anthropic
- Gemini
- Ollama (self-hosted)
TTS providers
Settts_provider and put the provider’s voice id in tts_voice.
tts_provider | Vendor | Voice field |
|---|---|---|
elevenlabs (default) | ElevenLabs | tts_voice = ElevenLabs voice_id (streaming, low first-audio). |
cartesia | Cartesia (Sonic) | tts_voice = Cartesia voice UUID (streaming WebSocket). |
cartesia-http | Cartesia | Same voices, one-shot HTTP fallback (no streaming). |
deepgram | Deepgram (Aura) | tts_voice = Aura voice, e.g. aura-asteria-en. |
openai | OpenAI | Reuses your OpenAI key; one-shot per utterance. |
Streaming TTS providers emit audio as the LLM text arrives, which is what keeps first-audio low. If a provider can’t open a streaming session (missing voice, bad key), the runtime falls back to a one-shot synthesis for that turn so the caller still hears a reply.
Credentials
Provider keys are per-tenant. Set them in the TeleQuick console atagent.telequick.dev and they are resolved from the control plane at call setup, sealed at rest, and injected into the pipeline — they are never baked into agent-config.yml.
For single-tenant or local development, the runtime also reads keys from the environment as a fallback:
What runs around the cascade
- Turn detection. A cascade uses local, on-device VAD by default (the runtime owns endpointing and barge-in) rather than a cloud provider’s server VAD. Tune the thresholds, barge-in hold window, and idle watchdog on the turn detection page.
- Language. The
languagehint prepends a hard directive to the system prompt so the model answers in your market’s language instead of mirroring the caller. - Session limits. Connect/idle/max-session deadlines apply per stage; see Session lifecycle.
Backchannel suppression in a cascade is acoustic (utterance duration + a hold-and-confirm barge window) — short “mhm”/“ok” replies don’t interrupt the agent. Lexical gating (“stop” vs “ok”) is not built; plan around the acoustic behavior. See turn detection.
Next steps
Runtime configuration
Every knob: turn detection, budgets, guardrails, and codecs.
Speech-to-speech
Trade per-stage control for the lowest turn latency with a single duplex model.
Tool calling
Give the LLM stage HTTP, MCP, and client tools.
Latency breakdown
See per-stage ASR / LLM / TTS timing on a live call.