<?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: likitha</title>
    <description>The latest articles on DEV Community by likitha (@v_hh_9bb7ed1b83bd542f31dc).</description>
    <link>https://dev.to/v_hh_9bb7ed1b83bd542f31dc</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%2F4078585%2Fcc9ccbbb-75fe-4e64-8ff7-a336a1c6e74c.png</url>
      <title>DEV Community: likitha</title>
      <link>https://dev.to/v_hh_9bb7ed1b83bd542f31dc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/v_hh_9bb7ed1b83bd542f31dc"/>
    <language>en</language>
    <item>
      <title>Building FinAssist: A Multilingual Indian Voice AI Agent for Financial Inclusion</title>
      <dc:creator>likitha</dc:creator>
      <pubDate>Sat, 15 Aug 2026 07:14:31 +0000</pubDate>
      <link>https://dev.to/v_hh_9bb7ed1b83bd542f31dc/building-finassist-a-multilingual-indian-voice-ai-agent-for-financial-inclusion-gpn</link>
      <guid>https://dev.to/v_hh_9bb7ed1b83bd542f31dc/building-finassist-a-multilingual-indian-voice-ai-agent-for-financial-inclusion-gpn</guid>
      <description>&lt;h1&gt;
  
  
  Building FinAssist: A Multilingual Indian Voice AI Agent for Financial Inclusion
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;A complete story and step-by-step guide on building an AI voice assistant for Indian banking using Murf Falcon, Deepgram Nova-3, Google Gemini, and LiveKit.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Introduction &amp;amp; Story
&lt;/h2&gt;

&lt;p&gt;Financial services and scheme navigation in India can be daunting. With complex application forms, intricate eligibility criteria, and digital banking menus often available only in formal English, millions of everyday citizens, elderly callers, and small business owners face barriers to accessing essential financial guidance.&lt;/p&gt;

&lt;p&gt;To address this challenge, I built &lt;strong&gt;FinAssist&lt;/strong&gt; — an interactive, conversational voice AI assistant developed under the &lt;strong&gt;Financial Services Track&lt;/strong&gt; for the &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; challenge.&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%2Fa1zxz1r7hase8ekagdfh.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%2Fa1zxz1r7hase8ekagdfh.png" alt="FinAssist Voice Assistant Homepage Interface" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Who is FinAssist for?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Everyday Banking Customers&lt;/strong&gt;: Looking for instant guidance on savings accounts, digital payments, UPI security, and card services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rural &amp;amp; Semi-Urban Citizens&lt;/strong&gt;: Interested in discovering government financial schemes like &lt;em&gt;PM Awas Yojana (PMAY)&lt;/em&gt;, &lt;em&gt;PM Jan Dhan Yojana (PMJDY)&lt;/em&gt;, &lt;em&gt;Sukanya Samriddhi Yojana (SSY)&lt;/em&gt;, and &lt;em&gt;Mudra Loans&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Senior Citizens &amp;amp; Non-Tech-Savvy Users&lt;/strong&gt;: Who prefer warm, natural voice conversations in native Indian scripts or code-mixed Hindi &amp;amp; English over complicated app UI menus.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Voice is the most natural, accessible interface in India. It bypasses literacy and tech barriers, allowing users to speak as they naturally would and receive immediate, clear, low-latency spoken responses powered by &lt;strong&gt;Murf Falcon TTS&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Architecture &amp;amp; Core Stack
&lt;/h2&gt;

&lt;p&gt;FinAssist uses a modern, streaming real-time voice pipeline designed for high responsiveness and human-like natural conversation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart LR
    A[🎙️ User Audio Input] --&amp;gt;|LiveKit WebRTC| B[Deepgram Nova-3 STT]
    B --&amp;gt;|Transcribed Text| C[Google Gemini LLM]
    C --&amp;gt;|Response &amp;amp; Tool Calls| D[Murf Falcon TTS]
    D --&amp;gt;|Streaming Audio| E[LiveKit Transport]
    E --&amp;gt;|Audio Output| F[🔊 User Hears Agent]

    subgraph Backend Logic
        C --&amp;gt; G[SQLite Memory &amp;amp; Escalation DB]
        C --&amp;gt; H[Scheme Specialist Handoff]
        C --&amp;gt; I[Voice Switcher Engine]
    end

    style A fill:#334155,stroke:#94A3B8,color:#fff
    style B fill:#0284C7,stroke:#38BDF8,color:#fff
    style C fill:#6366F1,stroke:#818CF8,color:#fff
    style D fill:#0D9488,stroke:#2DD4BF,color:#fff
    style E fill:#EA580C,stroke:#FB923C,color:#fff
    style F fill:#334155,stroke:#94A3B8,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text-to-Speech (TTS)&lt;/strong&gt;: &lt;a href="https://murf.ai/api/docs/text-to-speech/streaming" rel="noopener noreferrer"&gt;Murf Falcon&lt;/a&gt; (&lt;code&gt;Pooja&lt;/code&gt; and &lt;code&gt;Samar&lt;/code&gt; voices) — ultra-low latency streaming voice output with natural Indian accents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-Text (STT)&lt;/strong&gt;: Deepgram Nova-3 (&lt;code&gt;model="nova-3", language="multi"&lt;/code&gt;) — real-time transcription with multilingual and code-mixed support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Engine&lt;/strong&gt;: Google Gemini-3.5-Flash (&lt;code&gt;google.LLM&lt;/code&gt;) — fast reasoning, function calling, and contextual response generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Activity &amp;amp; Turn Detector&lt;/strong&gt;: Silero VAD + LiveKit Turn Detector (&lt;code&gt;MultilingualModel&lt;/code&gt;) for fluid turn-taking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Transport&lt;/strong&gt;: LiveKit Agents SDK (&lt;code&gt;livekit-agents ~1.4&lt;/code&gt;) WebRTC framework.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend UI &amp;amp; Dashboard&lt;/strong&gt;: Next.js (React, TypeScript, Tailwind CSS) with LiveKit Agents UI and live call analytics (&lt;code&gt;/dashboard&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Features Built in FinAssist
&lt;/h2&gt;

&lt;p&gt;Every feature described here is genuinely implemented and tested in the codebase:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ultra-Fast Indian Voice Output via Murf Falcon
&lt;/h3&gt;

&lt;p&gt;Using Murf Falcon TTS with the &lt;code&gt;Pooja&lt;/code&gt; voice (and &lt;code&gt;Samar&lt;/code&gt; for scheme specialist), FinAssist speaks with realistic Indian English and Hindi context pacing, ensuring warm and relatable audio interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Native Script &amp;amp; Code-Mixed Language Support
&lt;/h3&gt;

&lt;p&gt;FinAssist strictly respects Indian native scripts (writing Hindi in Devanagari script, e.g., "नमस्ते" instead of romanized "namaste") and seamlessly supports Hindi-English code-mixed conversations.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Consent-Based Caller Memory (SQLite)
&lt;/h3&gt;

&lt;p&gt;FinAssist checks for returning callers via &lt;code&gt;lookup_caller()&lt;/code&gt; at session startup. Before saving any user preferences or names, the agent explicitly asks for permission (&lt;code&gt;save_caller_info&lt;/code&gt;). Callers can also execute their right to be forgotten via &lt;code&gt;forget_me_tool&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Government Scheme Eligibility Calculator
&lt;/h3&gt;

&lt;p&gt;Using the &lt;code&gt;@function_tool&lt;/code&gt; &lt;code&gt;check_scheme_eligibility&lt;/code&gt;, FinAssist analyzes age, income bracket (&lt;code&gt;low&lt;/code&gt;, &lt;code&gt;middle&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;), and employment status (&lt;code&gt;student&lt;/code&gt;, &lt;code&gt;salaried&lt;/code&gt;, &lt;code&gt;self_employed&lt;/code&gt;, &lt;code&gt;retired&lt;/code&gt;) to provide personalized scheme recommendations (PMAY, Jan Dhan, Mudra, SCSS, etc.).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="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;check_scheme_eligibility&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;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&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="n"&gt;income_level&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="n"&gt;employment_type&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="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Check banking scheme eligibility based on user profile.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;check_scheme_eligibility_impl&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;age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;income_level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;income_level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employment_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;employment_type&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Specialist Agent Handoff
&lt;/h3&gt;

&lt;p&gt;When a caller asks deep queries about government schemes, the main assistant (&lt;code&gt;Assistant&lt;/code&gt;) transfers control to &lt;code&gt;SchemeSpecialistAgent&lt;/code&gt; ("Samar"). When general banking support is required, Samar hands the conversation back to Pooja.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Dynamic Multi-Voice Context Switching
&lt;/h3&gt;

&lt;p&gt;FinAssist automatically detects whether a response is a warm greeting or a detailed scheme explanation using a custom &lt;code&gt;VoiceManager&lt;/code&gt; and &lt;code&gt;VoiceSwitcher&lt;/code&gt; engine, adjusting the voice profile dynamically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Context-based voice switching logic in backend/src/voice_switcher.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_message&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;text&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="n"&gt;voice_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;voice_switcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select_voice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&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;voice_switcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_greeting_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;voice_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;greeting&lt;/span&gt;&lt;span class="sh"&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;warm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;elif&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;voice_switcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_explanation_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;voice_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;explanation&lt;/span&gt;&lt;span class="sh"&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;professional&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;voice_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;default&lt;/span&gt;&lt;span class="sh"&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;neutral&lt;/span&gt;&lt;span class="sh"&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;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;voice_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;voice_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;voice_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;voice_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;style&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Human Escalation Protocol with PII Sanitization
&lt;/h3&gt;

&lt;p&gt;For security emergencies or unresolved transaction disputes, FinAssist triggers &lt;code&gt;create_escalation()&lt;/code&gt;. It requests explicit consent before logging a ticket (&lt;code&gt;ESC-XXXXX&lt;/code&gt;), automatically sanitizes sensitive PII (card numbers, PINs, OTPs), updates duplicate tickets, and triggers optional webhook alerts.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Live Call Analytics Dashboard
&lt;/h3&gt;

&lt;p&gt;A built-in Next.js dashboard (&lt;code&gt;/dashboard&lt;/code&gt;) visualizes call success rates, session durations, track performance, and detailed outcome logs populated directly from SQLite database records.&lt;/p&gt;

&lt;h2&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%2F2f5v1dpwlt857oz5czwp.png" alt="FinAssist Live Call Analytics Dashboard" width="799" height="357"&gt;)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  4. Real Difficulty Encountered &amp;amp; Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem: PII Leakage During Escalation Logging
&lt;/h3&gt;

&lt;p&gt;When users reported urgent security issues (e.g., lost card or suspicious debit), they frequently blurted out full 16-digit account numbers or 4-digit PINs during the voice prompt. Simply relying on LLM system prompt instructions was insufficient to guarantee that raw sensitive numbers wouldn't leak into database logs or external webhook notifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Was Tried
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Engineering Only&lt;/strong&gt;: Instructing Gemini in the system prompt never to record PINs/cards. While helpful, LLMs can occasionally echo caller statements verbatim in tool arguments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple String Truncation&lt;/strong&gt;: Cutting off input text, which destroyed valuable context needed by support agents.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Solution: Deterministic Regex Sanitization Layer
&lt;/h3&gt;

&lt;p&gt;I built a dedicated Python sanitization helper (&lt;code&gt;sanitize_sensitive_info&lt;/code&gt;) executed inside the &lt;code&gt;create_escalation&lt;/code&gt; tool &lt;em&gt;before&lt;/em&gt; any database persistence or webhook dispatch occurs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sanitize_sensitive_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&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;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Sanitize sensitive PII such as card/account numbers, PINs, OTPs, CVVs, and passwords.&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;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="c1"&gt;# Mask 16-digit credit card or account numbers
&lt;/span&gt;    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b&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;[REDACTED ACCOUNT/CARD]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Mask 10 to 18 digit account numbers
&lt;/span&gt;    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;\b\d{10,18}\b&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;[REDACTED ACCOUNT]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Mask OTP, PIN, CVV, Password declarations
&lt;/span&gt;    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;(?i)\b(otp|pin|cvv|password|passcode)[:\s=]*[A-Za-z0-9@#$%^&amp;amp;*]{3,10}\b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;\1: [REDACTED]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;text&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;text&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This guaranteed complete PII protection while keeping issue summaries clear for human support staff.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Step-by-Step Guide to Run FinAssist
&lt;/h2&gt;

&lt;p&gt;You can build and run your own voice AI agent using our open-source codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Public Repository
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10+ and &lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Node.js 18+ and &lt;code&gt;pnpm&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;LiveKit Cloud account (Free Tier)&lt;/li&gt;
&lt;li&gt;Murf AI API Key&lt;/li&gt;
&lt;li&gt;Deepgram API Key&lt;/li&gt;
&lt;li&gt;Google Gemini API Key&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Clone &amp;amp; Configure Environment Variables
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;.env.local&lt;/code&gt; files in both &lt;code&gt;backend/&lt;/code&gt; and &lt;code&gt;frontend/&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;backend/.env.local&lt;/code&gt;&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;LIVEKIT_URL=wss://your-livekit-domain.livekit.cloud
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
MURF_API_KEY=your_murf_api_key
DEEPGRAM_API_KEY=your_deepgram_api_key
GOOGLE_API_KEY=your_google_gemini_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;frontend/.env.local&lt;/code&gt;&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;LIVEKIT_URL=wss://your-livekit-domain.livekit.cloud
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Security Reminder&lt;/strong&gt;: Never commit &lt;code&gt;.env.local&lt;/code&gt; files or share API keys publicly. Keep them safely stored in local environment variables or server secret managers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2: Install &amp;amp; Start Backend
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
uv &lt;span class="nb"&gt;sync
&lt;/span&gt;uv run python src/agent.py download-files  &lt;span class="c"&gt;# First time only&lt;/span&gt;
uv run python src/agent.py dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Install &amp;amp; Start Frontend
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Test Your Agent
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; in your web browser.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Start Conversation&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Speak with FinAssist in English or Hindi (e.g., &lt;em&gt;"What government schemes am I eligible for as a 25-year-old self-employed citizen?"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;View real-time metrics on &lt;code&gt;http://localhost:3000/dashboard&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Key Takeaways &amp;amp; Conclusion
&lt;/h2&gt;

&lt;p&gt;Building FinAssist during the &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; challenge demonstrated the immense potential of voice AI for financial inclusion in India. By combining &lt;strong&gt;Murf Falcon's&lt;/strong&gt; low-latency streaming TTS with intelligent tool calling and privacy-first guardrails, we can make essential financial services accessible to everyone, regardless of language or technological literacy.&lt;/p&gt;

&lt;p&gt;Thank you to &lt;strong&gt;Murf AI&lt;/strong&gt; for hosting this challenge! 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for #VoiceForBharat&lt;/em&gt;&lt;/p&gt;

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