<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Viral Jethva</title>
    <description>The latest articles on DEV Community by Viral Jethva (@viral1998).</description>
    <link>https://dev.to/viral1998</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4078840%2F348b6c67-15b3-4ed3-af1e-0c0dd1c46f28.png</url>
      <title>DEV Community: Viral Jethva</title>
      <link>https://dev.to/viral1998</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/viral1998"/>
    <language>en</language>
    <item>
      <title>Building Arogya Seva: How I Built an Ultra-Low Latency Telehealth Voice AI for Bharat in 10 Days</title>
      <dc:creator>Viral Jethva</dc:creator>
      <pubDate>Sat, 15 Aug 2026 11:20:47 +0000</pubDate>
      <link>https://dev.to/viral1998/building-arogya-seva-how-i-built-an-ultra-low-latency-telehealth-voice-ai-for-bharat-in-10-days-1cmg</link>
      <guid>https://dev.to/viral1998/building-arogya-seva-how-i-built-an-ultra-low-latency-telehealth-voice-ai-for-bharat-in-10-days-1cmg</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Introduction: The Problem &amp;amp; The Mission
Across rural and semi-urban India, access to timely healthcare advice is hindered by high patient-to-doctor ratios, geographical distances, and language barriers. Millions of citizens delay seeking medical advice simply because scheduling a clinic visit or understanding preliminary symptom urgency is daunting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Arogya Seva was created to bridge this gap as part of the #VoiceForBharat challenge (Track: Health Access). It is an empathetic, multilingual, real-time voice assistant designed to interact naturally in Indian English, Hindi (Devanagari script), and regional scripts.&lt;/p&gt;

&lt;p&gt;Why Voice? For millions of non-tech-savvy users or individuals in low-literacy regions, typing in an app or filling out complex forms is a friction point. Speaking directly over a phone call or web interface is the most accessible, natural, and human way to receive guidance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System Architecture: How Audio &amp;amp; Data Flow
To deliver a conversational voice experience, latency is paramount. A delay of more than 800ms between a user finishing their sentence and hearing a response breaks the illusion of natural conversation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The system is built on LiveKit Agents SDK with a modular pipeline:&lt;/p&gt;

&lt;p&gt;Speech-to-Text (STT): Deepgram Nova-3 transcribes spoken voice in real time.&lt;br&gt;
Brain (LLM): Google Gemini 2.0 Flash processes intent, applies clinical guardrails, and decides on function tool calls.&lt;br&gt;
Text-to-Speech (TTS): Murf Falcon (livekit-murf plugin, voice model en-IN-Anisha) streams ultra-low latency, human-like voice synthesis back to the user.&lt;br&gt;
Real-time Transport: LiveKit WebRTC (web frontend) and SIP Telephony (outbound/inbound phone calls).&lt;br&gt;
Memory &amp;amp; State: SQLite (agent_memory.db) for privacy-first caller persistence and escalation management.&lt;br&gt;
Mermaid diagram&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Important Features Built Over 10 Days
🚀 Feature 1: Sub-Second Voice Synthesis Powered by Murf Falcon
Using Murf Falcon (en-IN-Anisha voice model), the agent achieves lightning-fast time-to-first-byte (TTFB). The voice sounds warm, empathetic, and natural—crucial for building trust with patients discussing health concerns.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🛡️ Feature 2: Strict Guardrails &amp;amp; Native Script Enforcement&lt;br&gt;
Health AI requires absolute safety. Arogya Seva follows strict operational boundaries:&lt;/p&gt;

&lt;p&gt;Red-Flag Clinical Emergency Protocol: Immediately flags chest pain, dyspnea, heavy bleeding, or acute trauma, urging callers to dial emergency 108.&lt;br&gt;
Native Script Enforcement: To ensure proper acoustic synthesis and avoid awkward transliteration, responses in Hindi are strictly produced in native Devanagari script (e.g., नमस्ते, आप कैसे हैं?), avoiding romanized "Hinglish".&lt;br&gt;
💻 Feature 3: Dynamic Frontend State &amp;amp; Audio Visualizers&lt;br&gt;
Built with Next.js and LiveKit Agents UI, the frontend displays real-time agent states:&lt;/p&gt;

&lt;p&gt;Listening (Visualized with dynamic frequency waveforms)&lt;br&gt;
Thinking (Tool execution state)&lt;br&gt;
Speaking (Fluid audio spectrum representation)&lt;br&gt;
🧠 Feature 4: Privacy-First Memory with Explicit Consent&lt;br&gt;
Returning callers don't need to re-explain their location or age band. However, privacy is paramount:&lt;/p&gt;

&lt;p&gt;The agent explicitly asks: "May I save your name and basic health details so I can remember you next time?"&lt;br&gt;
Facts are stored only if explicit consent is given.&lt;br&gt;
Users can say "Forget me" at any time to wipe their records via forget_caller.&lt;br&gt;
🛠️ Feature 5: Real-Domain Health Tools &amp;amp; Tool Chaining&lt;br&gt;
classify_symptom_triage: Categorizes symptoms into Self-Care / Low, Moderate / Consult Nurse, or High Urgent / Red-Flag.&lt;br&gt;
lookup_nearest_phc: Searches Primary Health Centres based on district.&lt;br&gt;
Tool Chaining: Automatically reuses district information saved in caller memory without re-asking the user.&lt;br&gt;
Graceful Failure: If the registry API is unreachable, the agent announces the offline status calmly and provides emergency helpline 104/108 numbers.&lt;br&gt;
📞 Feature 6: Outbound Telephony &amp;amp; Mandatory Opt-Out&lt;br&gt;
For automated health reminders and follow-up calls:&lt;/p&gt;

&lt;p&gt;Two-Sentence Mandatory Opening: State WHO is calling, WHY, and HOW to opt out in the first two sentences.&lt;br&gt;
Instant Opt-Out: Saying "stop calling me" or pressing 9 immediately executes opt_out_caller in SQLite and terminates the call.&lt;br&gt;
🆘 Feature 7: Human Escalation &amp;amp; Reference IDs&lt;br&gt;
When situations exceed AI scope:&lt;/p&gt;

&lt;p&gt;Agent detects clinical doctor requests or red-flag symptoms.&lt;br&gt;
Agent requests explicit permission to create an escalation ticket.&lt;br&gt;
Upon agreement, create_escalation stores a sanitized summary (no passwords/PINs/Aadhaar) and returns a unique reference ID (e.g., ESC-8492).&lt;br&gt;
📊 Feature 8: Call Analytics &amp;amp; Outcome Tracking&lt;br&gt;
Every call session logs structured metrics into SQLite, including call duration, triage classifications, escalation status, and resolution codes (triage_completed, phc_found, escalated, handed_off).&lt;/p&gt;

&lt;p&gt;🔀 Feature 9: Multi-Agent Specialist Handoff&lt;br&gt;
When callers request to schedule, modify, or cancel OPD appointments, the main agent invokes transfer_to_clinic_specialist:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;@function_tool&lt;br&gt;
async def transfer_to_clinic_specialist(self, context: RunContext, reason: str) -&amp;gt; str:&lt;br&gt;
    specialist = ClinicAppointmentSpecialist()&lt;br&gt;
    context.session.update_agent(specialist)&lt;br&gt;
    return "Handed off conversation to Clinic and Appointment Specialist."&lt;br&gt;
The session dynamically updates to ClinicAppointmentSpecialist, seamlessly swapping persona and toolsets without dropping the audio call!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real Challenges &amp;amp; How We Solved Them
Challenge 1: TTS Latency Spikes During Conversational Turns
Problem: Default chunking caused 1.5-second pauses before the agent spoke.
Root Cause: Large sentence buffers in the LLM-to-TTS pipeline.
Solution: Integrated Murf Falcon with streaming tokenization and prewarmed Silero VAD models. This reduced speech synthesis latency to under 300ms!
Challenge 2: Accidental Code-Mixed Script Bleed
Problem: The LLM would occasionally respond to Hindi input with romanized Hindi ("Aapko kya takleef hai?"), causing the TTS to pronounce Hindi words with English phonetics.
Solution: Implemented a mandatory system prompt guardrail enforcing native script generation (e.g., Devanagari for Hindi).
Challenge 3: Agent Handoff State Management
Problem: When handing off from general health to clinic specialist, tool contexts were losing call metadata.
Solution: Leveraged context.session.update_agent(specialist) in LiveKit Agents SDK, ensuring the active WebRTC media room remained untouched while the prompt and function tools switched dynamically.&lt;/li&gt;
&lt;li&gt;Practical Guide: Build &amp;amp; Run Your Own Voice Agent
Want to build your own ultra-fast voice agent? Follow these steps!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 1: Prerequisites&lt;br&gt;
Python 3.10+ &amp;amp; uv package manager&lt;br&gt;
Node.js 18+ &amp;amp; pnpm&lt;br&gt;
LiveKit Cloud account (URL, API Key, API Secret)&lt;br&gt;
Murf AI API Key (for Falcon TTS)&lt;br&gt;
Deepgram API Key (for STT)&lt;br&gt;
Google Gemini API Key (for LLM)&lt;br&gt;
Step 2: Clone &amp;amp; Configure Backend&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/viral-1998/VoiceOfBharat.git" rel="noopener noreferrer"&gt;https://github.com/viral-1998/VoiceOfBharat.git&lt;/a&gt;&lt;br&gt;
cd VoiceOfBharat/backend&lt;/p&gt;

&lt;h1&gt;
  
  
  Create environment file (.env.local)
&lt;/h1&gt;

&lt;p&gt;cp .env.example .env.local&lt;br&gt;
Add your API keys to backend/.env.local:&lt;/p&gt;

&lt;p&gt;env&lt;/p&gt;

&lt;p&gt;LIVEKIT_URL=wss://your-livekit-project.livekit.cloud&lt;br&gt;
LIVEKIT_API_KEY=your_key&lt;br&gt;
LIVEKIT_API_SECRET=your_secret&lt;br&gt;
MURF_API_KEY=your_murf_key&lt;br&gt;
DEEPGRAM_API_KEY=your_deepgram_key&lt;br&gt;
GOOGLE_API_KEY=your_google_key&lt;br&gt;
Step 3: Run Backend Agent&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;uv sync&lt;br&gt;
uv run python src/agent.py download-files   # First time model download&lt;br&gt;
uv run python src/agent.py dev              # Start live dev server&lt;br&gt;
Step 4: Run Frontend UI&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;cd ../frontend&lt;br&gt;
pnpm install&lt;br&gt;
pnpm dev&lt;br&gt;
Open &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; in your browser, click Connect, and start speaking to your agent!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code Spotlight: Specialist Handoff Logic
Here is the exact Python implementation for handing off a LiveKit session from the main Telehealth assistant to the Appointment Specialist agent:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;h1&gt;
  
  
  Function tool in Assistant class
&lt;/h1&gt;

&lt;p&gt;@function_tool&lt;br&gt;
async def transfer_to_clinic_specialist(&lt;br&gt;
    self,&lt;br&gt;
    context: RunContext,&lt;br&gt;
    reason: str = "User requested appointment booking",&lt;br&gt;
) -&amp;gt; str:&lt;br&gt;
    """Transfer caller to Clinic &amp;amp; Appointment Specialist agent."""&lt;br&gt;
    specialist = ClinicAppointmentSpecialist()&lt;br&gt;
    context.session.update_agent(specialist)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;call_id = getattr(getattr(context, "session", None), "call_id", "")
if call_id:
    db.mark_call_success(call_id, outcome_summary=f"Handed off: {reason}")

return "Handed off conversation to Clinic and Appointment Specialist."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What's Next?
Future improvements for Arogya Seva include:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Multi-lingual Voice Cloning: Adding localized voice accents across 10+ Indian regional languages using Murf Falcon's voice library.&lt;br&gt;
WhatsApp Telemetry Notifications: Sending automated SMS/WhatsApp appointment receipts following human escalations.&lt;br&gt;
EHR Integration: Connecting triage outcomes directly with ABDM (Ayushman Bharat Digital Mission) health IDs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Links &amp;amp; Resources
🐙 GitHub Repository: &lt;a href="https://github.com/Viral-1998/VoiceOfBharat" rel="noopener noreferrer"&gt;https://github.com/Viral-1998/VoiceOfBharat&lt;/a&gt; Repo
⚡ Murf Falcon TTS Docs: Falcon 2 Documentation
🎙️ LiveKit Voice AI Quickstart: LiveKit Agents Guide
🏆 Challenge Details: VoiceForBharat Challenge 2026
Thank you to Murf AI and LiveKit for hosting the 10 Days of AI Voice Agents (#VoiceForBharat Edition)!&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>devchallenge</category>
      <category>llm</category>
    </item>
    <item>
      <title>Building Arogya Seva: How I Built an Ultra-Low Latency Telehealth Voice AI for Bharat in 10 Days</title>
      <dc:creator>Viral Jethva</dc:creator>
      <pubDate>Sat, 15 Aug 2026 11:07:56 +0000</pubDate>
      <link>https://dev.to/viral1998/building-kisanvani-kisaan-vaannii-an-ultra-low-latency-multilingual-voice-agent-for-indian-aoi</link>
      <guid>https://dev.to/viral1998/building-kisanvani-kisaan-vaannii-an-ultra-low-latency-multilingual-voice-agent-for-indian-aoi</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Introduction: The Problem &amp;amp; The Mission
Across rural and semi-urban India, access to timely healthcare advice is hindered by high patient-to-doctor ratios, geographical distances, and language barriers. Millions of citizens delay seeking medical advice simply because scheduling a clinic visit or understanding preliminary symptom urgency is daunting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Arogya Seva was created to bridge this gap as part of the #VoiceForBharat challenge (Track: Health Access). It is an empathetic, multilingual, real-time voice assistant designed to interact naturally in Indian English, Hindi (Devanagari script), and regional scripts.&lt;/p&gt;

&lt;p&gt;Why Voice? For millions of non-tech-savvy users or individuals in low-literacy regions, typing in an app or filling out complex forms is a friction point. Speaking directly over a phone call or web interface is the most accessible, natural, and human way to receive guidance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System Architecture: How Audio &amp;amp; Data Flow
To deliver a conversational voice experience, latency is paramount. A delay of more than 800ms between a user finishing their sentence and hearing a response breaks the illusion of natural conversation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The system is built on LiveKit Agents SDK with a modular pipeline:&lt;/p&gt;

&lt;p&gt;Speech-to-Text (STT): Deepgram Nova-3 transcribes spoken voice in real time.&lt;br&gt;
Brain (LLM): Google Gemini 2.0 Flash processes intent, applies clinical guardrails, and decides on function tool calls.&lt;br&gt;
Text-to-Speech (TTS): Murf Falcon (livekit-murf plugin, voice model en-IN-Anisha) streams ultra-low latency, human-like voice synthesis back to the user.&lt;br&gt;
Real-time Transport: LiveKit WebRTC (web frontend) and SIP Telephony (outbound/inbound phone calls).&lt;br&gt;
Memory &amp;amp; State: SQLite (agent_memory.db) for privacy-first caller persistence and escalation management.&lt;br&gt;
Mermaid diagram&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Important Features Built Over 10 Days
🚀 Feature 1: Sub-Second Voice Synthesis Powered by Murf Falcon
Using Murf Falcon (en-IN-Anisha voice model), the agent achieves lightning-fast time-to-first-byte (TTFB). The voice sounds warm, empathetic, and natural—crucial for building trust with patients discussing health concerns.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🛡️ Feature 2: Strict Guardrails &amp;amp; Native Script Enforcement&lt;br&gt;
Health AI requires absolute safety. Arogya Seva follows strict operational boundaries:&lt;/p&gt;

&lt;p&gt;Red-Flag Clinical Emergency Protocol: Immediately flags chest pain, dyspnea, heavy bleeding, or acute trauma, urging callers to dial emergency 108.&lt;br&gt;
Native Script Enforcement: To ensure proper acoustic synthesis and avoid awkward transliteration, responses in Hindi are strictly produced in native Devanagari script (e.g., नमस्ते, आप कैसे हैं?), avoiding romanized "Hinglish".&lt;br&gt;
💻 Feature 3: Dynamic Frontend State &amp;amp; Audio Visualizers&lt;br&gt;
Built with Next.js and LiveKit Agents UI, the frontend displays real-time agent states:&lt;/p&gt;

&lt;p&gt;Listening (Visualized with dynamic frequency waveforms)&lt;br&gt;
Thinking (Tool execution state)&lt;br&gt;
Speaking (Fluid audio spectrum representation)&lt;br&gt;
🧠 Feature 4: Privacy-First Memory with Explicit Consent&lt;br&gt;
Returning callers don't need to re-explain their location or age band. However, privacy is paramount:&lt;/p&gt;

&lt;p&gt;The agent explicitly asks: "May I save your name and basic health details so I can remember you next time?"&lt;br&gt;
Facts are stored only if explicit consent is given.&lt;br&gt;
Users can say "Forget me" at any time to wipe their records via forget_caller.&lt;br&gt;
🛠️ Feature 5: Real-Domain Health Tools &amp;amp; Tool Chaining&lt;br&gt;
classify_symptom_triage: Categorizes symptoms into Self-Care / Low, Moderate / Consult Nurse, or High Urgent / Red-Flag.&lt;br&gt;
lookup_nearest_phc: Searches Primary Health Centres based on district.&lt;br&gt;
Tool Chaining: Automatically reuses district information saved in caller memory without re-asking the user.&lt;br&gt;
Graceful Failure: If the registry API is unreachable, the agent announces the offline status calmly and provides emergency helpline 104/108 numbers.&lt;br&gt;
📞 Feature 6: Outbound Telephony &amp;amp; Mandatory Opt-Out&lt;br&gt;
For automated health reminders and follow-up calls:&lt;/p&gt;

&lt;p&gt;Two-Sentence Mandatory Opening: State WHO is calling, WHY, and HOW to opt out in the first two sentences.&lt;br&gt;
Instant Opt-Out: Saying "stop calling me" or pressing 9 immediately executes opt_out_caller in SQLite and terminates the call.&lt;br&gt;
🆘 Feature 7: Human Escalation &amp;amp; Reference IDs&lt;br&gt;
When situations exceed AI scope:&lt;/p&gt;

&lt;p&gt;Agent detects clinical doctor requests or red-flag symptoms.&lt;br&gt;
Agent requests explicit permission to create an escalation ticket.&lt;br&gt;
Upon agreement, create_escalation stores a sanitized summary (no passwords/PINs/Aadhaar) and returns a unique reference ID (e.g., ESC-8492).&lt;br&gt;
📊 Feature 8: Call Analytics &amp;amp; Outcome Tracking&lt;br&gt;
Every call session logs structured metrics into SQLite, including call duration, triage classifications, escalation status, and resolution codes (triage_completed, phc_found, escalated, handed_off).&lt;/p&gt;

&lt;p&gt;🔀 Feature 9: Multi-Agent Specialist Handoff&lt;br&gt;
When callers request to schedule, modify, or cancel OPD appointments, the main agent invokes transfer_to_clinic_specialist:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;@function_tool&lt;br&gt;
async def transfer_to_clinic_specialist(self, context: RunContext, reason: str) -&amp;gt; str:&lt;br&gt;
    specialist = ClinicAppointmentSpecialist()&lt;br&gt;
    context.session.update_agent(specialist)&lt;br&gt;
    return "Handed off conversation to Clinic and Appointment Specialist."&lt;br&gt;
The session dynamically updates to ClinicAppointmentSpecialist, seamlessly swapping persona and toolsets without dropping the audio call!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real Challenges &amp;amp; How We Solved Them
Challenge 1: TTS Latency Spikes During Conversational Turns
Problem: Default chunking caused 1.5-second pauses before the agent spoke.
Root Cause: Large sentence buffers in the LLM-to-TTS pipeline.
Solution: Integrated Murf Falcon with streaming tokenization and prewarmed Silero VAD models. This reduced speech synthesis latency to under 300ms!
Challenge 2: Accidental Code-Mixed Script Bleed
Problem: The LLM would occasionally respond to Hindi input with romanized Hindi ("Aapko kya takleef hai?"), causing the TTS to pronounce Hindi words with English phonetics.
Solution: Implemented a mandatory system prompt guardrail enforcing native script generation (e.g., Devanagari for Hindi).
Challenge 3: Agent Handoff State Management
Problem: When handing off from general health to clinic specialist, tool contexts were losing call metadata.
Solution: Leveraged context.session.update_agent(specialist) in LiveKit Agents SDK, ensuring the active WebRTC media room remained untouched while the prompt and function tools switched dynamically.&lt;/li&gt;
&lt;li&gt;Practical Guide: Build &amp;amp; Run Your Own Voice Agent
Want to build your own ultra-fast voice agent? Follow these steps!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 1: Prerequisites&lt;br&gt;
Python 3.10+ &amp;amp; uv package manager&lt;br&gt;
Node.js 18+ &amp;amp; pnpm&lt;br&gt;
LiveKit Cloud account (URL, API Key, API Secret)&lt;br&gt;
Murf AI API Key (for Falcon TTS)&lt;br&gt;
Deepgram API Key (for STT)&lt;br&gt;
Google Gemini API Key (for LLM)&lt;br&gt;
Step 2: Clone &amp;amp; Configure Backend&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/viral-1998/VoiceOfBharat.git" rel="noopener noreferrer"&gt;https://github.com/viral-1998/VoiceOfBharat.git&lt;/a&gt;&lt;br&gt;
cd VoiceOfBharat/backend&lt;/p&gt;

&lt;h1&gt;
  
  
  Create environment file (.env.local)
&lt;/h1&gt;

&lt;p&gt;cp .env.example .env.local&lt;br&gt;
Add your API keys to backend/.env.local:&lt;/p&gt;

&lt;p&gt;env&lt;/p&gt;

&lt;p&gt;LIVEKIT_URL=wss://your-livekit-project.livekit.cloud&lt;br&gt;
LIVEKIT_API_KEY=your_key&lt;br&gt;
LIVEKIT_API_SECRET=your_secret&lt;br&gt;
MURF_API_KEY=your_murf_key&lt;br&gt;
DEEPGRAM_API_KEY=your_deepgram_key&lt;br&gt;
GOOGLE_API_KEY=your_google_key&lt;br&gt;
Step 3: Run Backend Agent&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;uv sync&lt;br&gt;
uv run python src/agent.py download-files   # First time model download&lt;br&gt;
uv run python src/agent.py dev              # Start live dev server&lt;br&gt;
Step 4: Run Frontend UI&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;cd ../frontend&lt;br&gt;
pnpm install&lt;br&gt;
pnpm dev&lt;br&gt;
Open &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; in your browser, click Connect, and start speaking to your agent!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code Spotlight: Specialist Handoff Logic
Here is the exact Python implementation for handing off a LiveKit session from the main Telehealth assistant to the Appointment Specialist agent:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;h1&gt;
  
  
  Function tool in Assistant class
&lt;/h1&gt;

&lt;p&gt;@function_tool&lt;br&gt;
async def transfer_to_clinic_specialist(&lt;br&gt;
    self,&lt;br&gt;
    context: RunContext,&lt;br&gt;
    reason: str = "User requested appointment booking",&lt;br&gt;
) -&amp;gt; str:&lt;br&gt;
    """Transfer caller to Clinic &amp;amp; Appointment Specialist agent."""&lt;br&gt;
    specialist = ClinicAppointmentSpecialist()&lt;br&gt;
    context.session.update_agent(specialist)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;call_id = getattr(getattr(context, "session", None), "call_id", "")
if call_id:
    db.mark_call_success(call_id, outcome_summary=f"Handed off: {reason}")

return "Handed off conversation to Clinic and Appointment Specialist."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What's Next?
Future improvements for Arogya Seva include:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Multi-lingual Voice Cloning: Adding localized voice accents across 10+ Indian regional languages using Murf Falcon's voice library.&lt;br&gt;
WhatsApp Telemetry Notifications: Sending automated SMS/WhatsApp appointment receipts following human escalations.&lt;br&gt;
EHR Integration: Connecting triage outcomes directly with ABDM (Ayushman Bharat Digital Mission) health IDs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Links &amp;amp; Resources
🐙 GitHub Repository: &lt;a href="https://github.com/Viral-1998/VoiceOfBharat" rel="noopener noreferrer"&gt;https://github.com/Viral-1998/VoiceOfBharat&lt;/a&gt; Repo
⚡ Murf Falcon TTS Docs: Falcon 2 Documentation
🎙️ LiveKit Voice AI Quickstart: LiveKit Agents Guide
🏆 Challenge Details: VoiceForBharat Challenge 2026
Thank you to Murf AI and LiveKit for hosting the 10 Days of AI Voice Agents (#VoiceForBharat Edition)!&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>voiceai</category>
      <category>python</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
