On your own servers, use your server’s address instead (see On-premises). Tested with
livekit-agents 1.8.12 and pipecat-ai 1.16.0.
LiveKit Agents
- STT: with
use_realtime=Truethe plugin opens/v1/realtime?intent=transcription. Umay ends a turn after about 0.8 s of silence; theturn_detectionsetting the plugin sends is accepted but does not change that. Withoutuse_realtime, LiveKit cuts the audio with its VAD and sends each utterance as a file to/v1/audio/transcriptions; that also works, with more delay. - TTS: the plugin sends each sentence as its own request and plays it while it streams. When the caller interrupts, LiveKit closes the request and Ses stops synthesis.
- Language of the voice: the TTS plugin does not send
language; the language comes from the voice. Pick a voice of the language you speak:alpfor Turkish,emilyfor English (see Voices).
Pipecat
- STT: Pipecat sends
input_audio_buffer.commitwhen its VAD hears the caller stop, and Umay gives the final text of that turn at once. With Silero’s default 0.2 s, a short pause inside a sentence (“Adresiniz Bornova, …”) already ends the turn and the sentence comes back in two pieces; setSileroVADAnalyzer(params=VADParams(stop_secs=0.8))to keep sentences whole. - TTS: Pipecat asks for
pcmat 24 kHz, which is what Ses sends. - Voice names: Pipecat refuses voice names that are not OpenAI’s. The line that adds
alptoVALID_VOICESlets you use any Ses voice or custom voice id. Without it, an OpenAI name works too: Ses answers with the voice of the same gender in the default language (onyx→ a Turkish male voice). - For file-based recognition instead of live,
OpenAISTTService(base_url="https://stt.eu.mihu.ai/v1", ...)sends each utterance to/v1/audio/transcriptions.
Names and places
Both plugins send aprompt (LiveKit: openai.STT(prompt=...), Pipecat: Settings(prompt=...)). Umay turns it into hints for Turkish: a list such as "Bornova, Karşıyaka, Ali Yılmaz" makes those names easier to recognise. See OpenAI-compatible API.