<?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: Muthukkumaran B</title>
    <description>The latest articles on DEV Community by Muthukkumaran B (@muthukkumaran_b).</description>
    <link>https://dev.to/muthukkumaran_b</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%2F4079005%2F7541f944-3593-40e5-8ad0-ba96acfce48a.png</url>
      <title>DEV Community: Muthukkumaran B</title>
      <link>https://dev.to/muthukkumaran_b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muthukkumaran_b"/>
    <language>en</language>
    <item>
      <title>Building ASHA: A Real-Time Multi-Agent Voice AI Health Guide for Bharat</title>
      <dc:creator>Muthukkumaran B</dc:creator>
      <pubDate>Sat, 15 Aug 2026 13:33:42 +0000</pubDate>
      <link>https://dev.to/muthukkumaran_b/building-asha-a-real-time-multi-agent-voice-ai-health-guide-for-bharat-8ja</link>
      <guid>https://dev.to/muthukkumaran_b/building-asha-a-real-time-multi-agent-voice-ai-health-guide-for-bharat-8ja</guid>
      <description>&lt;h1&gt;
  
  
  Building ASHA: A Real-Time Multi-Agent Voice AI Health Guide for Bharat
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Day 10 — 10 Days of AI Voice Agents #VoiceForBharat
&lt;/h2&gt;

&lt;p&gt;Over the past 10 days, I participated in the &lt;strong&gt;10 Days of AI Voice Agents — #VoiceForBharat Edition&lt;/strong&gt; challenge.&lt;/p&gt;

&lt;p&gt;For this challenge, I built &lt;strong&gt;ASHA&lt;/strong&gt;, a real-time AI voice assistant designed around a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if accessing basic health guidance could be as simple as having a conversation?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project started from the &lt;strong&gt;Murf LiveKit Starter&lt;/strong&gt;, which provided the initial foundation for building a real-time voice agent using LiveKit, Deepgram, an LLM, and Murf Falcon TTS.&lt;/p&gt;

&lt;p&gt;Rather than building the entire voice infrastructure from scratch, I used that foundation as a starting point and adapted it for the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; use case.&lt;/p&gt;

&lt;p&gt;My work focused on configuring and extending the voice pipeline, shaping ASHA's healthcare-oriented behavior, adding application-level capabilities, experimenting with persistent context and specialist agent workflows, and working through the practical challenges of building a real-time voice application.&lt;/p&gt;

&lt;p&gt;This post is my Day 10 technical retrospective covering the architecture, implementation, safety considerations, technical roadblocks, and lessons learned.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. The Problem
&lt;/h1&gt;

&lt;p&gt;Access to information is not always the same as access to usable information.&lt;/p&gt;

&lt;p&gt;Many digital services assume that users are comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading long instructions&lt;/li&gt;
&lt;li&gt;Typing queries&lt;/li&gt;
&lt;li&gt;Navigating multiple screens&lt;/li&gt;
&lt;li&gt;Understanding technical terminology&lt;/li&gt;
&lt;li&gt;Using conventional application interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For users with different levels of digital literacy, a conversational voice interface can provide a much more natural interaction model.&lt;/p&gt;

&lt;p&gt;This becomes particularly interesting in healthcare.&lt;/p&gt;

&lt;p&gt;A user may not know the technical name for a symptom. They may simply describe what they are experiencing in everyday language.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I've been feeling dizzy since morning."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of forcing that user through a complex interface, a voice assistant can allow them to simply explain the situation naturally.&lt;/p&gt;

&lt;p&gt;That led to the concept of &lt;strong&gt;ASHA&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The name is inspired by the idea of an accessible community health guide — not an automated replacement for a healthcare professional.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Why Voice?
&lt;/h1&gt;

&lt;p&gt;Text-based AI is powerful, but voice introduces a completely different interaction model.&lt;/p&gt;

&lt;p&gt;A typical chatbot looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User types
    ↓
Server processes
    ↓
AI responds
    ↓
User reads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A real-time voice agent looks more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User speaks
    ↓
Audio streaming
    ↓
Speech-to-Text
    ↓
LLM reasoning
    ↓
Text-to-Speech
    ↓
Audio streaming
    ↓
User hears response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second model introduces several additional engineering challenges.&lt;/p&gt;

&lt;p&gt;Now the application has to deal with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audio streaming&lt;/li&gt;
&lt;li&gt;Microphone permissions&lt;/li&gt;
&lt;li&gt;WebRTC&lt;/li&gt;
&lt;li&gt;Speech recognition&lt;/li&gt;
&lt;li&gt;LLM latency&lt;/li&gt;
&lt;li&gt;TTS latency&lt;/li&gt;
&lt;li&gt;Connection state&lt;/li&gt;
&lt;li&gt;Real-time synchronization&lt;/li&gt;
&lt;li&gt;Interruptions&lt;/li&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That complexity is exactly what made this challenge interesting to me.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Starting Point: Murf LiveKit Starter
&lt;/h1&gt;

&lt;p&gt;Before discussing ASHA's architecture, it is important to explain where the project started.&lt;/p&gt;

&lt;p&gt;The project is based on the &lt;strong&gt;Murf LiveKit Starter&lt;/strong&gt;, which provides a foundation for building a real-time voice agent with LiveKit and Murf.&lt;/p&gt;

&lt;p&gt;The starter provided several important components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LiveKit-based real-time communication&lt;/li&gt;
&lt;li&gt;Python voice-agent structure&lt;/li&gt;
&lt;li&gt;Deepgram speech recognition&lt;/li&gt;
&lt;li&gt;LLM integration&lt;/li&gt;
&lt;li&gt;Murf Falcon text-to-speech&lt;/li&gt;
&lt;li&gt;Next.js frontend structure&lt;/li&gt;
&lt;li&gt;Local development workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This meant I didn't have to reinvent the underlying real-time voice infrastructure.&lt;/p&gt;

&lt;p&gt;Instead, I could concentrate on the application layer and the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; problem.&lt;/p&gt;

&lt;p&gt;The development approach became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Murf LiveKit Starter
        ↓
Understand the architecture
        ↓
Configure the voice pipeline
        ↓
Adapt the agent for ASHA
        ↓
Add healthcare-oriented capabilities
        ↓
Implement memory and tool workflows
        ↓
Add specialist-agent architecture
        ↓
Test and debug
        ↓
ASHA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was also an important lesson for me as a developer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Building on an existing foundation is not the same as blindly using it. You still need to understand the architecture before you can meaningfully extend it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  4. System Architecture
&lt;/h1&gt;

&lt;p&gt;The core ASHA architecture uses a full-duplex real-time voice pipeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──────────────────┐
                    │     User / Mic   │
                    └────────┬─────────┘
                             │
                             │ WebRTC Audio
                             ▼
                    ┌──────────────────┐
                    │     LiveKit      │
                    │  Voice Transport │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │  Deepgram Nova-3 │
                    │       STT        │
                    └────────┬─────────┘
                             │
                         Transcript
                             │
                             ▼
                    ┌──────────────────┐
                    │  Groq + LLaMA    │
                    │     3.3 70B      │
                    └────────┬─────────┘
                             │
                  ┌──────────┼──────────┐
                  │          │          │
                  ▼          ▼          ▼
                PHC       Patient    Appointment
               Lookup     Memory     Specialist
                  │          │          │
                  └──────────┼──────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Safety / Triage  │
                    │    Workflows     │
                    └────────┬─────────┘
                             │
                       ┌─────┴─────┐
                       │           │
                       ▼           ▼
                    Normal      Emergency
                   Response     Escalation
                                   │
                                   ▼
                              Webhook
                                   │
                                   ▼
                           Human Workflow

                             │
                             ▼
                    ┌──────────────────┐
                    │   Murf Falcon    │
                    │       TTS        │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │  User / Speaker  │
                    └──────────────────┘

                             │
                             ▼
                    ┌──────────────────┐
                    │ SQLite Analytics │
                    └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The major components are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Real-time communication&lt;/td&gt;
&lt;td&gt;LiveKit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice transport&lt;/td&gt;
&lt;td&gt;WebRTC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speech-to-Text&lt;/td&gt;
&lt;td&gt;Deepgram Nova-3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;Groq + LLaMA 3.3 70B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text-to-Speech&lt;/td&gt;
&lt;td&gt;Murf Falcon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice&lt;/td&gt;
&lt;td&gt;Anisha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js / React&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Persistence&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analytics&lt;/td&gt;
&lt;td&gt;FastAPI + SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External workflows&lt;/td&gt;
&lt;td&gt;Webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent architecture&lt;/td&gt;
&lt;td&gt;Multi-agent handoffs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  5. LiveKit: The Real-Time Foundation
&lt;/h1&gt;

&lt;p&gt;One of the most important parts of ASHA is &lt;strong&gt;LiveKit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A voice assistant cannot behave like a normal request-response web application.&lt;/p&gt;

&lt;p&gt;With a traditional API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
   ↓
Wait
   ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voice requires something closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Audio Stream
   ⇅
Real-Time Communication
   ⇅
Audio Stream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LiveKit provides the real-time communication infrastructure required for this type of application.&lt;/p&gt;

&lt;p&gt;The basic architecture becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   │
   ▼
LiveKit
   │
   ▼
Voice Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the application to focus on the actual agent logic instead of implementing a custom audio transport layer.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Speech-to-Text with Deepgram
&lt;/h1&gt;

&lt;p&gt;The first AI stage is speech recognition.&lt;/p&gt;

&lt;p&gt;When the user speaks, the audio needs to be converted into text before the language model can reason about it.&lt;/p&gt;

&lt;p&gt;ASHA uses &lt;strong&gt;Deepgram Nova-3&lt;/strong&gt; for this stage.&lt;/p&gt;

&lt;p&gt;The conceptual flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Microphone
    ↓
Audio Stream
    ↓
Deepgram Nova-3
    ↓
Transcript
    ↓
LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voice input is fundamentally different from typed input.&lt;/p&gt;

&lt;p&gt;Users may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pause&lt;/li&gt;
&lt;li&gt;Repeat themselves&lt;/li&gt;
&lt;li&gt;Correct themselves&lt;/li&gt;
&lt;li&gt;Mix languages&lt;/li&gt;
&lt;li&gt;Use informal terminology&lt;/li&gt;
&lt;li&gt;Speak with different accents&lt;/li&gt;
&lt;li&gt;Use regional expressions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful voice agent therefore needs to be designed around imperfect conversational input.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. LLM Reasoning with Groq
&lt;/h1&gt;

&lt;p&gt;Once the user's speech is transcribed, the request is passed to the language model.&lt;/p&gt;

&lt;p&gt;ASHA uses &lt;strong&gt;LLaMA 3.3 70B through Groq&lt;/strong&gt; for conversational reasoning.&lt;/p&gt;

&lt;p&gt;The LLM is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding user intent&lt;/li&gt;
&lt;li&gt;Maintaining conversational context&lt;/li&gt;
&lt;li&gt;Deciding when clarification is required&lt;/li&gt;
&lt;li&gt;Determining whether a tool should be called&lt;/li&gt;
&lt;li&gt;Routing specialized requests&lt;/li&gt;
&lt;li&gt;Generating the response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Request
     ↓
Intent Understanding
     ↓
Context Analysis
     ↓
Tool / Agent Decision
     ↓
Response Generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, the LLM is not treated as an unquestionable medical authority.&lt;/p&gt;

&lt;p&gt;This distinction is particularly important in healthcare.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Murf Falcon: Giving ASHA a Voice
&lt;/h1&gt;

&lt;p&gt;The response generated by the LLM needs to be converted back into natural speech.&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;Murf Falcon TTS&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;The pipeline becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Speech
     ↓
Deepgram STT
     ↓
LLaMA 3.3 70B
     ↓
Response Text
     ↓
Murf Falcon
     ↓
Spoken Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ASHA uses the &lt;strong&gt;Anisha&lt;/strong&gt; voice for its Indian English conversational experience.&lt;/p&gt;

&lt;p&gt;For a &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; project, this is particularly important.&lt;/p&gt;

&lt;p&gt;The voice isn't simply an output format.&lt;/p&gt;

&lt;p&gt;It is part of the user experience.&lt;/p&gt;

&lt;p&gt;A conversational assistant should feel approachable rather than robotic.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Primary Health Centre Information
&lt;/h1&gt;

&lt;p&gt;A healthcare voice assistant becomes significantly more useful when it can do more than generate general responses.&lt;/p&gt;

&lt;p&gt;ASHA incorporates a &lt;strong&gt;PHC lookup capability&lt;/strong&gt; designed to provide structured healthcare facility information.&lt;/p&gt;

&lt;p&gt;Depending on the available data source, the system can retrieve information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primary Health Centre details&lt;/li&gt;
&lt;li&gt;Operating information&lt;/li&gt;
&lt;li&gt;Facility addresses&lt;/li&gt;
&lt;li&gt;Available services&lt;/li&gt;
&lt;li&gt;Contact information&lt;/li&gt;
&lt;li&gt;Location-related information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important architectural principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The LLM should reason about the request, but factual healthcare facility information should come from a structured source.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of asking the LLM to invent a hospital address or telephone number, the agent can invoke a dedicated lookup tool.&lt;/p&gt;

&lt;p&gt;The flow becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User:
"Where is the nearest PHC?"

        ↓

Speech-to-Text

        ↓

ASHA Agent

        ↓

PHC Lookup Tool

        ↓

Structured Healthcare Data

        ↓

LLM formats the result

        ↓

Murf Falcon TTS

        ↓

User hears the response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation between reasoning and factual retrieval is especially important in healthcare applications.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Patient Context and Memory
&lt;/h1&gt;

&lt;p&gt;Another capability explored in ASHA is persistent conversational context.&lt;/p&gt;

&lt;p&gt;A voice assistant becomes more useful when a returning user doesn't have to repeat basic information every time.&lt;/p&gt;

&lt;p&gt;The system can maintain application-level context such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Age group&lt;/li&gt;
&lt;li&gt;Language preference&lt;/li&gt;
&lt;li&gt;Previous interaction context&lt;/li&gt;
&lt;li&gt;Previous triage outcome&lt;/li&gt;
&lt;li&gt;Conversation state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;First Interaction
      ↓
User provides permitted information
      ↓
Consent / Profile Update
      ↓
Profile Storage
      ↓
Future Interaction
      ↓
ASHA retrieves permitted context
      ↓
More contextual conversation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, memory should not mean storing everything.&lt;/p&gt;

&lt;p&gt;A production healthcare system would require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit consent&lt;/li&gt;
&lt;li&gt;Data minimization&lt;/li&gt;
&lt;li&gt;Access control&lt;/li&gt;
&lt;li&gt;Encryption&lt;/li&gt;
&lt;li&gt;Retention policies&lt;/li&gt;
&lt;li&gt;Deletion mechanisms&lt;/li&gt;
&lt;li&gt;Appropriate compliance review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The principle is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Store only what is necessary, and only when the user has appropriate control over that data.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  11. Safety Guardrails
&lt;/h1&gt;

&lt;p&gt;Healthcare is a domain where an AI system needs stronger boundaries than a general-purpose chatbot.&lt;/p&gt;

&lt;p&gt;ASHA is therefore designed around several safety principles.&lt;/p&gt;

&lt;p&gt;The assistant should not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claim to provide a definitive diagnosis&lt;/li&gt;
&lt;li&gt;Pretend to have physically examined a patient&lt;/li&gt;
&lt;li&gt;Prescribe medication independently&lt;/li&gt;
&lt;li&gt;Provide unsafe medication dosages&lt;/li&gt;
&lt;li&gt;Give false certainty about serious symptoms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, it should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask clarification questions&lt;/li&gt;
&lt;li&gt;Provide general health information&lt;/li&gt;
&lt;li&gt;Recognize potentially serious situations&lt;/li&gt;
&lt;li&gt;Encourage appropriate professional care&lt;/li&gt;
&lt;li&gt;Escalate when configured safety conditions are met&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if a user says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have severe chest pain and I'm struggling to breathe."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The correct response is not to confidently diagnose the condition.&lt;/p&gt;

&lt;p&gt;The system should recognize the possibility of an emergency and guide the user toward appropriate urgent medical assistance.&lt;/p&gt;

&lt;p&gt;This led to one of my biggest design principles:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The goal isn't to make the AI sound like a doctor. The goal is to make the AI useful without pretending to be one.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  12. Emergency Detection and Human Escalation
&lt;/h1&gt;

&lt;p&gt;Healthcare conversations introduce situations where the AI should not attempt to handle everything autonomously.&lt;/p&gt;

&lt;p&gt;ASHA therefore includes a &lt;strong&gt;human-in-the-loop escalation concept&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Potential red-flag symptoms can trigger an escalation workflow.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User describes symptoms
          ↓
ASHA analyses conversation
          ↓
Potential red flag detected
          ↓
Explain urgency
          ↓
Obtain appropriate confirmation / consent
          ↓
Create escalation event
          ↓
Webhook
          ↓
Human healthcare workflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The webhook architecture makes this extensible.&lt;/p&gt;

&lt;p&gt;An escalation event could eventually be connected to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Health officer notification&lt;/li&gt;
&lt;li&gt;Hospital workflow&lt;/li&gt;
&lt;li&gt;Emergency operations system&lt;/li&gt;
&lt;li&gt;SMS/notification service&lt;/li&gt;
&lt;li&gt;Internal healthcare dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI should assist emergency workflows, not replace emergency professionals.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  13. SQLite-Based Patient and Analytics Layer
&lt;/h1&gt;

&lt;p&gt;For the prototype, SQLite provides a lightweight persistence layer.&lt;/p&gt;

&lt;p&gt;It can support application data such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User profiles&lt;/li&gt;
&lt;li&gt;Conversation state&lt;/li&gt;
&lt;li&gt;Workflow state&lt;/li&gt;
&lt;li&gt;Application events&lt;/li&gt;
&lt;li&gt;Analytics information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SQLite is useful during development because it requires minimal infrastructure while still providing structured storage.&lt;/p&gt;

&lt;p&gt;The analytics architecture can follow an event-oriented approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Call Started
     ↓
Conversation Started
     ↓
User Request
     ↓
Tool Invoked
     ↓
Workflow Completed
     ↓
Call Ended
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From these events, the application can track metrics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total calls&lt;/li&gt;
&lt;li&gt;Completed interactions&lt;/li&gt;
&lt;li&gt;Tool usage&lt;/li&gt;
&lt;li&gt;Escalation events&lt;/li&gt;
&lt;li&gt;Early disconnects&lt;/li&gt;
&lt;li&gt;Workflow outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important principle is to avoid unnecessarily exposing raw personal information in analytics.&lt;/p&gt;

&lt;p&gt;A production implementation would require stronger:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Encryption&lt;/li&gt;
&lt;li&gt;Data retention&lt;/li&gt;
&lt;li&gt;Audit logging&lt;/li&gt;
&lt;li&gt;Privacy controls&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  14. Real-Time Analytics Dashboard
&lt;/h1&gt;

&lt;p&gt;To make the system easier to monitor, ASHA includes a &lt;strong&gt;FastAPI-based analytics dashboard&lt;/strong&gt; backed by SQLite.&lt;/p&gt;

&lt;p&gt;The dashboard provides an operational view of the voice-agent system.&lt;/p&gt;

&lt;p&gt;Rather than focusing on the contents of private conversations, the analytics layer can focus on structured events and system-level metrics.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌───────────────────────────────┐
│       ASHA Dashboard           │
├───────────────────────────────┤
│ Total Calls                   │
│ Completed Conversations       │
│ Tool Invocations              │
│ Escalation Events             │
│ Early Disconnects             │
│ Workflow Success Rate         │
└───────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation is useful because monitoring the system should not require exposing every detail of a user's conversation.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Multi-Agent Architecture
&lt;/h1&gt;

&lt;p&gt;As the application grows, putting every capability into one voice agent becomes difficult to maintain.&lt;/p&gt;

&lt;p&gt;ASHA therefore explores a &lt;strong&gt;multi-agent architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The main ASHA agent acts as the conversational entry point.&lt;/p&gt;

&lt;p&gt;When the user moves into a specialized workflow, the conversation can be handed to a specialist.&lt;/p&gt;

&lt;p&gt;The architecture looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────┐
                    │   ASHA Agent    │
                    │   Main Agent    │
                    └────────┬────────┘
                             │
                       Intent Detection
                             │
              ┌──────────────┴──────────────┐
              │                             │
              ▼                             ▼
       General Guidance             Appointment Request
                                            │
                                            ▼
                              ┌─────────────────────────┐
                              │ Appointment Specialist  │
                              └────────────┬────────────┘
                                           │
                                           ▼
                                  Booking Workflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The appointment specialist can focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding appointment intent&lt;/li&gt;
&lt;li&gt;Collecting required booking information&lt;/li&gt;
&lt;li&gt;Validating the workflow&lt;/li&gt;
&lt;li&gt;Communicating with the appropriate booking service&lt;/li&gt;
&lt;li&gt;Returning the result to the main conversation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation provides several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller prompts&lt;/li&gt;
&lt;li&gt;Clearer responsibilities&lt;/li&gt;
&lt;li&gt;Easier testing&lt;/li&gt;
&lt;li&gt;Easier debugging&lt;/li&gt;
&lt;li&gt;Better maintainability&lt;/li&gt;
&lt;li&gt;Easier future expansion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same architecture could later support specialists for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Healthcare facilities&lt;/li&gt;
&lt;li&gt;Government health programs&lt;/li&gt;
&lt;li&gt;Follow-up workflows&lt;/li&gt;
&lt;li&gt;Administrative services&lt;/li&gt;
&lt;li&gt;Appointment scheduling&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  16. Why Multi-Agent Instead of One Large Agent?
&lt;/h1&gt;

&lt;p&gt;At first glance, it may seem easier to put everything into one agent.&lt;/p&gt;

&lt;p&gt;But that creates a growing problem.&lt;/p&gt;

&lt;p&gt;Imagine one agent responsible for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Health Guidance
+ PHC Search
+ Appointments
+ Patient Memory
+ Emergency Escalation
+ Government Programs
+ Analytics
+ Administrative Workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt becomes larger.&lt;/p&gt;

&lt;p&gt;The tools become harder to reason about.&lt;/p&gt;

&lt;p&gt;Testing becomes more complicated.&lt;/p&gt;

&lt;p&gt;A multi-agent architecture instead follows separation of concerns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ASHA
 │
 ├── General Health Agent
 │
 ├── PHC Specialist
 │
 ├── Appointment Specialist
 │
 └── Escalation Workflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each component can have a narrower responsibility.&lt;/p&gt;

&lt;p&gt;This makes the architecture easier to extend.&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Technical Roadblock: Empty Tool Schemas
&lt;/h1&gt;

&lt;p&gt;One of the most interesting problems I encountered involved LLM function calling.&lt;/p&gt;

&lt;p&gt;I initially created a zero-parameter handoff function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;transfer_to_appointment_specialist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From a Python perspective, this is completely valid.&lt;/p&gt;

&lt;p&gt;However, the inference endpoint rejected the generated tool schema.&lt;/p&gt;

&lt;p&gt;The error was related to a schema where &lt;code&gt;required&lt;/code&gt; existed without the expected &lt;code&gt;properties&lt;/code&gt; definition.&lt;/p&gt;

&lt;p&gt;The problem wasn't the handoff logic itself.&lt;/p&gt;

&lt;p&gt;It was the generated JSON schema.&lt;/p&gt;

&lt;p&gt;The solution was to provide an explicit parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;booking_intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schedule_appointment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produced a valid tool schema while still allowing the same handoff behavior.&lt;/p&gt;

&lt;p&gt;The lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LLM tools are API contracts, not merely Python functions.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When integrating function calling across different providers, always inspect the JSON schema being sent to the model.&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Technical Roadblock: &lt;code&gt;0.0.0.0&lt;/code&gt; vs &lt;code&gt;localhost&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Another problem I encountered was related to local networking.&lt;/p&gt;

&lt;p&gt;The backend server can bind to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn app:app &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But opening:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://0.0.0.0:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in a browser can result in an invalid-address error.&lt;/p&gt;

&lt;p&gt;The distinction is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is a server &lt;strong&gt;bind address&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For local browser access, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding the difference between a bind address and a client-accessible address prevented me from debugging the wrong component.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Running ASHA Locally
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;Node.js 18+&lt;/li&gt;
&lt;li&gt;uv&lt;/li&gt;
&lt;li&gt;pnpm&lt;/li&gt;
&lt;li&gt;A LiveKit project&lt;/li&gt;
&lt;li&gt;Murf API credentials&lt;/li&gt;
&lt;li&gt;Deepgram API credentials&lt;/li&gt;
&lt;li&gt;LLM API credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1 — Clone the Repository
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/muthukkumaranb/murf-voice-ai.git
&lt;span class="nb"&gt;cd &lt;/span&gt;murf-voice-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2 — Configure Environment Variables
&lt;/h2&gt;

&lt;p&gt;Create the appropriate local environment configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LIVEKIT_URL=wss://&amp;lt;your-livekit-project&amp;gt;.livekit.cloud
LIVEKIT_API_KEY=&amp;lt;your-livekit-api-key&amp;gt;
LIVEKIT_API_SECRET=&amp;lt;your-livekit-api-secret&amp;gt;

MURF_API_KEY=&amp;lt;your-murf-api-key&amp;gt;
DEEPGRAM_API_KEY=&amp;lt;your-deepgram-api-key&amp;gt;

GROQ_API_KEY=&amp;lt;your-groq-api-key&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your implementation uses additional services, configure their credentials as required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never commit API keys to GitHub.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Install Backend Dependencies
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
uv &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If required by the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python src/agent.py download-files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4 — Install Frontend Dependencies
&lt;/h2&gt;

&lt;p&gt;From the repository root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;frontend
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5 — Start the Agent
&lt;/h2&gt;

&lt;p&gt;From the backend directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python src/agent.py dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6 — Start the Dashboard
&lt;/h2&gt;

&lt;p&gt;If using the analytics dashboard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python src/dashboard.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard can be accessed locally through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 7 — Start the Frontend
&lt;/h2&gt;

&lt;p&gt;From the frontend directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allow microphone access and start the voice session.&lt;/p&gt;




&lt;h1&gt;
  
  
  20. Deployment Architecture
&lt;/h1&gt;

&lt;p&gt;The application can be structured with separate frontend and backend deployments.&lt;/p&gt;

&lt;p&gt;A potential architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──────────────┐
                    │   Vercel     │
                    │   Frontend   │
                    └──────┬───────┘
                           │
                           ▼
                    ┌──────────────┐
                    │   LiveKit    │
                    │    Cloud     │
                    └──────┬───────┘
                           │
                           ▼
                    ┌──────────────┐
                    │   Railway    │
                    │    Agent     │
                    └──────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation allows the frontend and long-running voice agent to scale independently.&lt;/p&gt;

&lt;p&gt;I currently don't have a public demo link for ASHA.&lt;/p&gt;

&lt;p&gt;The GitHub repository is therefore the primary project reference.&lt;/p&gt;




&lt;h1&gt;
  
  
  21. What I Learned During the 10 Days
&lt;/h1&gt;

&lt;p&gt;The biggest lesson from these 10 days is that building a voice agent is much more than connecting an LLM to a microphone.&lt;/p&gt;

&lt;p&gt;A working voice experience requires multiple systems to cooperate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Audio
  ↓
WebRTC
  ↓
LiveKit
  ↓
Speech Recognition
  ↓
LLM Reasoning
  ↓
Tool Calling
  ↓
Agent Routing
  ↓
Text-to-Speech
  ↓
Audio Playback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A failure anywhere in that chain can affect the entire user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 1 — Real-time systems are different
&lt;/h2&gt;

&lt;p&gt;Voice applications are much less tolerant of latency than text interfaces.&lt;/p&gt;

&lt;p&gt;Even small delays can make a conversation feel unnatural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 2 — Streaming matters
&lt;/h2&gt;

&lt;p&gt;The goal isn't simply to produce an answer.&lt;/p&gt;

&lt;p&gt;The goal is to maintain the feeling of a continuous conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 3 — Tool schemas matter
&lt;/h2&gt;

&lt;p&gt;A Python function can be perfectly valid while its generated JSON schema is invalid for an LLM provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 4 — Provider integration is rarely plug-and-play
&lt;/h2&gt;

&lt;p&gt;Every provider has its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API contracts&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Schema requirements&lt;/li&gt;
&lt;li&gt;SDK behavior&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Streaming implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lesson 5 — Voice UX is different
&lt;/h2&gt;

&lt;p&gt;A response that looks good as text may sound terrible when spoken.&lt;/p&gt;

&lt;p&gt;Voice responses should generally be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Concise&lt;/li&gt;
&lt;li&gt;Conversational&lt;/li&gt;
&lt;li&gt;Easy to understand&lt;/li&gt;
&lt;li&gt;Naturally paced&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lesson 6 — Healthcare requires restraint
&lt;/h2&gt;

&lt;p&gt;The most impressive AI response isn't necessarily the safest response.&lt;/p&gt;

&lt;p&gt;For healthcare-oriented applications, knowing &lt;strong&gt;when not to make a claim&lt;/strong&gt; is a critical part of responsible system design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 7 — Building on existing infrastructure is a skill
&lt;/h2&gt;

&lt;p&gt;Starting from an existing open-source foundation does not eliminate engineering work.&lt;/p&gt;

&lt;p&gt;It shifts the problem.&lt;/p&gt;

&lt;p&gt;Instead of building the entire infrastructure from scratch, you have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the existing architecture&lt;/li&gt;
&lt;li&gt;Identify extension points&lt;/li&gt;
&lt;li&gt;Modify components safely&lt;/li&gt;
&lt;li&gt;Integrate new workflows&lt;/li&gt;
&lt;li&gt;Debug interactions between systems&lt;/li&gt;
&lt;li&gt;Keep the resulting application maintainable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was one of the most valuable lessons from this challenge.&lt;/p&gt;




&lt;h1&gt;
  
  
  22. What's Next for ASHA?
&lt;/h1&gt;

&lt;p&gt;The current implementation is a foundation rather than the final product.&lt;/p&gt;

&lt;p&gt;There are several areas I want to explore next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regional Indian Languages
&lt;/h2&gt;

&lt;p&gt;The long-term vision includes stronger support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tamil&lt;/li&gt;
&lt;li&gt;Hindi&lt;/li&gt;
&lt;li&gt;Telugu&lt;/li&gt;
&lt;li&gt;Malayalam&lt;/li&gt;
&lt;li&gt;Kannada&lt;/li&gt;
&lt;li&gt;Hinglish&lt;/li&gt;
&lt;li&gt;Tanglish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not simply translation.&lt;/p&gt;

&lt;p&gt;The system should understand conversational expressions and code-mixed speech naturally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Telephony
&lt;/h2&gt;

&lt;p&gt;A future version could connect ASHA to telephony infrastructure.&lt;/p&gt;

&lt;p&gt;That would allow users to interact with the system without necessarily requiring a web browser.&lt;/p&gt;

&lt;p&gt;Potential technologies include SIP-based infrastructure and telephony providers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified Healthcare Information
&lt;/h2&gt;

&lt;p&gt;The PHC and healthcare-information layer could be expanded using authoritative and regularly maintained data sources.&lt;/p&gt;

&lt;p&gt;The principle would remain:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use trusted data sources for facts and use the LLM for reasoning and conversation.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Stronger Human-in-the-Loop Workflows
&lt;/h2&gt;

&lt;p&gt;For high-risk situations, ASHA should become better at routing users toward qualified professionals rather than attempting to handle everything autonomously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Privacy
&lt;/h2&gt;

&lt;p&gt;A production healthcare platform would require considerably stronger security architecture.&lt;/p&gt;

&lt;p&gt;Future work would include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong authentication&lt;/li&gt;
&lt;li&gt;Fine-grained authorization&lt;/li&gt;
&lt;li&gt;Encryption&lt;/li&gt;
&lt;li&gt;Consent management&lt;/li&gt;
&lt;li&gt;Data minimization&lt;/li&gt;
&lt;li&gt;Retention policies&lt;/li&gt;
&lt;li&gt;Audit logging&lt;/li&gt;
&lt;li&gt;Secure deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Production-Ready Infrastructure
&lt;/h2&gt;

&lt;p&gt;The prototype currently relies on lightweight infrastructure such as SQLite.&lt;/p&gt;

&lt;p&gt;A production system would likely require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalable databases&lt;/li&gt;
&lt;li&gt;Distributed services&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Fault tolerance&lt;/li&gt;
&lt;li&gt;Secure secret management&lt;/li&gt;
&lt;li&gt;Automated deployment&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  23. Final Thoughts
&lt;/h1&gt;

&lt;p&gt;When I started this challenge, the idea seemed simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build an AI that people can talk to.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After 10 days, I realized that the sentence hides an entire engineering stack.&lt;/p&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WebRTC + real-time communication + STT + LLM + TTS + frontend + backend + tool calling + state management + networking + error handling + user experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And when the application is aimed at healthcare, there is another layer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;responsibility.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ASHA is not a replacement for doctors or healthcare professionals.&lt;/p&gt;

&lt;p&gt;It is a prototype exploring how conversational voice interfaces could make certain kinds of health information and guidance easier to access.&lt;/p&gt;

&lt;p&gt;The most valuable part of this challenge wasn't simply getting the agent to speak.&lt;/p&gt;

&lt;p&gt;It was understanding everything that happens behind the conversation.&lt;/p&gt;

&lt;p&gt;From debugging tool schemas to working with real-time communication, from configuring multiple AI providers to designing specialist workflows, every stage introduced a different engineering problem.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Murf LiveKit Starter&lt;/strong&gt; gave me the foundation to explore these technologies without having to build the entire voice infrastructure from zero.&lt;/p&gt;

&lt;p&gt;The challenge was then to understand that foundation, adapt it, extend it, and turn it toward a problem that matters.&lt;/p&gt;

&lt;p&gt;That is what made these 10 days worth doing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ten days.&lt;br&gt;
One voice agent.&lt;br&gt;
Multiple systems.&lt;br&gt;
A lot of debugging.&lt;br&gt;
And plenty of lessons learned. 🚀&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  24. Project Repository
&lt;/h1&gt;

&lt;p&gt;The complete project is available on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/muthukkumaranb/murf-voice-ai" rel="noopener noreferrer"&gt;ASHA — Murf Voice AI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository is based on the &lt;strong&gt;Murf LiveKit Starter&lt;/strong&gt; and contains the project source code and setup instructions.&lt;/p&gt;

&lt;p&gt;There is currently &lt;strong&gt;no public demo link&lt;/strong&gt;, so the GitHub repository is the primary way to explore the project.&lt;/p&gt;




&lt;h1&gt;
  
  
  Technology Stack
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LiveKit&lt;/strong&gt; — Real-time communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebRTC&lt;/strong&gt; — Real-time audio transport&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deepgram Nova-3&lt;/strong&gt; — Speech-to-Text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groq&lt;/strong&gt; — Low-latency inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLaMA 3.3 70B&lt;/strong&gt; — Conversational reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Murf Falcon&lt;/strong&gt; — Text-to-Speech&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anisha&lt;/strong&gt; — Indian English voice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — Voice agent backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js / React&lt;/strong&gt; — Frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; — Lightweight persistence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; — Analytics/dashboard layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks&lt;/strong&gt; — External workflow notifications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;uv&lt;/strong&gt; — Python package management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; — Frontend package management&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;p&gt;A huge thank you to the &lt;strong&gt;Murf AI team&lt;/strong&gt; for organizing the &lt;strong&gt;10 Days of AI Voice Agents — #VoiceForBharat Edition&lt;/strong&gt; challenge.&lt;/p&gt;

&lt;p&gt;The challenge gave me an opportunity to move beyond simply experimenting with AI APIs and actually think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time architecture&lt;/li&gt;
&lt;li&gt;Voice UX&lt;/li&gt;
&lt;li&gt;LLM integration&lt;/li&gt;
&lt;li&gt;Tool calling&lt;/li&gt;
&lt;li&gt;Multi-agent systems&lt;/li&gt;
&lt;li&gt;Healthcare safety&lt;/li&gt;
&lt;li&gt;Data persistence&lt;/li&gt;
&lt;li&gt;Human-in-the-loop workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a special acknowledgement to the team behind the &lt;strong&gt;Murf LiveKit Starter&lt;/strong&gt;, which provided the foundation for the real-time voice infrastructure used in this project.&lt;/p&gt;

&lt;p&gt;Building on an existing foundation allowed me to spend more time exploring the actual problem, architecture, and application experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connect With the Project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/muthukkumaranb/murf-voice-ai" rel="noopener noreferrer"&gt;https://github.com/muthukkumaranb/murf-voice-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt;&lt;br&gt;
Currently not publicly available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt;&lt;br&gt;
10 Days of AI Voice Agents — #VoiceForBharat&lt;/p&gt;




&lt;h1&gt;
  
  
  10DaysofAIVoiceAgents #VoiceForBharat #MurfFalcon #VoiceAI
&lt;/h1&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>devchallenge</category>
    </item>
  </channel>
</rss>
