ProjectBuild an AI Voice Receptionist: the explanation · Module 13: Giving the receptionist a voice · part 15 of 23
Part 15 · Module 13: Giving the receptionist a voice

Module 13: Giving the receptionist a voice

23 min read·
About 35 minutes · Needs: Module 2 (the voice loop) and Module 10 (languages and normalisation) · Code: backend/app/voice/tts.py, backend/app/voice/audio.py, backend/app/voice/normalize.py

Where this fits

WHERE THIS FITS The Medilane voice receptionist this module CLIENT React API LAYER FastAPI SAFETY SPEECH IN BRAIN LangGraph SPEECH OUT KNOWLEDGE AND DATA pgvector OPERATIONS Langfuse, Prometheus Caller app browser mic Staff app desk and admin REST API staff, sessions Voice socket audio both ways Auth + RBAC staff roles, voice tokens Guardrails emergency, PII VAD Silero, turns Whisper speech to text Language en, hi, Hinglish Agent tools, confirm Open models Groq: gpt-oss, Qwen Kokoro TTS en + hi voices Retrieval multilingual Ingestion clinic documents PostgreSQL clinic, calls, vectors Redis events, limits Front desk live events, hand-offs Observability traces, metrics Evaluation WER, safety, latency
Text to speech (blue: this module) is the last stage of every turn; it relies on the language rules for Devanagari text.

Everything the receptionist decides has to reach the caller as sound. This module is the last stage of every turn: the agent's text goes in, 24 kHz audio comes out, one sentence at a time. It leans on the language work of Module 10, because the Hindi voice can only read Devanagari, and it hands its audio to the live WebSocket session of Module 14.

The rest of this project is yours to keep

This project is bought on its own, once, and stays readable afterwards, including the parts added to it later.

Or open everything with a plan