<?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: Subhangi Dutta</title>
    <description>The latest articles on DEV Community by Subhangi Dutta (@subhangidutta23shipit).</description>
    <link>https://dev.to/subhangidutta23shipit</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%2F4078923%2Ffb372270-602c-4fe9-9aca-f267d86f94e3.jpg</url>
      <title>DEV Community: Subhangi Dutta</title>
      <link>https://dev.to/subhangidutta23shipit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/subhangidutta23shipit"/>
    <language>en</language>
    <item>
      <title>When the Water Rises: Building Sentinel AI Disaster Response in 10 Days</title>
      <dc:creator>Subhangi Dutta</dc:creator>
      <pubDate>Sat, 15 Aug 2026 12:21:54 +0000</pubDate>
      <link>https://dev.to/subhangidutta23shipit/navigating-floods-without-data-building-sentinel-voice-agent-in-10-days-j7c</link>
      <guid>https://dev.to/subhangidutta23shipit/navigating-floods-without-data-building-sentinel-voice-agent-in-10-days-j7c</guid>
      <description>&lt;p&gt;It was during the peak monsoon season when I read a distress report from a family stranded on their rooftop. Power was flickering, rain was hammering against the walls, and mobile data was down to a crawling 2G connection. They had a phone with 14% battery, but navigating complex portals or downloading 20-page government advisory PDFs was impossible.&lt;/p&gt;

&lt;p&gt;All they could do was make a direct voice call.&lt;/p&gt;

&lt;p&gt;When water is rising inside your living room, you cannot type or navigate dropdowns. You need an immediate, natural voice that provides real-time flood advisories, locates relief shelter beds, and dispatches rescue teams without delay.&lt;/p&gt;

&lt;p&gt;That became the driving mission behind &lt;strong&gt;Sentinel&lt;/strong&gt; — an autonomous, real-time Voice AI emergency dispatcher built over 10 days during the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Problem I Wanted to Solve
&lt;/h2&gt;

&lt;p&gt;Emergency management during Indian monsoons faces three critical bottlenecks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Information Fragmentation:&lt;/strong&gt; Emergency guidelines, live rainfall alerts, and shelter capacities exist across disconnected departments. Callers need instant answers (e.g., &lt;em&gt;"Where is the nearest shelter in Patna with medical support?"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Friction of Touch Interfaces:&lt;/strong&gt; Wet screens, low digital literacy, and high adrenaline make text UIs fail. Voice is the most accessible lifeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Drop During Escalation:&lt;/strong&gt; Traditional hotlines often disconnect or force victims to repeat their distress details to multiple operators.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2. System Architecture &amp;amp; Data Flow
&lt;/h2&gt;

&lt;p&gt;To ensure sub-second response times, Sentinel connects audio streaming, AI reasoning, and low-latency speech synthesis into a unified WebRTC pipeline powered by &lt;a href="https://livekit.io" rel="noopener noreferrer"&gt;LiveKit&lt;/a&gt;, &lt;a href="https://deepgram.com" rel="noopener noreferrer"&gt;Deepgram Nova-3&lt;/a&gt;, &lt;a href="https://ai.google.dev" rel="noopener noreferrer"&gt;Google Gemini&lt;/a&gt;, &lt;a href="https://murf.ai" rel="noopener noreferrer"&gt;Murf AI&lt;/a&gt;, and &lt;a href="https://open-meteo.com" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&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%2F7g6nv0pktem14aep6ccn.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%2F7g6nv0pktem14aep6ccn.png" alt="Disaster Response Sentinel System Architecture" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Caller Voice (Browser WebRTC / Inbound SIP)
            │
            ▼
 ┌─────────────────────────────────────────────────────────┐
 │               LiveKit WebRTC Transport                  │
 │      (Audio Ingestion &amp;amp; Silero VAD Turn Detection)       │
 └──────────────────────────┬──────────────────────────────┘
                            │
                            ▼
 ┌─────────────────────────────────────────────────────────┐
 │               Deepgram Nova-3 (STT)                     │
 │          (Continuous Multilingual Streaming)           │
 └──────────────────────────┬──────────────────────────────┘
                            │ Real-time Transcript
                            ▼
 ┌─────────────────────────────────────────────────────────┐
 │          Google Gemini 3.5 Flash-Lite (LLM)             │
 │                                                         │
 │  • Emergency Triage &amp;amp; Safety Guardrails                 │
 │  • SQLite Caller Memory &amp;amp; State Tracking                │
 │  • Open-Meteo Weather Telemetry Tools                   │
 │  • Dynamic Specialist Agent Handoff                     │
 └──────────────────────────┬──────────────────────────────┘
                            │ Streaming Text Tokens
                            ▼
 ┌─────────────────────────────────────────────────────────┐
 │               Murf Falcon 2 (TTS)                       │
 │  (Ultra-Fast Indian Voice Stream: Anisha/hi-IN)         │
 └──────────────────────────┬──────────────────────────────┘
                            │
                            ▼
 Direct Audio Stream back to Caller (&amp;lt;500ms Time-to-First-Byte)

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. The Sentinel Voice Interface
&lt;/h2&gt;

&lt;p&gt;Sentinel is designed with a lightweight, accessible interface featuring real-time Indian helpline integrations (112, NDRF 1078, Medical 108) and live ticker alerts for flood and drought monitoring across India.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sentinel in ready state with live disaster telemetry feeds:&lt;/em&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%2Fs1xskgs2qmw80lk9elbb.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%2Fs1xskgs2qmw80lk9elbb.png" alt=" " width="800" height="413"&gt;&lt;/a&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%2Frvld958sy1iissw3je6o.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%2Frvld958sy1iissw3je6o.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&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="c1"&gt;# Low-Latency Voice Pipeline Configuration
&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nova-3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;multi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.5-flash-lite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;murf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Anisha&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hi-IN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Conversation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SentenceTokenizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_sentence_len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;text_pacing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;turn_detection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;MultilingualModel&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;vad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;userdata&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vad&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;preemptive_generation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Real-Time Telemetry &amp;amp; Dispatch Dashboards
&lt;/h2&gt;

&lt;p&gt;To make Sentinel production-ready for disaster management cells, I built two specialized real-time monitoring consoles:&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Call Analytics &amp;amp; Success Engine
&lt;/h3&gt;

&lt;p&gt;The Call Metrics Dashboard tracks total inbound WebRTC and SIP telephony calls, analyzing whether each interaction successfully delivered verified telemetry or required human intervention.&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%2Fugre3ycfldi3nvvuf0jp.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%2Fugre3ycfldi3nvvuf0jp.png" alt=" " width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome Verification:&lt;/strong&gt; Automatically parses call logs and session duration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Success Criteria Standard:&lt;/strong&gt; Flags calls as successful only when verified relief shelter coordinates are provided or an escalation ticket is generated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. Live Emergency Dispatcher &amp;amp; PII Protection
&lt;/h3&gt;

&lt;p&gt;When callers report being trapped or injured, Sentinel flags the situation as &lt;code&gt;EMERGENCY&lt;/code&gt; urgency and generates a structured ticket.&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%2Fnu5zq1svyftfed16hshu.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%2Fnu5zq1svyftfed16hshu.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated PII Redaction:&lt;/strong&gt; Phone numbers, sensitive identification, and private contact info are masked automatically (&lt;code&gt;[REDACTED_PHONE]&lt;/code&gt;) to protect caller privacy while giving rescue units necessary triage notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status Lifecycle:&lt;/strong&gt; Live sync tracks requests across &lt;code&gt;Open&lt;/code&gt;, &lt;code&gt;In Progress&lt;/code&gt;, and &lt;code&gt;Resolved&lt;/code&gt; states with callback dispatch verification.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Specialist Handoffs: Shelter Information Agent
&lt;/h2&gt;

&lt;p&gt;When a caller specifically requests shelter availability or medical resources, Sentinel delegates the session to a Shelter Information Specialist using dynamic agent handoffs:&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ShelterInformationSpecialist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;call_context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_enter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;shelter_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disaster_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute_nearest_shelters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, I am the Shelter Information Specialist. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I have live capacity for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;shelter_data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Would you like details on pet policies, medical care, or check-in rules?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;say&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_interruptions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Challenges &amp;amp; Solutions: The "Silent Handoff"
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Problem:&lt;/strong&gt; When delegating from Sentinel Command to the Shelter Specialist, the previous turn concluded and the audio stream went silent, leaving the user waiting without feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Solution:&lt;/strong&gt; Implemented the &lt;code&gt;on_enter()&lt;/code&gt; lifecycle method in &lt;a href="https://docs.livekit.io/agents" rel="noopener noreferrer"&gt;LiveKit Agents&lt;/a&gt; to trigger an immediate audio synthesis turn via &lt;code&gt;session.say()&lt;/code&gt; using Murf Falcon the instant the handoff occurs, eliminating dead air.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. How to Run Sentinel
&lt;/h2&gt;

&lt;p&gt;You need &lt;code&gt;Python 3.10&lt;/code&gt; through &lt;code&gt;3.13&lt;/code&gt;, &lt;code&gt;Node.js 18+&lt;/code&gt;, and &lt;code&gt;pnpm 9&lt;/code&gt;. Clone the &lt;a href="https://www.google.com/url?sa=E&amp;amp;source=gmail&amp;amp;q=https://github.com/subhangidutta23-ship-it/murf-livekit-starter.git" rel="noopener noreferrer"&gt;public repository&lt;/a&gt; then create local environment files:&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;cp &lt;/span&gt;backend/.env.example backend/.env.local
&lt;span class="nb"&gt;cp &lt;/span&gt;frontend/.env.example frontend/.env.local

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

&lt;/div&gt;



&lt;p&gt;Add these required backend values to &lt;code&gt;backend/.env.local&lt;/code&gt;:&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=your_livekit_url
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
MURF_API_KEY=your_murf_api_key
GOOGLE_API_KEY=your_gemini_api_key
DEEPGRAM_API_KEY=your_deepgram_api_key

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start the Services
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;
git clone https://github.com/subhangidutta23-ship-it/sentinel-voice-ai.git
&lt;span class="nb"&gt;cd &lt;/span&gt;sentinel-voice-ai

&lt;span class="c"&gt;# 2. Start the Backend Worker&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;backend
.&lt;span class="se"&gt;\.&lt;/span&gt;venv&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\p&lt;/span&gt;ython.exe &lt;span class="nt"&gt;-m&lt;/span&gt; src.agent dev

&lt;span class="c"&gt;# 3. Start the Frontend Console&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../frontend
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm dev

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

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; in your browser to begin an emergency call session.&lt;/p&gt;




&lt;p&gt;Thank you to &lt;a href="https://murf.ai" rel="noopener noreferrer"&gt;Murf AI&lt;/a&gt; and the VoiceForBharat organizers for this 10-day challenge!&lt;/p&gt;

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