config, or overridden per session. Cloud, local, and self-hosted providers are interchangeable.
Capabilities
Set them in
config:
Realtime (audio-to-audio) models
Some Gemini models (Live / native-audio) do integrated voice input and output — there is no separate STT or TTS stage. When a realtime model is selected, STT/TTS settings are ignored, and Lehar skips estimated STT/TTS billing for that session.Voices
- Sarvam — pick a Bulbul model version with
sarvam_tts_model(bulbul:v3, the default, orbulbul:v2), then aspeaker. Speakers are specific to the model version and the two sets are disjoint — a v2 speaker on v3 is rejected at save time. Speakingpaceis configurable (0.3–3.0), andtts_language(the spoken output language) is separate from the STT input language. - Murf —
voiceis a Murf{locale}-{name}id (e.g.en-IN-anisha), with an optionalmurf_tts_style(Conversational,Promo,Narration) and signedmurf_tts_speed/murf_tts_pitchin −50…50. Real-time streaming only; there is no model selector. - ElevenLabs —
voiceis an ElevenLabs voice id andelevenlabs_tts_modelselects the model:eleven_flash_v2_5(default, lowest latency),eleven_turbo_v2_5,eleven_multilingual_v2, oreleven_v3. Flash and Turbo bill at half the per-character rate of the other two. Optionalelevenlabs_tts_languageplus voice settingselevenlabs_tts_stability,elevenlabs_tts_similarity_boostandelevenlabs_tts_stylein 0…1,elevenlabs_tts_speedin 0.8…1.2, andelevenlabs_tts_use_speaker_boost. Leave a setting unset to use the voice’s own. - Edge — voices use Edge TTS voice names (e.g.
en-IN-NeerjaNeural). - Kokoro (local) — English and Hindi voices; the pipeline language is derived from the voice name, so use only the voices the catalog lists.
- Qwen3 (self-hosted) — a model size (
0.6bfast /1.7bquality) plus a voice, selected with thevoicefield. Lehar hosts its own fine-tuned voicesmanishandshail(Hinglish), plus reference-clip clonesojas,shruti,happyandsad. The language selector has no Hindi entry — use a Hinglish voice instead. - LiveKit — voices use LiveKit TTS voice IDs.
Pronunciation
Attach a pronunciation dictionary to an agent (viapronunciation_dictionary_id) to control how it says specific words — brand names, places, acronyms. The rules are applied as a text substitution just before speech, so they behave identically across every TTS provider. GET /catalog/models advertises this with pronunciation_dictionary_supported, and names the providers that additionally accept IPA entries in pronunciation_dictionary_ipa_providers.
Sarvam LLM reasoning
Sarvam LLMs reason by default, which costs voice latency and bills reasoning tokens as completion tokens. Setsarvam_llm_reasoning_effort to low (recommended for voice), medium, high, or off to disable chain-of-thought entirely. Leave it unset to inherit the deployment’s default.
Discover what’s available
GET /catalog/models (scope sessions:read) returns the live catalog that powers the dashboard’s agent editor: LLM/STT/TTS providers, their models and defaults, Gemini voices, Edge voices, and Sarvam speakers. Read it at runtime rather than hard-coding lists.
Provider selection is one direction only: it flows to the agent worker as session metadata at dispatch time. If your deployment restricts which providers are configured, unavailable ones simply won’t appear in the catalog.
Agents
Set defaults on the agent.
Sessions
Override per call.

