<?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: Asmi Raut</title>
    <description>The latest articles on DEV Community by Asmi Raut (@asmi_raut).</description>
    <link>https://dev.to/asmi_raut</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%2F4079289%2Fe276e30b-7aea-4d31-8e82-ddd82647386c.png</url>
      <title>DEV Community: Asmi Raut</title>
      <link>https://dev.to/asmi_raut</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asmi_raut"/>
    <language>en</language>
    <item>
      <title>Ashraya AI: My 10-Day Journey Building a Voice Agent for Disaster Response</title>
      <dc:creator>Asmi Raut</dc:creator>
      <pubDate>Sat, 15 Aug 2026 17:41:20 +0000</pubDate>
      <link>https://dev.to/asmi_raut/building-ashraya-ai-my-10-day-journey-building-a-voice-agent-for-disaster-response-20pc</link>
      <guid>https://dev.to/asmi_raut/building-ashraya-ai-my-10-day-journey-building-a-voice-agent-for-disaster-response-20pc</guid>
      <description>&lt;p&gt;From a simple voice assistant to a multi-agent disaster-response system&lt;/p&gt;

&lt;p&gt;Disasters don't wait for people to open an app, read instructions, or type a message.&lt;/p&gt;

&lt;p&gt;In an emergency, people need information quickly and sometimes they simply need to talk.&lt;/p&gt;

&lt;p&gt;That was the idea behind Ashraya AI, the disaster-response voice agent I built during the 10 Days of Voice Agents, VoiceForBharat Edition challenge by Murf AI.&lt;/p&gt;

&lt;p&gt;Over the past 10 days, I went from building a basic conversational voice agent to developing a system with memory, tools, outbound calling, call analytics, success tracking, human escalation, and specialist-agent handoffs.&lt;/p&gt;

&lt;p&gt;The goal was not to build another chatbot that can answer everything.&lt;/p&gt;

&lt;p&gt;The goal was to build a voice-first system that can guide people during disaster situations while being explicit about what it does not know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During disasters such as floods, earthquakes, cyclones, or other emergencies, information can become difficult to access.&lt;/p&gt;

&lt;p&gt;A person may need answers to questions like:&lt;/p&gt;

&lt;p&gt;What should I do right now?&lt;br&gt;
What should I take if I need to leave?&lt;br&gt;
Where can I get help?&lt;br&gt;
How should I prepare an elderly family member for evacuation?&lt;br&gt;
Can someone help me if I cannot handle the situation myself?&lt;/p&gt;

&lt;p&gt;A traditional text interface isn't always ideal in these situations.&lt;/p&gt;

&lt;p&gt;Someone may be frightened, busy helping family members, unable to type comfortably, or simply need to communicate naturally.&lt;/p&gt;

&lt;p&gt;That's where a voice interface can be useful.&lt;/p&gt;

&lt;p&gt;Ashraya AI is designed as a conversational disaster-response assistant that users can interact with through voice.&lt;/p&gt;

&lt;p&gt;The project focuses on providing practical guidance while maintaining strict safety boundaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Why Voice?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Voice changes the interaction model.&lt;/p&gt;

&lt;p&gt;Instead of navigating menus or typing questions, a user can simply say:&lt;/p&gt;

&lt;p&gt;"There is flooding near my house. What should I do?"&lt;/p&gt;

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

&lt;p&gt;"I may need to go to a shelter. What should I take?"&lt;/p&gt;

&lt;p&gt;The agent can respond conversationally and ask relevant follow-up questions.&lt;/p&gt;

&lt;p&gt;For a disaster-response use case, this matters because the user's attention may already be occupied by the emergency itself.&lt;/p&gt;

&lt;p&gt;But voice introduces another challenge:&lt;/p&gt;

&lt;p&gt;An AI that sounds confident can easily sound authoritative—even when it is wrong.&lt;/p&gt;

&lt;p&gt;That made safety and hallucination prevention one of the most important parts of this project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What is Ashraya AI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkpv4qj81ngedwzzer38f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkpv4qj81ngedwzzer38f.png" alt=" " width="800" height="548"&gt;&lt;/a&gt;&lt;br&gt;
Ashraya AI is a voice-based disaster-response assistant built using:&lt;/p&gt;

&lt;p&gt;Murf Falcon — text-to-speech&lt;br&gt;
LiveKit Agents — real-time voice-agent infrastructure&lt;br&gt;
Deepgram — speech-to-text&lt;br&gt;
Gemini — language model&lt;br&gt;
Python — application logic and agent orchestration&lt;/p&gt;

&lt;p&gt;The architecture evolved throughout the challenge.&lt;/p&gt;

&lt;p&gt;Instead of treating Ashraya as one giant agent that handles every possible question, I eventually introduced a specialist-agent architecture.&lt;/p&gt;

&lt;p&gt;The main agent handles the overall disaster-response conversation.&lt;/p&gt;

&lt;p&gt;When the conversation becomes specifically shelter-related, it can hand the conversation to a Shelter Information Specialist.&lt;/p&gt;

&lt;p&gt;This creates a much clearer separation of responsibilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. System Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At a high level, the voice interaction works like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                User
                  │
                  ▼
            Microphone
                  │
                  ▼
          Speech-to-Text
            (Deepgram)
                  │
                  ▼
          Main AI Agent
            (Gemini)
                  │
      ┌───────────┴───────────┐
      │                       │
      ▼                       ▼
General disaster       Shelter-related
   assistance             request
                              │
                              ▼
                 Shelter Information
                     Specialist
                              │
                              ▼
                     Shelter Guidance
                  (without fabricated
                   live information)
                              │
                              ▼
                     Murf Falcon TTS
                              │
                              ▼
                           User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The important design decision here is that the specialist is not simply another prompt inside the main agent.&lt;/p&gt;

&lt;p&gt;It has its own instructions, scope, limitations, and success tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Building the Voice Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A real-time voice agent fundamentally needs several components working together:&lt;/p&gt;

&lt;p&gt;Speech-to-Text&lt;/p&gt;

&lt;p&gt;The user's speech needs to be converted into text so the language model can understand it.&lt;/p&gt;

&lt;p&gt;I used Deepgram for speech recognition.&lt;/p&gt;

&lt;p&gt;Language Model&lt;/p&gt;

&lt;p&gt;The language model handles reasoning, conversation, tool selection, and responses.&lt;/p&gt;

&lt;p&gt;I used Gemini for this layer.&lt;/p&gt;

&lt;p&gt;Text-to-Speech&lt;/p&gt;

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

&lt;p&gt;For this project, I used Murf Falcon.&lt;/p&gt;

&lt;p&gt;Real-Time Transport&lt;/p&gt;

&lt;p&gt;The system needs a real-time communication layer to move audio between the user and the agent.&lt;/p&gt;

&lt;p&gt;I used LiveKit Agents.&lt;/p&gt;

&lt;p&gt;Together, these components form the basic voice-agent 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 Speech
     ↓
Speech-to-Text
     ↓
LLM / Agent Logic
     ↓
Text-to-Speech
     ↓
Spoken Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Giving the Agent a Clear Personality and Safety Boundary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the first lessons I learned was that an agent's prompt is not just about telling it what to say.&lt;/p&gt;

&lt;p&gt;It also needs to define:&lt;/p&gt;

&lt;p&gt;What it is allowed to do&lt;br&gt;
What it is not allowed to do&lt;br&gt;
When it should ask questions&lt;br&gt;
When it should use a tool&lt;br&gt;
When it should escalate&lt;br&gt;
What information it must never invent&lt;/p&gt;

&lt;p&gt;For a disaster-response system, this becomes especially important.&lt;/p&gt;

&lt;p&gt;For example, an unsafe agent might respond to:&lt;/p&gt;

&lt;p&gt;"Which government shelter is open near me?"&lt;/p&gt;

&lt;p&gt;with a fabricated answer such as:&lt;/p&gt;

&lt;p&gt;"The nearest shelter is XYZ School."&lt;/p&gt;

&lt;p&gt;That would be unacceptable.&lt;/p&gt;

&lt;p&gt;Ashraya AI is explicitly instructed not to invent live shelter locations, availability, capacity, evacuation routes, or government orders when it doesn't have verified real-time data.&lt;/p&gt;

&lt;p&gt;Instead, it should clearly state the limitation and direct the caller toward appropriate official local authorities.&lt;/p&gt;

&lt;p&gt;That distinction became one of the most important safety principles in the project:&lt;/p&gt;

&lt;p&gt;Not knowing something is better than confidently making something up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Memory for Returning Users&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another part of the project was giving Ashraya AI memory.&lt;/p&gt;

&lt;p&gt;The idea was to avoid treating every conversation as if it were happening with a completely new user.&lt;/p&gt;

&lt;p&gt;Memory can allow the system to retain useful conversational context and provide more consistent interactions when appropriate.&lt;/p&gt;

&lt;p&gt;However, memory in a disaster-response system also needs to be handled carefully.&lt;/p&gt;

&lt;p&gt;The agent should use relevant context without making assumptions about the user's current emergency.&lt;/p&gt;

&lt;p&gt;Current information from the caller should always take priority over stale conversational context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Tools and Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent is not limited to generating text.&lt;/p&gt;

&lt;p&gt;Tools allow it to perform specific actions.&lt;/p&gt;

&lt;p&gt;This is important because an AI agent should not rely on the language model to simulate actions that should actually happen in software.&lt;/p&gt;

&lt;p&gt;For example, instead of simply saying:&lt;/p&gt;

&lt;p&gt;"I'll connect you to a specialist."&lt;/p&gt;

&lt;p&gt;the system can invoke a handoff tool that actually transfers the conversation.&lt;/p&gt;

&lt;p&gt;This became particularly important during Day 9.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Multi-Agent Handoff: The Shelter Specialist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest architectural changes was introducing a dedicated Shelter Information Specialist.&lt;/p&gt;

&lt;p&gt;The main Ashraya AI agent is broader.&lt;/p&gt;

&lt;p&gt;The shelter specialist is intentionally narrow.&lt;/p&gt;

&lt;p&gt;It focuses on questions such as:&lt;/p&gt;

&lt;p&gt;What should I take to a shelter?&lt;br&gt;
How should I prepare before moving?&lt;br&gt;
What documents should I carry?&lt;br&gt;
What medicines or essential supplies should I take?&lt;br&gt;
What should I consider when travelling with children or older adults?&lt;br&gt;
What information should I obtain from local authorities?&lt;/p&gt;

&lt;p&gt;But it is not a general disaster-response agent.&lt;/p&gt;

&lt;p&gt;If someone asks the specialist:&lt;/p&gt;

&lt;p&gt;"What should I do during an earthquake?"&lt;/p&gt;

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

&lt;p&gt;"How do I perform CPR?"&lt;/p&gt;

&lt;p&gt;the specialist should not suddenly become a medical or earthquake-response expert.&lt;/p&gt;

&lt;p&gt;It should say that the question is outside its role and redirect the user appropriately.&lt;/p&gt;

&lt;p&gt;This is a subtle but important difference between a multi-agent system and a single agent with a very large prompt.&lt;/p&gt;

&lt;p&gt;The goal isn't:&lt;/p&gt;

&lt;p&gt;"Make every agent know everything."&lt;/p&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;p&gt;"Give each agent a clear responsibility and let the system decide who should handle the conversation."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Preventing Hallucinated Shelter Information&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was one of the most important safety challenges in the project.&lt;/p&gt;

&lt;p&gt;Suppose someone asks:&lt;/p&gt;

&lt;p&gt;"Which government shelter is open near me right now?"&lt;/p&gt;

&lt;p&gt;If the system doesn't have a verified live shelter database, it cannot honestly answer that question.&lt;/p&gt;

&lt;p&gt;So the Shelter Information Specialist explicitly states that it does not have verified real-time shelter-location or opening-status information.&lt;/p&gt;

&lt;p&gt;It can instead explain how the caller can obtain verified information from appropriate local authorities.&lt;/p&gt;

&lt;p&gt;This is an important design principle for real-world AI systems:&lt;/p&gt;

&lt;p&gt;The absence of information should produce a limitation—not a hallucination.&lt;/p&gt;

&lt;p&gt;A disaster-response assistant should be conservative when dealing with information that can directly affect someone's physical safety.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Outbound Calling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ashraya AI was also designed to support outbound voice interactions.&lt;/p&gt;

&lt;p&gt;This changes the experience from:&lt;/p&gt;

&lt;p&gt;"A user opens an AI application."&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;"The AI can initiate a voice conversation."&lt;/p&gt;

&lt;p&gt;For a disaster-response scenario, outbound communication could eventually be useful for alerting people, checking whether they need assistance, or providing information.&lt;/p&gt;

&lt;p&gt;However, outbound calling also introduces additional considerations around consent, privacy, call reliability, and responsible use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Human Escalation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fneeze8hkqf8uq91mtqmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fneeze8hkqf8uq91mtqmu.png" alt=" " width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ashraya AI is designed to assist callers during disaster situations, but it is not intended to replace human support.&lt;/p&gt;

&lt;p&gt;I added the ability for Ashraya AI to identify situations where human assistance may be required and route the conversation toward an escalation workflow.&lt;/p&gt;

&lt;p&gt;The system does not pretend that a human has been contacted unless the handoff actually occurs.&lt;/p&gt;

&lt;p&gt;This was an important design principle throughout the project:&lt;/p&gt;

&lt;p&gt;A reliable disaster-response AI should know its limits.&lt;/p&gt;

&lt;p&gt;The goal is not to make the AI handle every situation on its own. Instead, it should recognize when human assistance may be more appropriate and follow the appropriate escalation path.&lt;/p&gt;

&lt;p&gt;The agent should also never claim that a human operator, rescue team, or emergency service has been contacted unless that action has actually taken place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Call Analytics and Success Tracking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8d2o68uabd7s0oqds0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8d2o68uabd7s0oqds0x.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another lesson from the project was that a conversation isn't necessarily successful simply because the AI produced a response.&lt;/p&gt;

&lt;p&gt;I added call outcome tracking so conversations can be evaluated based on whether the intended objective was actually completed.&lt;/p&gt;

&lt;p&gt;For example, a shelter-related interaction should only be marked successful after meaningful shelter guidance has actually been provided.&lt;/p&gt;

&lt;p&gt;A transfer alone should not automatically count as success.&lt;/p&gt;

&lt;p&gt;This distinction is important for evaluating voice agents in production.&lt;/p&gt;

&lt;p&gt;You need to measure outcomes, not just conversations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. The Hardest Part: Making the Agent Stay in Its Lane&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest challenges I encountered was getting the specialist-agent architecture to behave correctly.&lt;/p&gt;

&lt;p&gt;At one point, the Shelter Information Specialist was still answering questions about earthquakes and CPR.&lt;/p&gt;

&lt;p&gt;That was a clear architectural failure.&lt;/p&gt;

&lt;p&gt;The specialist had been created, but its boundaries were not being enforced strongly enough.&lt;/p&gt;

&lt;p&gt;I tightened its instructions so that it explicitly refuses questions outside its shelter-information scope.&lt;/p&gt;

&lt;p&gt;This taught me an important lesson:&lt;/p&gt;

&lt;p&gt;Creating a specialist agent isn't enough. You have to define its boundaries as carefully as its capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. When a Successful Call Was Marked as a Failure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another challenge I faced was with call outcome tracking.&lt;/p&gt;

&lt;p&gt;During testing, I had conversations where the agent successfully handled the user's request, but the call was still marked as failed in the call analytics.&lt;/p&gt;

&lt;p&gt;At first, I wondered whether the caller needed to explicitly say something like "okay" or "thank you" before ending the conversation.&lt;/p&gt;

&lt;p&gt;But that wasn't the real issue.&lt;/p&gt;

&lt;p&gt;I realized that a conversation ending and a task being successfully completed are not necessarily the same thing.&lt;/p&gt;

&lt;p&gt;For Ashraya AI, a successful call should depend on whether the intended objective was actually achieved—not simply on whether the caller stayed on the line or how the conversation ended.&lt;/p&gt;

&lt;p&gt;This led me to add explicit success tracking for the relevant agent workflows, including the shelter specialist.&lt;/p&gt;

&lt;p&gt;That experience taught me an important lesson about voice agents:&lt;/p&gt;

&lt;p&gt;Don't use the end of a conversation as a substitute for measuring its outcome.&lt;/p&gt;

&lt;p&gt;For a real disaster-response system, reliable outcome tracking is just as important as generating a good response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;16. Another Important Lesson: "Transfer" Must Actually Transfer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most interesting things I learned was that saying:&lt;/p&gt;

&lt;p&gt;"I'm connecting you to the Shelter Information Specialist."&lt;/p&gt;

&lt;p&gt;doesn't mean the transfer actually happened.&lt;/p&gt;

&lt;p&gt;The application needs to:&lt;/p&gt;

&lt;p&gt;Detect the appropriate intent.&lt;br&gt;
Invoke the transfer tool.&lt;br&gt;
Create or activate the specialist agent.&lt;br&gt;
Pass the relevant conversation context.&lt;br&gt;
Return control to the specialist.&lt;br&gt;
Ensure the specialist follows its own instructions.&lt;/p&gt;

&lt;p&gt;If any of these steps fail, the main agent may continue speaking.&lt;/p&gt;

&lt;p&gt;That creates a confusing experience where the user asks:&lt;/p&gt;

&lt;p&gt;"Who am I speaking to?"&lt;/p&gt;

&lt;p&gt;and the system gives inconsistent answers.&lt;/p&gt;

&lt;p&gt;This was a useful reminder that agent handoffs are software orchestration problems as much as they are prompting problems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How to Run the Project&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The project is built using Python, LiveKit, Murf Falcon, Deepgram, and Gemini, with separate backend and frontend components.&lt;/p&gt;

&lt;p&gt;Step 1: Clone the Repository&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Step 2: Backend Configuration&lt;/p&gt;

&lt;p&gt;Create a .env.local file inside the backend directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;backend/.env.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the required backend credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;LIVEKIT_URL&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;wss://your-project.livekit.cloud&lt;/span&gt;
&lt;span class="py"&gt;LIVEKIT_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_livekit_api_key&lt;/span&gt;
&lt;span class="py"&gt;LIVEKIT_API_SECRET&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_livekit_api_secret&lt;/span&gt;


&lt;span class="py"&gt;MURF_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_murf_api_key&lt;/span&gt;
&lt;span class="py"&gt;DEEPGRAM_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_deepgram_api_key&lt;/span&gt;
&lt;span class="py"&gt;GOOGLE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_gemini_api_key&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These credentials allow the backend to connect to LiveKit and use the speech and language services required by Ashraya AI.&lt;/p&gt;

&lt;p&gt;Step 3: Frontend Configuration&lt;/p&gt;

&lt;p&gt;Create a .env.local file inside the frontend directory:&lt;/p&gt;

&lt;p&gt;frontend/.env.local&lt;/p&gt;

&lt;p&gt;Configure the LiveKit connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;LIVEKIT_URL&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;wss://your-project.livekit.cloud&lt;/span&gt;
&lt;span class="py"&gt;LIVEKIT_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_livekit_api_key&lt;/span&gt;
&lt;span class="py"&gt;LIVEKIT_API_SECRET&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_livekit_api_secret&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend uses these values to connect to the LiveKit environment and communicate with the voice agent.&lt;/p&gt;

&lt;p&gt;Step 4: Install Backend Dependencies&lt;/p&gt;

&lt;p&gt;Navigate to the backend:&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;backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a virtual environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Activate it on Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;.venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 5: Run the Agent&lt;/p&gt;

&lt;p&gt;Start the Python LiveKit agent using the project's configured entry point.&lt;/p&gt;

&lt;p&gt;The frontend can then be started separately and connected to the LiveKit room to test Ashraya AI through a voice conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18. Testing the Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The easiest way to test a voice agent is through real conversations rather than only checking whether the code runs.&lt;/p&gt;

&lt;p&gt;For Ashraya AI, I tested scenarios such as:&lt;/p&gt;

&lt;p&gt;General disaster question&lt;/p&gt;

&lt;p&gt;"There is flooding near my house. What should I do?"&lt;/p&gt;

&lt;p&gt;Shelter question&lt;/p&gt;

&lt;p&gt;"I may need to go to a shelter. What should I take?"&lt;/p&gt;

&lt;p&gt;Live-information limitation&lt;/p&gt;

&lt;p&gt;"Which government shelter is open near me right now?"&lt;/p&gt;

&lt;p&gt;Specialist boundary&lt;/p&gt;

&lt;p&gt;After transferring to the Shelter Information Specialist:&lt;/p&gt;

&lt;p&gt;"What should I take to the shelter?"&lt;/p&gt;

&lt;p&gt;and then testing an unrelated question such as:&lt;/p&gt;

&lt;p&gt;"How do I perform CPR?"&lt;/p&gt;

&lt;p&gt;The specialist should not start behaving like a general medical assistant.&lt;/p&gt;

&lt;p&gt;Testing these boundary cases was just as important as testing successful conversations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;19. What I Would Improve Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ashraya AI is still a prototype, and there are several areas I would improve before treating it as a production disaster-response system.&lt;/p&gt;

&lt;p&gt;Verified real-time shelter data&lt;/p&gt;

&lt;p&gt;The biggest improvement would be connecting the shelter specialist to an authoritative, continuously updated government or disaster-management data source.&lt;/p&gt;

&lt;p&gt;That would allow the system to answer location-specific shelter questions based on verified information rather than simply explaining that live data is unavailable.&lt;/p&gt;

&lt;p&gt;Better emergency escalation&lt;/p&gt;

&lt;p&gt;A production version would need carefully designed integration with emergency services and human operators.&lt;/p&gt;

&lt;p&gt;More robust multilingual support&lt;/p&gt;

&lt;p&gt;India has enormous linguistic diversity.&lt;/p&gt;

&lt;p&gt;Expanding reliable multilingual and code-mixed conversations would make the system more accessible.&lt;/p&gt;

&lt;p&gt;Stronger evaluation&lt;/p&gt;

&lt;p&gt;I would also build a larger evaluation suite covering:&lt;/p&gt;

&lt;p&gt;Hallucination resistance&lt;br&gt;
Specialist boundaries&lt;br&gt;
Emergency scenarios&lt;br&gt;
Tool failures&lt;br&gt;
Handoff failures&lt;br&gt;
Call completion&lt;br&gt;
Latency&lt;br&gt;
False transfers&lt;br&gt;
Successful outcomes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;20. What I Learned in 10 Days&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest lesson from this challenge wasn't how to connect speech-to-text to an LLM and then to text-to-speech.&lt;/p&gt;

&lt;p&gt;It was learning that a useful voice agent is much more than a model that can talk.&lt;/p&gt;

&lt;p&gt;A reliable system needs:&lt;/p&gt;

&lt;p&gt;Conversation + tools + memory + guardrails + orchestration + observability + failure handling.&lt;/p&gt;

&lt;p&gt;And sometimes the most important behavior of an AI agent is knowing when not to answer.&lt;/p&gt;

&lt;p&gt;Building Ashraya AI also changed how I think about multi-agent systems.&lt;/p&gt;

&lt;p&gt;I initially thought the challenge was to make one agent increasingly capable.&lt;/p&gt;

&lt;p&gt;By the end, I realized that a better approach is often to build a system of focused agents with clear responsibilities.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Over these 10 days, Ashraya AI evolved from a voice assistant into a more structured disaster-response system.&lt;/p&gt;

&lt;p&gt;It can:&lt;/p&gt;

&lt;p&gt;Have natural voice conversations&lt;br&gt;
Use an Indian voice powered by Murf Falcon&lt;br&gt;
Follow explicit safety guardrails&lt;br&gt;
Maintain conversational context&lt;br&gt;
Use tools&lt;br&gt;
Support outbound calling&lt;br&gt;
Track call outcomes&lt;br&gt;
Escalate when necessary&lt;br&gt;
Hand shelter-related conversations to a specialist agent&lt;br&gt;
Refuse to fabricate information it cannot verify&lt;/p&gt;

&lt;p&gt;The project is still a work in progress.&lt;/p&gt;

&lt;p&gt;And that's probably the most valuable part of the experience.&lt;/p&gt;

&lt;p&gt;Building a voice agent isn't about making AI sound impressive.&lt;/p&gt;

&lt;p&gt;It's about making the system useful, predictable, and honest about its limitations.&lt;/p&gt;

&lt;p&gt;That's the direction I want to continue exploring.&lt;/p&gt;

&lt;p&gt;Tech Stack&lt;/p&gt;

&lt;p&gt;Murf Falcon — Text-to-Speech&lt;br&gt;
LiveKit Agents — Real-time voice infrastructure&lt;br&gt;
Deepgram — Speech-to-Text&lt;br&gt;
Gemini — LLM&lt;br&gt;
Python — Agent logic and orchestration&lt;/p&gt;

&lt;p&gt;Project Links&lt;/p&gt;

&lt;p&gt;🔗 GitHub: &lt;a href="https://github.com/AsmiRaut23/murf-livekit-starter" rel="noopener noreferrer"&gt;https://github.com/AsmiRaut23/murf-livekit-starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💼 LinkedIn: &lt;a href="http://www.linkedin.com/in/asmiraut" rel="noopener noreferrer"&gt;www.linkedin.com/in/asmiraut&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>voiceagents</category>
      <category>voiceforbharat</category>
    </item>
  </channel>
</rss>
