<?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: Anshika Sahu</title>
    <description>The latest articles on DEV Community by Anshika Sahu (@anshika_sahu_92e1df5254ef).</description>
    <link>https://dev.to/anshika_sahu_92e1df5254ef</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%2F4078597%2F1c29f754-62b8-4635-b682-300bf0558fc1.png</url>
      <title>DEV Community: Anshika Sahu</title>
      <link>https://dev.to/anshika_sahu_92e1df5254ef</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anshika_sahu_92e1df5254ef"/>
    <language>en</language>
    <item>
      <title>🛍️ What Happens When Your Local Shopkeeper Gets a Voice Powered by AI?</title>
      <dc:creator>Anshika Sahu</dc:creator>
      <pubDate>Sun, 16 Aug 2026 05:19:27 +0000</pubDate>
      <link>https://dev.to/anshika_sahu_92e1df5254ef/what-happens-when-your-local-shopkeeper-gets-a-voice-powered-by-ai-58jl</link>
      <guid>https://dev.to/anshika_sahu_92e1df5254ef/what-happens-when-your-local-shopkeeper-gets-a-voice-powered-by-ai-58jl</guid>
      <description>&lt;h2&gt;
  
  
  India doesn't always shop through search bars, filters, and forms. Sometimes, it starts with a simple conversation — “Bhaiya, ye available hai?"
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Building a Multilingual Local Commerce AI Voice Agent — My 10-Day Voice AI Journey
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;🏆 &lt;strong&gt;Challenge&lt;/strong&gt;: 10 Days of Voice Agents — &lt;em&gt;VoiceForBharat Edition&lt;/em&gt;&lt;br&gt;&lt;br&gt;
🏬 &lt;strong&gt;Track&lt;/strong&gt;: Local Commerce&lt;br&gt;&lt;br&gt;
👤 &lt;strong&gt;Author&lt;/strong&gt;: Senior AI Engineer &amp;amp; Voice AI Developer&lt;br&gt;&lt;br&gt;
📦 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/sahuanshika557-sys/murf-ai" rel="noopener noreferrer"&gt;github.com/sahuanshika557-sys/murf-ai&lt;/a&gt;  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🌟 1. Introduction &amp;amp; Motivation
&lt;/h2&gt;

&lt;p&gt;Building voice AI applications for real-world commerce is fundamentally different from building text-based chatbots. &lt;/p&gt;

&lt;p&gt;In a text chat, users tolerate latencies of 3–5 seconds while watching typing indicators. In natural voice interaction, a 1-second delay creates awkward silence, turn-taking is delicate, and real human consumers speak fluidly in code-mixed dialects like &lt;strong&gt;Hinglish&lt;/strong&gt; (&lt;em&gt;Hindi + English&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Over the past 10 days of the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; challenge, I designed, engineered, and refined &lt;strong&gt;Dukandar AI&lt;/strong&gt; (&lt;em&gt;दुकानदार AI&lt;/em&gt;) — a production-grade, ultra-low latency, multilingual Local Commerce AI Voice Agent.&lt;/p&gt;

&lt;p&gt;This comprehensive technical article breaks down the system architecture, code-mixed language processing, multi-agent routing mechanics, consent-gated SQLite memory, zero-hallucination catalogue verification, real-time analytics observability, and the actual engineering lessons learned while shipping this project.&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%2Fc1ilfkzzhqotq1fdd1d3.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%2Fc1ilfkzzhqotq1fdd1d3.png" alt="Dukandar AI Dashboard Overview - Live Metrics &amp;amp; Voice Assistant Platform" width="799" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 1: Dukandar AI Premium Dark Dashboard — Real-time DB Call Metrics, Live Assistant Status &amp;amp; Bilingual Navigation.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 2. The Local Commerce Friction in India
&lt;/h2&gt;

&lt;p&gt;Local commerce connects millions of neighbourhood stores (&lt;em&gt;kirana shops&lt;/em&gt;, fresh produce vendors, local bakeries, electronics outlets) with local residents. However, digital accessibility remains heavily fragmented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗣️ &lt;strong&gt;The Literacy &amp;amp; Language Barrier&lt;/strong&gt;: Millions of consumers prefer speaking in Hindi, Hinglish, or regional dialects rather than typing structured search queries into English mobile apps.&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Inventory &amp;amp; Pricing Uncertainty&lt;/strong&gt;: Customers repeatedly make manual phone calls just to check if basic essential goods (&lt;em&gt;e.g., 5kg Basmati Rice or MP Chakki Atta&lt;/em&gt;) are currently in stock.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Post-Purchase Friction&lt;/strong&gt;: When items arrive damaged or payment gateway errors occur, customers get lost in complex menu trees trying to check return eligibility or reach human support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Voice AI?
&lt;/h3&gt;

&lt;p&gt;Voice is the most intuitive interface human beings possess. A multilingual voice agent capable of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding fluid code-mixed Hinglish queries&lt;/li&gt;
&lt;li&gt;Querying live inventory datasets with zero hallucination&lt;/li&gt;
&lt;li&gt;Maintaining persistent customer memory with strict user consent&lt;/li&gt;
&lt;li&gt;Seamlessly handing off complex refund requests to domain specialist agents&lt;/li&gt;
&lt;li&gt;Escalating financial disputes to human support via structured tickets&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...can democratize local commerce access for millions of citizens.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ 3. System Architecture &amp;amp; Multilingual Pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend Experience &amp;amp; Voice Interface
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dukandar AI&lt;/strong&gt; combines state-of-the-art real-time audio transport with high-performance STT, LLM reasoning, and ultra-fast neural speech synthesis:&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%2Fltyrgg4rf3s9e5vz3v8a.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%2Fltyrgg4rf3s9e5vz3v8a.png" alt="Dukandar AI Voice Assistant Central Hub &amp;amp; Quick Actions Panel" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 2: Voice Assistant Hub — Central WebRTC Mic Controls, Organic Audio Waveform &amp;amp; One-Touch Quick Actions.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
    subgraph Client_Layer ["🌐 Client &amp;amp; Interface Layer"]
        UI["💻 Next.js 15 Web Frontend\n(http://localhost:3000)"]
        SIP["📱 Linphone / Phone Network\n(Outbound SIP Telephony)"]
        DASH["📊 Analytics &amp;amp; Support Portal\n(/analytics &amp;amp; /support)"]
    end

    subgraph Transport_Layer ["⚡ Real-Time Transport"]
        LK["📡 LiveKit WebRTC &amp;amp; SIP Gateway"]
    end

    subgraph Pipeline_Layer ["🎙️ Voice AI Pipeline"]
        STT["🎤 Deepgram STT\n(Nova-3 Multilingual)"]
        LLM["🧠 Google Gemini LLM\n(gemini-3.5-flash-lite)"]
        TTS["🔊 Murf Falcon TTS\n(Anisha Voice / ~55ms Latency)"]
        VAD["🎛️ Silero VAD &amp;amp;\nLiveKit Turn Detector"]
    end

    subgraph Multi_Agent_Core ["🤖 Multi-Agent Core (backend/src/agent.py)"]
        MAIN["🛍️ Main Commerce Agent\n(Anisha - Catalogue &amp;amp; Store Info)"]
        SPEC["📦 Returns &amp;amp; Refunds Specialist\n(Specialist Agent Target)"]
    end

    subgraph Persistence_Tools ["⚙️ Tools &amp;amp; Persistence Engine"]
        MEM["🧠 Persistent Memory (customers table)"]
        CAT["🛒 Catalogue Tool (lookup_product)"]
        CALC["🧮 Order Calculator (calculate_order_total)"]
        RET["📦 Return/Refund Tools (check_refund_status)"]
        ESC["👨‍💼 Escalation Tool (create_escalation)"]
        DB[("💾 SQLite Database\nbackend/local_commerce_memory.db")]
    end

    UI &amp;lt;--&amp;gt;|"WebRTC Audio &amp;amp; Data Channel"| LK
    SIP &amp;lt;--&amp;gt;|"SIP / TLS RTP Audio"| LK
    LK &amp;lt;--&amp;gt; STT
    LK &amp;lt;--&amp;gt; TTS
    STT --&amp;gt; MAIN
    STT --&amp;gt; SPEC
    MAIN --&amp;gt; LLM
    SPEC --&amp;gt; LLM
    LLM --&amp;gt; TTS
    TTS --&amp;gt; LK

    MAIN &amp;lt;--&amp;gt;|"Context-Preserving Handoff"| SPEC
    MAIN &amp;lt;--&amp;gt; MEM
    MAIN &amp;lt;--&amp;gt; CAT
    MAIN &amp;lt;--&amp;gt; CALC
    MAIN &amp;lt;--&amp;gt; ESC
    SPEC &amp;lt;--&amp;gt; RET
    SPEC &amp;lt;--&amp;gt; ESC

    MEM &amp;lt;--&amp;gt; DB
    CAT &amp;lt;--&amp;gt; DB
    CALC &amp;lt;--&amp;gt; DB
    RET &amp;lt;--&amp;gt; DB
    ESC &amp;lt;--&amp;gt; DB
    DASH &amp;lt;--&amp;gt;|"Next.js API &amp;amp; db_api.py"| DB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Component Breakdown:
&lt;/h3&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;th&gt;Key Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;STT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Deepgram Nova-3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-language detection (&lt;code&gt;language="multi"&lt;/code&gt;) handling English, Hindi &amp;amp; Hinglish transcriptions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Google Gemini 3.5 Flash Lite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low-latency instruction following, tool calling, and bilingual dialogue generation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TTS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Murf Falcon TTS&lt;/strong&gt; (&lt;code&gt;Anisha&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Streaming audio chunk-by-chunk with ~55ms latency for natural Indian English/Hindi tone.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transport&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;LiveKit Agents SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-duplex WebRTC audio streaming, turn detection, and custom data channel events.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Next.js 15 + Tailwind CSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interactive UI with 5 agent visual states (&lt;code&gt;READY&lt;/code&gt;, &lt;code&gt;CONNECTING&lt;/code&gt;, &lt;code&gt;LISTENING&lt;/code&gt;, &lt;code&gt;SPEAKING&lt;/code&gt;, &lt;code&gt;ENDED&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; (&lt;code&gt;backend/...db&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;6 relational tables (&lt;code&gt;customers&lt;/code&gt;, &lt;code&gt;orders&lt;/code&gt;, &lt;code&gt;call_logs&lt;/code&gt;, &lt;code&gt;opt_outs&lt;/code&gt;, &lt;code&gt;escalations&lt;/code&gt;, &lt;code&gt;calls&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📅 4. The 10-Day Build Evolution
&lt;/h2&gt;

&lt;p&gt;Below is the step-by-step feature evolution built over the 10-day sprint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 01 ──&amp;gt; 🎙️ Core STT → LLM → TTS Pipeline Setup
Day 02 ──&amp;gt; 🛡️ Standardized Persona (Anisha) &amp;amp; Commercial Guardrails
Day 03 ──&amp;gt; 💻 Responsive Frontend UI (5 Agent States + Waveform Visualizers)
Day 04 ──&amp;gt; 🧠 Persistent Customer Memory &amp;amp; Opt-in Consent System
Day 05 ──&amp;gt; 🛒 Real Product Catalogue Tools (products.csv + Zero-Hallucination)
Day 06 ──&amp;gt; 📱 Outbound SIP Telephony (Automated Phone Calls via Linphone)
Day 07 ──&amp;gt; 👨‍💼 Human Support Escalation Engine (Ticket IDs: LC-2026-XXXX)
Day 08 ──&amp;gt; 📊 Interactive Call Analytics Dashboard &amp;amp; Failure Classification
Day 09 ──&amp;gt; 🔀 Multi-Agent Handoff Architecture (Main Commerce &amp;lt;-&amp;gt; Specialist)
Day 10 ──&amp;gt; 💎 Full Architecture Audit, Documentation Polish &amp;amp; Release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🗣️ 5. Code-Mixed Multilingual Voice Experience (Hinglish/Hindi/English)
&lt;/h2&gt;

&lt;p&gt;In India, voice interfaces fail if they force users into rigid English or overly formal Devanagari Hindi. &lt;strong&gt;Dukandar AI&lt;/strong&gt; dynamically tracks the user's spoken register and responds naturally in the same style.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Conversation Samples:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;💬 &lt;strong&gt;Hinglish Code-Mixed Inquiry&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer&lt;/strong&gt;: &lt;em&gt;"Basmati rice kitne ka hai aur stock mein hai kya?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dukandar AI&lt;/strong&gt;: &lt;em&gt;"Basmati Rice 5kg pack is listed at ₹320 with 25 units available in stock."&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Devanagari Hindi Inquiry&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer&lt;/strong&gt;: &lt;em&gt;"बासमती चावल कितने के हैं?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dukandar AI&lt;/strong&gt;: &lt;em&gt;"बासमती चावल की सूचीबद्ध कीमत ₹320 है, और 25 यूनिट्स उपलब्ध हैं।"&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Budget Filter Query&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer&lt;/strong&gt;: &lt;em&gt;"Mujhe ek phone chahiye under 15000."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dukandar AI&lt;/strong&gt;: &lt;em&gt;"Main aapke budget 15,000 INR ke andar available items check kar sakti hoon. Hamare paas Redmi Note 13 standard model ₹13,999 mein available hai."&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 6. Consent-Gated Customer Memory Engine
&lt;/h2&gt;

&lt;p&gt;Customer memory elevates a voice bot into a personal shopping assistant. However, storing user details without consent violates privacy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Strict Opt-In Consent Flow:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[User Utterance] ──&amp;gt; "My name is Ramesh and I prefer morning delivery."
                           │
                           ▼
[Agent Detection] ──&amp;gt; Extracts potential facts (Name, Delivery Preference)
                           │
                           ▼
[Agent Asks Consent] ──&amp;gt; "Would you like me to remember your name and morning preference for future calls?"
                           │
             ┌─────────────┴─────────────┐
             ▼                           ▼
      [User: "Yes, remember it"]  [User: "No, don't save"]
             │                           │
             ▼                           ▼
   Execute save_caller_memory      Discard temporary data
   (Commits to SQLite)             (Zero DB write)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Database Schema (&lt;code&gt;customers&lt;/code&gt; table):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;language_preference&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;preferred_delivery_slot&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;usual_quantity&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;past_orders&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;last_interaction&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On subsequent calls, the agent recognizes returning callers instantly:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Welcome back Ramesh! Should I check availability for your usual 5kg Basmati Rice order?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🛡️ 7. Zero-Hallucination Inventory &amp;amp; Order Tools
&lt;/h2&gt;

&lt;p&gt;A common failure mode in commercial LLM bots is guessing product prices or inventing stock numbers. &lt;strong&gt;Dukandar AI&lt;/strong&gt; enforces a strict &lt;strong&gt;Zero-Hallucination Guardrail&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Commerce Experience &amp;amp; Product Catalogue
&lt;/h3&gt;

&lt;p&gt;Whenever price, stock, or total cost is requested, the agent &lt;strong&gt;MUST&lt;/strong&gt; call executable tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;lookup_product(product_query)&lt;/code&gt;: Queries local catalogue dataset (&lt;code&gt;data/products.csv&lt;/code&gt;) for verified unit pricing, stock quantity, packaging size, and seller location.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;calculate_order_total(product_query, quantity)&lt;/code&gt;: Checks available stock, validates requested quantity, applies tax/delivery rules, and returns the subtotal in INR.&lt;/li&gt;
&lt;/ol&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%2Fzq6rjgpltgt1fkjtl9bu.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%2Fzq6rjgpltgt1fkjtl9bu.png" alt="Dukandar AI Local Store Product Catalogue Grid with Item Images" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3: Interactive Local Store Product Catalogue — Item Images, Category Filter Chips, Live Stock Badges &amp;amp; Unit Pricing.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline &amp;amp; Tool Failure Resilience:
&lt;/h3&gt;

&lt;p&gt;If tool execution fails or the catalogue dataset is unreachable (&lt;code&gt;SIMULATE_CATALOGUE_FAILURE=true&lt;/code&gt;), the LLM is explicitly forbidden from guessing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Agent Fallback Response&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"I apologize, but our product catalogue is currently unreachable. I don't want to give you an incorrect price. Please try again in a few moments."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔀 8. Context-Preserving Multi-Agent Handoff Mechanics
&lt;/h2&gt;

&lt;p&gt;In Day 9, the architecture evolved from a monolithic assistant into a specialized &lt;strong&gt;Multi-Agent Network&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  ┌──────────────────────────────┐
                  │ Main Commerce Agent (Anisha) │
                  │  (Store Info &amp;amp; Catalogue)    │
                  └──────────────┬───────────────┘
                                 │
                 User Intent: "I want to return item"
               Tool: handoff_to_returns_specialist
                                 │
                                 ▼
               ┌───────────────────────────────────┐
               │ Returns &amp;amp; Refunds Specialist Agent│
               │ (Eligibility, Order Validation)   │
               └─────────────────┬─────────────────┘
                                 │
                 User Intent: "What items do you sell?"
                     Tool: handoff_to_main_agent
                                 │
                                 ▼
                  ┌──────────────────────────────┐
                  │ Main Commerce Agent (Anisha) │
                  └──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Context Preservation Guarantee:
&lt;/h3&gt;

&lt;p&gt;When transitioning between agents, the system passes a structured &lt;code&gt;HandoffContext&lt;/code&gt; containing caller history, order details, user intent, and active language register. &lt;/p&gt;

&lt;p&gt;The user &lt;strong&gt;never&lt;/strong&gt; has to repeat information to the new agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Specialist Agent&lt;/strong&gt;: &lt;em&gt;"Hello Ramesh! Anisha transferred your call regarding order #12345. I can see you received a damaged pack of Basmati Rice. Let me immediately check your return eligibility."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚨 9. Human Support Escalation Workflow
&lt;/h2&gt;

&lt;p&gt;When high-stakes financial issues arise (&lt;em&gt;e.g., payment deducted without order confirmation&lt;/em&gt;), automated AI handling becomes risky. The agent pauses problem-solving and initiates the &lt;strong&gt;Human Support Escalation Flow&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Permission&lt;/strong&gt;:
&lt;em&gt;"I understand your payment was deducted. I can create an urgent ticket for our human support supervisor. May I submit this request with your phone number?"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ticket Creation&lt;/strong&gt;:
Calls &lt;code&gt;create_escalation()&lt;/code&gt; tool to generate a unique tracking ID (&lt;code&gt;LC-2026-0001&lt;/code&gt;) in SQLite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spoken Reference ID&lt;/strong&gt;:
&lt;em&gt;"Your support ticket has been created! Reference ID is LC-2026-0001. A representative will contact you within 2 hours."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Dashboard View&lt;/strong&gt;:
Tickets instantly appear on the operational support dashboard at &lt;code&gt;http://localhost:3000/support&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📊 10. Real-Time Call Analytics &amp;amp; Failure Diagnostics
&lt;/h2&gt;

&lt;p&gt;Every call session is monitored by the analytics engine to compute quality metrics and track system performance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         ┌────────────────────────────────────────────────────────┐
         │              Call Analytics Dashboard                  │
         ├───────────────────┬──────────────────┬─────────────────┤
         │ Total Calls: 148  │ Success Rate: 92%│ Avg Latency: 55ms│
         └───────────────────┴──────────────────┴─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Automatic Call Outcome Classification:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;COMPLETED&lt;/code&gt;&lt;/strong&gt;: Customer objective fully resolved (&lt;em&gt;product lookup, total calculated, or escalation ticket created&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;USER_HANGUP&lt;/code&gt;&lt;/strong&gt;: Customer disconnected mid-conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;TOOL_FAILURE&lt;/code&gt;&lt;/strong&gt;: Inventory DB or pricing calculation tool threw an error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;API_FAILURE&lt;/code&gt;&lt;/strong&gt;: Upstream LLM or STT service timeout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;INCOMPLETE_TASK&lt;/code&gt;&lt;/strong&gt;: Call ended without clear resolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All analytics are rendered live on the interactive Next.js dashboard at &lt;code&gt;http://localhost:3000/analytics&lt;/code&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%2F42q86fzbl2su7g07h606.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%2F42q86fzbl2su7g07h606.png" alt="Dukandar AI Dashboard Overview - Real-Time Call Analytics &amp;amp; Live Performance Metrics" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 4: Real-Time Call Analytics &amp;amp; Live Performance Dashboard.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ 11. Real Engineering Lessons &amp;amp; Windows Debug Stories
&lt;/h2&gt;

&lt;p&gt;Building real-time voice agents on Windows presented unique engineering challenges:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Windows Native C++ Addon Workaround (SQLite IPC Bridge)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Next.js serverless API routes on Windows failed to load compiled native C++ bindings for &lt;code&gt;better-sqlite3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root Cause&lt;/strong&gt;: Missing MSVC compiler toolchain on user runtime environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Solution&lt;/strong&gt;: Instead of forcing complex C++ build tools, we built &lt;code&gt;backend/src/database/db_api.py&lt;/code&gt; as a Python JSON CLI tool. Next.js API routes trigger Python via &lt;code&gt;child_process.execFile()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Takeaway&lt;/strong&gt;: Decouple database layer access across runtime boundaries using clean IPC/CLI interfaces when native binaries create platform friction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. VAD &amp;amp; Background Noise Sensitivity in Spoken Hindi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Standard Voice Activity Detection (VAD) cut off quiet word endings in spoken Hindi speech (&lt;em&gt;e.g., "...chahiye"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Solution&lt;/strong&gt;: Tuned &lt;strong&gt;Silero VAD&lt;/strong&gt; parameters paired with LiveKit's &lt;code&gt;MultilingualModel&lt;/code&gt; turn detector and active background noise suppression (&lt;code&gt;noise_cancellation.BVC()&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Takeaway&lt;/strong&gt;: Turn detection tuning is just as crucial as the underlying LLM model for natural voice UX.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 12. Key Production Code Snippets
&lt;/h2&gt;

&lt;p&gt;Here are 3 core code implementations directly from &lt;code&gt;backend/src/agent.py&lt;/code&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. LiveKit Voice Pipeline &amp;amp; Agent Session Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@server.rtc_session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;AGENT_NAME&lt;/span&gt;&lt;span class="p"&gt;)&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;my_agent&lt;/span&gt;&lt;span class="p"&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;JobContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;init_db&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;assistant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Assistant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&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="c1"&gt;# Configure STT -&amp;gt; LLM -&amp;gt; TTS pipeline
&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;en-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;2&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;True&lt;/span&gt;&lt;span class="p"&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;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&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;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;assistant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;room&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;room&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Product Lookup Function Tool
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@function_tool&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;lookup_product&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;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;product_query&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="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Find product catalogue information such as availability, price, and stock.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&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;TOOL_CALL_STARTED: lookup_product query=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;product_query&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lookup_product_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product_query&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="nf"&gt;_publish_tool_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lookup_product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&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;call_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;update_call_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;call_id&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;call_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRODUCT_ENQUIRY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;agent_type&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;agent_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_failed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Multi-Agent Handoff Tool
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@function_tool&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;handoff_to_returns_specialist&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;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;intent&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;user_request&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;order_id&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="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Hand off conversation from Main Agent to Returns &amp;amp; Refunds Specialist.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;can_handoff&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Max handoff depth reached.&lt;/span&gt;&lt;span class="sh"&gt;"&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intent&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user_request&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;order_id&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;order_id&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="nf"&gt;_publish_handoff_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transferring&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Returns &amp;amp; Refunds Specialist&lt;/span&gt;&lt;span class="sh"&gt;"&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;agent_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SPECIALIST&lt;/span&gt;&lt;span class="sh"&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="nf"&gt;update_instructions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RETURNS_REFUNDS_SPECIALIST_PROMPT&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="nf"&gt;_publish_handoff_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;active&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Returns &amp;amp; Refunds Specialist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Returns &amp;amp; Refunds Specialist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 13. 3-Step Developer Quickstart
&lt;/h2&gt;

&lt;p&gt;Want to run &lt;strong&gt;Dukandar AI&lt;/strong&gt; locally on your machine?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/sahuanshika557-sys/murf-ai.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;murf-ai&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# 2. Setup environment variables&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;backend/.env.example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;backend/.env.local&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;frontend/.env.example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;frontend/.env.local&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Add your credentials in backend/.env.local:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# MURF_API_KEY, DEEPGRAM_API_KEY, GOOGLE_API_KEY&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# 3. Launch full stack with one command (Windows PowerShell)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\start_app.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; in Chrome, click &lt;strong&gt;Connect&lt;/strong&gt;, and start speaking!&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 14. Spoken Test Prompts Matrix
&lt;/h2&gt;

&lt;p&gt;Test the agent using these voice prompts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test Intent&lt;/th&gt;
&lt;th&gt;Spoken Voice Input&lt;/th&gt;
&lt;th&gt;Expected Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;English Product Query&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Do you have Basmati Rice available and how much is it?"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Runs &lt;code&gt;lookup_product&lt;/code&gt;, speaks price &amp;amp; stock count.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hinglish Stock Check&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Basmati rice kitne ka hai aur kitna stock bacha hai?"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Responds in natural Hinglish with exact numbers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hindi Phone Query&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"मुझे 15,000 रुपये के अंदर एक फोन चाहिए।"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Filters catalogue by price limit &amp;amp; suggests options.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory Opt-In&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"My name is Payal and I like morning delivery."&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Asks permission before committing memory to SQLite.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Specialist Handoff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Mera product damaged mila hai, mujhe return karna hai."&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Transfers call to Returns Specialist with context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human Escalation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Mera payment kat gaya hai par order confirm nahi hua!"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Asks consent &amp;amp; creates support ticket (&lt;code&gt;LC-2026-XXXX&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🛡️ 15. Security, Privacy &amp;amp; Future Roadmap
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security &amp;amp; Privacy Safeguards:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔒 All API credentials strictly excluded via &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;🛡️ Zero logging of payment passwords, CVVs, or financial tokens.&lt;/li&gt;
&lt;li&gt;📋 Explicit user consent required prior to storing personal memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Future Expansion Roadmap:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🗄️ &lt;strong&gt;Database Scaling&lt;/strong&gt;: Migrate local SQLite engine to serverless hosted PostgreSQL (Supabase / Neon).&lt;/li&gt;
&lt;li&gt;📱 &lt;strong&gt;WhatsApp Integration&lt;/strong&gt;: Automatically dispatch order receipts and escalation tracking links via WhatsApp API.&lt;/li&gt;
&lt;li&gt;🛒 &lt;strong&gt;Live E-Commerce Webhooks&lt;/strong&gt;: Sync inventory directly with live Shopify / WooCommerce store APIs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏆 16. Conclusion
&lt;/h2&gt;

&lt;p&gt;Completing the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; challenge proved that building conversational voice AI requires more than just calling an LLM API. Low-latency performance, code-mixed natural language understanding, persistent memory guardrails, zero-hallucination tool execution, and clear multi-agent handoffs are required to make voice AI truly production-ready.&lt;/p&gt;

&lt;p&gt;If you found this breakdown valuable, consider starring the repository!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/sahuanshika557-sys/murf-ai" rel="noopener noreferrer"&gt;github.com/sahuanshika557-sys/murf-ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 Let me know your thoughts or questions in the comments below!
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;#VoiceForBharat #VoiceAI #Python #Nextjs #AI #LiveKit #MurfAI #Deepgram #Gemini #WebDev #BuildInPublic&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>webdev</category>
      <category>voiceai</category>
    </item>
    <item>
      <title>🛍️ What Happens When Your Local Shopkeeper Gets a Voice Powered by AI?</title>
      <dc:creator>Anshika Sahu</dc:creator>
      <pubDate>Sat, 15 Aug 2026 13:47:48 +0000</pubDate>
      <link>https://dev.to/anshika_sahu_92e1df5254ef/what-happens-when-your-local-shopkeeper-gets-a-voice-powered-by-ai-5eo8</link>
      <guid>https://dev.to/anshika_sahu_92e1df5254ef/what-happens-when-your-local-shopkeeper-gets-a-voice-powered-by-ai-5eo8</guid>
      <description>&lt;h2&gt;
  
  
  India doesn't always shop through search bars, filters, and forms. Sometimes, it starts with a simple conversation — “Bhaiya, ye available hai?"
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Building a Multilingual Local Commerce AI Voice Agent — My 10-Day Voice AI Journey
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;🏆 &lt;strong&gt;Challenge&lt;/strong&gt;: 10 Days of Voice Agents — &lt;em&gt;VoiceForBharat Edition&lt;/em&gt;&lt;br&gt;&lt;br&gt;
🏬 &lt;strong&gt;Track&lt;/strong&gt;: Local Commerce&lt;br&gt;&lt;br&gt;
👤 &lt;strong&gt;Author&lt;/strong&gt;: Senior AI Engineer &amp;amp; Voice AI Developer&lt;br&gt;&lt;br&gt;
📦 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/sahuanshika557-sys/murf-ai" rel="noopener noreferrer"&gt;github.com/sahuanshika557-sys/murf-ai&lt;/a&gt;  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🌟 1. Introduction &amp;amp; Motivation
&lt;/h2&gt;

&lt;p&gt;Building voice AI applications for real-world commerce is fundamentally different from building text-based chatbots. &lt;/p&gt;

&lt;p&gt;In a text chat, users tolerate latencies of 3–5 seconds while watching typing indicators. In natural voice interaction, a 1-second delay creates awkward silence, turn-taking is delicate, and real human consumers speak fluidly in code-mixed dialects like &lt;strong&gt;Hinglish&lt;/strong&gt; (&lt;em&gt;Hindi + English&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Over the past 10 days of the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; challenge, I designed, engineered, and refined &lt;strong&gt;Dukandar AI&lt;/strong&gt; (&lt;em&gt;दुकानदार AI&lt;/em&gt;) — a production-grade, ultra-low latency, multilingual Local Commerce AI Voice Agent.&lt;/p&gt;

&lt;p&gt;This comprehensive technical article breaks down the system architecture, code-mixed language processing, multi-agent routing mechanics, consent-gated SQLite memory, zero-hallucination catalogue verification, real-time analytics observability, and the actual engineering lessons learned while shipping this project.&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%2Fc1ilfkzzhqotq1fdd1d3.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%2Fc1ilfkzzhqotq1fdd1d3.png" alt="Dukandar AI Dashboard Overview - Live Metrics &amp;amp; Voice Assistant Platform" width="799" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 1: Dukandar AI Premium Dark Dashboard — Real-time DB Call Metrics, Live Assistant Status &amp;amp; Bilingual Navigation.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 2. The Local Commerce Friction in India
&lt;/h2&gt;

&lt;p&gt;Local commerce connects millions of neighbourhood stores (&lt;em&gt;kirana shops&lt;/em&gt;, fresh produce vendors, local bakeries, electronics outlets) with local residents. However, digital accessibility remains heavily fragmented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗣️ &lt;strong&gt;The Literacy &amp;amp; Language Barrier&lt;/strong&gt;: Millions of consumers prefer speaking in Hindi, Hinglish, or regional dialects rather than typing structured search queries into English mobile apps.&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Inventory &amp;amp; Pricing Uncertainty&lt;/strong&gt;: Customers repeatedly make manual phone calls just to check if basic essential goods (&lt;em&gt;e.g., 5kg Basmati Rice or MP Chakki Atta&lt;/em&gt;) are currently in stock.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Post-Purchase Friction&lt;/strong&gt;: When items arrive damaged or payment gateway errors occur, customers get lost in complex menu trees trying to check return eligibility or reach human support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Voice AI?
&lt;/h3&gt;

&lt;p&gt;Voice is the most intuitive interface human beings possess. A multilingual voice agent capable of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding fluid code-mixed Hinglish queries&lt;/li&gt;
&lt;li&gt;Querying live inventory datasets with zero hallucination&lt;/li&gt;
&lt;li&gt;Maintaining persistent customer memory with strict user consent&lt;/li&gt;
&lt;li&gt;Seamlessly handing off complex refund requests to domain specialist agents&lt;/li&gt;
&lt;li&gt;Escalating financial disputes to human support via structured tickets&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...can democratize local commerce access for millions of citizens.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ 3. System Architecture &amp;amp; Multilingual Pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend Experience &amp;amp; Voice Interface
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dukandar AI&lt;/strong&gt; combines state-of-the-art real-time audio transport with high-performance STT, LLM reasoning, and ultra-fast neural speech synthesis:&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%2Fltyrgg4rf3s9e5vz3v8a.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%2Fltyrgg4rf3s9e5vz3v8a.png" alt="Dukandar AI Voice Assistant Central Hub &amp;amp; Quick Actions Panel" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 2: Voice Assistant Hub — Central WebRTC Mic Controls, Organic Audio Waveform &amp;amp; One-Touch Quick Actions.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
    subgraph Client_Layer ["🌐 Client &amp;amp; Interface Layer"]
        UI["💻 Next.js 15 Web Frontend\n(http://localhost:3000)"]
        SIP["📱 Linphone / Phone Network\n(Outbound SIP Telephony)"]
        DASH["📊 Analytics &amp;amp; Support Portal\n(/analytics &amp;amp; /support)"]
    end

    subgraph Transport_Layer ["⚡ Real-Time Transport"]
        LK["📡 LiveKit WebRTC &amp;amp; SIP Gateway"]
    end

    subgraph Pipeline_Layer ["🎙️ Voice AI Pipeline"]
        STT["🎤 Deepgram STT\n(Nova-3 Multilingual)"]
        LLM["🧠 Google Gemini LLM\n(gemini-3.5-flash-lite)"]
        TTS["🔊 Murf Falcon TTS\n(Anisha Voice / ~55ms Latency)"]
        VAD["🎛️ Silero VAD &amp;amp;\nLiveKit Turn Detector"]
    end

    subgraph Multi_Agent_Core ["🤖 Multi-Agent Core (backend/src/agent.py)"]
        MAIN["🛍️ Main Commerce Agent\n(Anisha - Catalogue &amp;amp; Store Info)"]
        SPEC["📦 Returns &amp;amp; Refunds Specialist\n(Specialist Agent Target)"]
    end

    subgraph Persistence_Tools ["⚙️ Tools &amp;amp; Persistence Engine"]
        MEM["🧠 Persistent Memory (customers table)"]
        CAT["🛒 Catalogue Tool (lookup_product)"]
        CALC["🧮 Order Calculator (calculate_order_total)"]
        RET["📦 Return/Refund Tools (check_refund_status)"]
        ESC["👨‍💼 Escalation Tool (create_escalation)"]
        DB[("💾 SQLite Database\nbackend/local_commerce_memory.db")]
    end

    UI &amp;lt;--&amp;gt;|"WebRTC Audio &amp;amp; Data Channel"| LK
    SIP &amp;lt;--&amp;gt;|"SIP / TLS RTP Audio"| LK
    LK &amp;lt;--&amp;gt; STT
    LK &amp;lt;--&amp;gt; TTS
    STT --&amp;gt; MAIN
    STT --&amp;gt; SPEC
    MAIN --&amp;gt; LLM
    SPEC --&amp;gt; LLM
    LLM --&amp;gt; TTS
    TTS --&amp;gt; LK

    MAIN &amp;lt;--&amp;gt;|"Context-Preserving Handoff"| SPEC
    MAIN &amp;lt;--&amp;gt; MEM
    MAIN &amp;lt;--&amp;gt; CAT
    MAIN &amp;lt;--&amp;gt; CALC
    MAIN &amp;lt;--&amp;gt; ESC
    SPEC &amp;lt;--&amp;gt; RET
    SPEC &amp;lt;--&amp;gt; ESC

    MEM &amp;lt;--&amp;gt; DB
    CAT &amp;lt;--&amp;gt; DB
    CALC &amp;lt;--&amp;gt; DB
    RET &amp;lt;--&amp;gt; DB
    ESC &amp;lt;--&amp;gt; DB
    DASH &amp;lt;--&amp;gt;|"Next.js API &amp;amp; db_api.py"| DB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Component Breakdown:
&lt;/h3&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;th&gt;Key Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;STT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Deepgram Nova-3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-language detection (&lt;code&gt;language="multi"&lt;/code&gt;) handling English, Hindi &amp;amp; Hinglish transcriptions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Google Gemini 3.5 Flash Lite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low-latency instruction following, tool calling, and bilingual dialogue generation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TTS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Murf Falcon TTS&lt;/strong&gt; (&lt;code&gt;Anisha&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Streaming audio chunk-by-chunk with ~55ms latency for natural Indian English/Hindi tone.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transport&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;LiveKit Agents SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-duplex WebRTC audio streaming, turn detection, and custom data channel events.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Next.js 15 + Tailwind CSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interactive UI with 5 agent visual states (&lt;code&gt;READY&lt;/code&gt;, &lt;code&gt;CONNECTING&lt;/code&gt;, &lt;code&gt;LISTENING&lt;/code&gt;, &lt;code&gt;SPEAKING&lt;/code&gt;, &lt;code&gt;ENDED&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; (&lt;code&gt;backend/...db&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;6 relational tables (&lt;code&gt;customers&lt;/code&gt;, &lt;code&gt;orders&lt;/code&gt;, &lt;code&gt;call_logs&lt;/code&gt;, &lt;code&gt;opt_outs&lt;/code&gt;, &lt;code&gt;escalations&lt;/code&gt;, &lt;code&gt;calls&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📅 4. The 10-Day Build Evolution
&lt;/h2&gt;

&lt;p&gt;Below is the step-by-step feature evolution built over the 10-day sprint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 01 ──&amp;gt; 🎙️ Core STT → LLM → TTS Pipeline Setup
Day 02 ──&amp;gt; 🛡️ Standardized Persona (Anisha) &amp;amp; Commercial Guardrails
Day 03 ──&amp;gt; 💻 Responsive Frontend UI (5 Agent States + Waveform Visualizers)
Day 04 ──&amp;gt; 🧠 Persistent Customer Memory &amp;amp; Opt-in Consent System
Day 05 ──&amp;gt; 🛒 Real Product Catalogue Tools (products.csv + Zero-Hallucination)
Day 06 ──&amp;gt; 📱 Outbound SIP Telephony (Automated Phone Calls via Linphone)
Day 07 ──&amp;gt; 👨‍💼 Human Support Escalation Engine (Ticket IDs: LC-2026-XXXX)
Day 08 ──&amp;gt; 📊 Interactive Call Analytics Dashboard &amp;amp; Failure Classification
Day 09 ──&amp;gt; 🔀 Multi-Agent Handoff Architecture (Main Commerce &amp;lt;-&amp;gt; Specialist)
Day 10 ──&amp;gt; 💎 Full Architecture Audit, Documentation Polish &amp;amp; Release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🗣️ 5. Code-Mixed Multilingual Voice Experience (Hinglish/Hindi/English)
&lt;/h2&gt;

&lt;p&gt;In India, voice interfaces fail if they force users into rigid English or overly formal Devanagari Hindi. &lt;strong&gt;Dukandar AI&lt;/strong&gt; dynamically tracks the user's spoken register and responds naturally in the same style.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Conversation Samples:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;💬 &lt;strong&gt;Hinglish Code-Mixed Inquiry&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer&lt;/strong&gt;: &lt;em&gt;"Basmati rice kitne ka hai aur stock mein hai kya?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dukandar AI&lt;/strong&gt;: &lt;em&gt;"Basmati Rice 5kg pack is listed at ₹320 with 25 units available in stock."&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Devanagari Hindi Inquiry&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer&lt;/strong&gt;: &lt;em&gt;"बासमती चावल कितने के हैं?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dukandar AI&lt;/strong&gt;: &lt;em&gt;"बासमती चावल की सूचीबद्ध कीमत ₹320 है, और 25 यूनिट्स उपलब्ध हैं।"&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Budget Filter Query&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer&lt;/strong&gt;: &lt;em&gt;"Mujhe ek phone chahiye under 15000."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dukandar AI&lt;/strong&gt;: &lt;em&gt;"Main aapke budget 15,000 INR ke andar available items check kar sakti hoon. Hamare paas Redmi Note 13 standard model ₹13,999 mein available hai."&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 6. Consent-Gated Customer Memory Engine
&lt;/h2&gt;

&lt;p&gt;Customer memory elevates a voice bot into a personal shopping assistant. However, storing user details without consent violates privacy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Strict Opt-In Consent Flow:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[User Utterance] ──&amp;gt; "My name is Ramesh and I prefer morning delivery."
                           │
                           ▼
[Agent Detection] ──&amp;gt; Extracts potential facts (Name, Delivery Preference)
                           │
                           ▼
[Agent Asks Consent] ──&amp;gt; "Would you like me to remember your name and morning preference for future calls?"
                           │
             ┌─────────────┴─────────────┐
             ▼                           ▼
      [User: "Yes, remember it"]  [User: "No, don't save"]
             │                           │
             ▼                           ▼
   Execute save_caller_memory      Discard temporary data
   (Commits to SQLite)             (Zero DB write)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Database Schema (&lt;code&gt;customers&lt;/code&gt; table):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;language_preference&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;preferred_delivery_slot&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;usual_quantity&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;past_orders&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;last_interaction&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On subsequent calls, the agent recognizes returning callers instantly:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Welcome back Ramesh! Should I check availability for your usual 5kg Basmati Rice order?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🛡️ 7. Zero-Hallucination Inventory &amp;amp; Order Tools
&lt;/h2&gt;

&lt;p&gt;A common failure mode in commercial LLM bots is guessing product prices or inventing stock numbers. &lt;strong&gt;Dukandar AI&lt;/strong&gt; enforces a strict &lt;strong&gt;Zero-Hallucination Guardrail&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Commerce Experience &amp;amp; Product Catalogue
&lt;/h3&gt;

&lt;p&gt;Whenever price, stock, or total cost is requested, the agent &lt;strong&gt;MUST&lt;/strong&gt; call executable tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;lookup_product(product_query)&lt;/code&gt;: Queries local catalogue dataset (&lt;code&gt;data/products.csv&lt;/code&gt;) for verified unit pricing, stock quantity, packaging size, and seller location.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;calculate_order_total(product_query, quantity)&lt;/code&gt;: Checks available stock, validates requested quantity, applies tax/delivery rules, and returns the subtotal in INR.&lt;/li&gt;
&lt;/ol&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%2Fzq6rjgpltgt1fkjtl9bu.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%2Fzq6rjgpltgt1fkjtl9bu.png" alt="Dukandar AI Local Store Product Catalogue Grid with Item Images" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3: Interactive Local Store Product Catalogue — Item Images, Category Filter Chips, Live Stock Badges &amp;amp; Unit Pricing.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline &amp;amp; Tool Failure Resilience:
&lt;/h3&gt;

&lt;p&gt;If tool execution fails or the catalogue dataset is unreachable (&lt;code&gt;SIMULATE_CATALOGUE_FAILURE=true&lt;/code&gt;), the LLM is explicitly forbidden from guessing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Agent Fallback Response&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"I apologize, but our product catalogue is currently unreachable. I don't want to give you an incorrect price. Please try again in a few moments."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔀 8. Context-Preserving Multi-Agent Handoff Mechanics
&lt;/h2&gt;

&lt;p&gt;In Day 9, the architecture evolved from a monolithic assistant into a specialized &lt;strong&gt;Multi-Agent Network&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  ┌──────────────────────────────┐
                  │ Main Commerce Agent (Anisha) │
                  │  (Store Info &amp;amp; Catalogue)    │
                  └──────────────┬───────────────┘
                                 │
                 User Intent: "I want to return item"
               Tool: handoff_to_returns_specialist
                                 │
                                 ▼
               ┌───────────────────────────────────┐
               │ Returns &amp;amp; Refunds Specialist Agent│
               │ (Eligibility, Order Validation)   │
               └─────────────────┬─────────────────┘
                                 │
                 User Intent: "What items do you sell?"
                     Tool: handoff_to_main_agent
                                 │
                                 ▼
                  ┌──────────────────────────────┐
                  │ Main Commerce Agent (Anisha) │
                  └──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Context Preservation Guarantee:
&lt;/h3&gt;

&lt;p&gt;When transitioning between agents, the system passes a structured &lt;code&gt;HandoffContext&lt;/code&gt; containing caller history, order details, user intent, and active language register. &lt;/p&gt;

&lt;p&gt;The user &lt;strong&gt;never&lt;/strong&gt; has to repeat information to the new agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Specialist Agent&lt;/strong&gt;: &lt;em&gt;"Hello Ramesh! Anisha transferred your call regarding order #12345. I can see you received a damaged pack of Basmati Rice. Let me immediately check your return eligibility."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚨 9. Human Support Escalation Workflow
&lt;/h2&gt;

&lt;p&gt;When high-stakes financial issues arise (&lt;em&gt;e.g., payment deducted without order confirmation&lt;/em&gt;), automated AI handling becomes risky. The agent pauses problem-solving and initiates the &lt;strong&gt;Human Support Escalation Flow&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Permission&lt;/strong&gt;:
&lt;em&gt;"I understand your payment was deducted. I can create an urgent ticket for our human support supervisor. May I submit this request with your phone number?"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ticket Creation&lt;/strong&gt;:
Calls &lt;code&gt;create_escalation()&lt;/code&gt; tool to generate a unique tracking ID (&lt;code&gt;LC-2026-0001&lt;/code&gt;) in SQLite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spoken Reference ID&lt;/strong&gt;:
&lt;em&gt;"Your support ticket has been created! Reference ID is LC-2026-0001. A representative will contact you within 2 hours."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Dashboard View&lt;/strong&gt;:
Tickets instantly appear on the operational support dashboard at &lt;code&gt;http://localhost:3000/support&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📊 10. Real-Time Call Analytics &amp;amp; Failure Diagnostics
&lt;/h2&gt;

&lt;p&gt;Every call session is monitored by the analytics engine to compute quality metrics and track system performance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         ┌────────────────────────────────────────────────────────┐
         │              Call Analytics Dashboard                  │
         ├───────────────────┬──────────────────┬─────────────────┤
         │ Total Calls: 148  │ Success Rate: 92%│ Avg Latency: 55ms│
         └───────────────────┴──────────────────┴─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Automatic Call Outcome Classification:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;COMPLETED&lt;/code&gt;&lt;/strong&gt;: Customer objective fully resolved (&lt;em&gt;product lookup, total calculated, or escalation ticket created&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;USER_HANGUP&lt;/code&gt;&lt;/strong&gt;: Customer disconnected mid-conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;TOOL_FAILURE&lt;/code&gt;&lt;/strong&gt;: Inventory DB or pricing calculation tool threw an error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;API_FAILURE&lt;/code&gt;&lt;/strong&gt;: Upstream LLM or STT service timeout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;INCOMPLETE_TASK&lt;/code&gt;&lt;/strong&gt;: Call ended without clear resolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All analytics are rendered live on the interactive Next.js dashboard at &lt;code&gt;http://localhost:3000/analytics&lt;/code&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%2F42q86fzbl2su7g07h606.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%2F42q86fzbl2su7g07h606.png" alt="Dukandar AI Dashboard Overview - Real-Time Call Analytics &amp;amp; Live Performance Metrics" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 4: Real-Time Call Analytics &amp;amp; Live Performance Dashboard.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ 11. Real Engineering Lessons &amp;amp; Windows Debug Stories
&lt;/h2&gt;

&lt;p&gt;Building real-time voice agents on Windows presented unique engineering challenges:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Windows Native C++ Addon Workaround (SQLite IPC Bridge)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Next.js serverless API routes on Windows failed to load compiled native C++ bindings for &lt;code&gt;better-sqlite3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root Cause&lt;/strong&gt;: Missing MSVC compiler toolchain on user runtime environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Solution&lt;/strong&gt;: Instead of forcing complex C++ build tools, we built &lt;code&gt;backend/src/database/db_api.py&lt;/code&gt; as a Python JSON CLI tool. Next.js API routes trigger Python via &lt;code&gt;child_process.execFile()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Takeaway&lt;/strong&gt;: Decouple database layer access across runtime boundaries using clean IPC/CLI interfaces when native binaries create platform friction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. VAD &amp;amp; Background Noise Sensitivity in Spoken Hindi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Standard Voice Activity Detection (VAD) cut off quiet word endings in spoken Hindi speech (&lt;em&gt;e.g., "...chahiye"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Solution&lt;/strong&gt;: Tuned &lt;strong&gt;Silero VAD&lt;/strong&gt; parameters paired with LiveKit's &lt;code&gt;MultilingualModel&lt;/code&gt; turn detector and active background noise suppression (&lt;code&gt;noise_cancellation.BVC()&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Takeaway&lt;/strong&gt;: Turn detection tuning is just as crucial as the underlying LLM model for natural voice UX.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 12. Key Production Code Snippets
&lt;/h2&gt;

&lt;p&gt;Here are 3 core code implementations directly from &lt;code&gt;backend/src/agent.py&lt;/code&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. LiveKit Voice Pipeline &amp;amp; Agent Session Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@server.rtc_session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;AGENT_NAME&lt;/span&gt;&lt;span class="p"&gt;)&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;my_agent&lt;/span&gt;&lt;span class="p"&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;JobContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;init_db&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;assistant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Assistant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&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="c1"&gt;# Configure STT -&amp;gt; LLM -&amp;gt; TTS pipeline
&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;en-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;2&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;True&lt;/span&gt;&lt;span class="p"&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;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&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;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;assistant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;room&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;room&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Product Lookup Function Tool
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@function_tool&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;lookup_product&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;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;product_query&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="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Find product catalogue information such as availability, price, and stock.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&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;TOOL_CALL_STARTED: lookup_product query=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;product_query&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lookup_product_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product_query&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="nf"&gt;_publish_tool_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lookup_product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&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;call_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;update_call_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;call_id&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;call_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRODUCT_ENQUIRY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;agent_type&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;agent_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_failed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Multi-Agent Handoff Tool
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@function_tool&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;handoff_to_returns_specialist&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;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;intent&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;user_request&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;order_id&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="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Hand off conversation from Main Agent to Returns &amp;amp; Refunds Specialist.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;can_handoff&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Max handoff depth reached.&lt;/span&gt;&lt;span class="sh"&gt;"&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intent&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user_request&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;order_id&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;handoff_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;order_id&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="nf"&gt;_publish_handoff_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transferring&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Returns &amp;amp; Refunds Specialist&lt;/span&gt;&lt;span class="sh"&gt;"&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;agent_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SPECIALIST&lt;/span&gt;&lt;span class="sh"&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="nf"&gt;update_instructions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RETURNS_REFUNDS_SPECIALIST_PROMPT&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="nf"&gt;_publish_handoff_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;active&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Returns &amp;amp; Refunds Specialist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Returns &amp;amp; Refunds Specialist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 13. 3-Step Developer Quickstart
&lt;/h2&gt;

&lt;p&gt;Want to run &lt;strong&gt;Dukandar AI&lt;/strong&gt; locally on your machine?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/sahuanshika557-sys/murf-ai.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;murf-ai&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# 2. Setup environment variables&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;backend/.env.example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;backend/.env.local&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;frontend/.env.example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;frontend/.env.local&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Add your credentials in backend/.env.local:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# MURF_API_KEY, DEEPGRAM_API_KEY, GOOGLE_API_KEY&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# 3. Launch full stack with one command (Windows PowerShell)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\start_app.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; in Chrome, click &lt;strong&gt;Connect&lt;/strong&gt;, and start speaking!&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 14. Spoken Test Prompts Matrix
&lt;/h2&gt;

&lt;p&gt;Test the agent using these voice prompts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test Intent&lt;/th&gt;
&lt;th&gt;Spoken Voice Input&lt;/th&gt;
&lt;th&gt;Expected Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;English Product Query&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Do you have Basmati Rice available and how much is it?"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Runs &lt;code&gt;lookup_product&lt;/code&gt;, speaks price &amp;amp; stock count.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hinglish Stock Check&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Basmati rice kitne ka hai aur kitna stock bacha hai?"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Responds in natural Hinglish with exact numbers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hindi Phone Query&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"मुझे 15,000 रुपये के अंदर एक फोन चाहिए।"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Filters catalogue by price limit &amp;amp; suggests options.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory Opt-In&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"My name is Payal and I like morning delivery."&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Asks permission before committing memory to SQLite.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Specialist Handoff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Mera product damaged mila hai, mujhe return karna hai."&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Transfers call to Returns Specialist with context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human Escalation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"Mera payment kat gaya hai par order confirm nahi hua!"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Asks consent &amp;amp; creates support ticket (&lt;code&gt;LC-2026-XXXX&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🛡️ 15. Security, Privacy &amp;amp; Future Roadmap
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security &amp;amp; Privacy Safeguards:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔒 All API credentials strictly excluded via &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;🛡️ Zero logging of payment passwords, CVVs, or financial tokens.&lt;/li&gt;
&lt;li&gt;📋 Explicit user consent required prior to storing personal memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Future Expansion Roadmap:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🗄️ &lt;strong&gt;Database Scaling&lt;/strong&gt;: Migrate local SQLite engine to serverless hosted PostgreSQL (Supabase / Neon).&lt;/li&gt;
&lt;li&gt;📱 &lt;strong&gt;WhatsApp Integration&lt;/strong&gt;: Automatically dispatch order receipts and escalation tracking links via WhatsApp API.&lt;/li&gt;
&lt;li&gt;🛒 &lt;strong&gt;Live E-Commerce Webhooks&lt;/strong&gt;: Sync inventory directly with live Shopify / WooCommerce store APIs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏆 16. Conclusion
&lt;/h2&gt;

&lt;p&gt;Completing the &lt;strong&gt;#VoiceForBharat&lt;/strong&gt; challenge proved that building conversational voice AI requires more than just calling an LLM API. Low-latency performance, code-mixed natural language understanding, persistent memory guardrails, zero-hallucination tool execution, and clear multi-agent handoffs are required to make voice AI truly production-ready.&lt;/p&gt;

&lt;p&gt;If you found this breakdown valuable, consider starring the repository!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/sahuanshika557-sys/murf-ai" rel="noopener noreferrer"&gt;github.com/sahuanshika557-sys/murf-ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 Let me know your thoughts or questions in the comments below!
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;#VoiceForBharat #VoiceAI #Python #Nextjs #AI #LiveKit #MurfAI #Deepgram #Gemini #WebDev #BuildInPublic&lt;/em&gt;&lt;/p&gt;

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