<?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: Shailendra Yadav</title>
    <description>The latest articles on DEV Community by Shailendra Yadav (@shailendra_yadav_0e69cfbf).</description>
    <link>https://dev.to/shailendra_yadav_0e69cfbf</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%2F3483890%2F21b38252-36db-4cd4-b9b2-0ab7b00b635d.jpg</url>
      <title>DEV Community: Shailendra Yadav</title>
      <link>https://dev.to/shailendra_yadav_0e69cfbf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shailendra_yadav_0e69cfbf"/>
    <language>en</language>
    <item>
      <title>FINSATHI</title>
      <dc:creator>Shailendra Yadav</dc:creator>
      <pubDate>Sat, 15 Aug 2026 18:25:18 +0000</pubDate>
      <link>https://dev.to/shailendra_yadav_0e69cfbf/finsathi-30kh</link>
      <guid>https://dev.to/shailendra_yadav_0e69cfbf/finsathi-30kh</guid>
      <description>&lt;p&gt;FinSaathi: Building a Voice-First AI Financial Assistant with Murf Falcon&lt;/p&gt;

&lt;p&gt;Over the last 10 days, I built FinSaathi, an AI-powered voice financial assistant as part of Murf AI's 10 Days of Voice Agents – VoiceForBharat Edition.&lt;/p&gt;

&lt;p&gt;The goal wasn't just to make an AI that can answer questions. I wanted to build a voice agent that could remember users, use tools, make phone calls, recognize its limits, involve humans when needed, measure its performance, and hand conversations to specialized agents.&lt;/p&gt;

&lt;p&gt;Here's what I built and what I learned along the way.&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;Financial information can be confusing, especially when users have to navigate different websites, applications, eligibility requirements, and financial terminology.&lt;/p&gt;

&lt;p&gt;FinSaathi is designed as a conversational interface where users can simply talk about their financial questions.&lt;/p&gt;

&lt;p&gt;Instead of navigating through menus or typing complicated queries, a user can say:&lt;/p&gt;

&lt;p&gt;"I want help managing my monthly expenses."&lt;/p&gt;

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

&lt;p&gt;"Am I eligible for this government scheme?"&lt;/p&gt;

&lt;p&gt;and have a natural conversation with the assistant.&lt;/p&gt;

&lt;p&gt;Voice is particularly useful here because the interaction becomes much closer to talking to a person rather than operating another application.&lt;/p&gt;

&lt;p&gt;What is FinSaathi?&lt;/p&gt;

&lt;p&gt;FinSaathi is an AI-powered voice financial assistant designed to help users with everyday financial questions through natural voice conversations.&lt;/p&gt;

&lt;p&gt;It can help with areas such as:&lt;/p&gt;

&lt;p&gt;Budgeting&lt;br&gt;
Savings&lt;br&gt;
UPI and banking basics&lt;br&gt;
Credit scores&lt;br&gt;
Loans&lt;br&gt;
Government financial schemes&lt;br&gt;
Scheme eligibility&lt;br&gt;
General financial guidance&lt;/p&gt;

&lt;p&gt;But the interesting part is that FinSaathi doesn't stop at answering questions.&lt;/p&gt;

&lt;p&gt;During the challenge, I gradually added capabilities that made it behave more like a complete voice-agent system.&lt;/p&gt;

&lt;p&gt;How the System Works&lt;/p&gt;

&lt;p&gt;The basic voice pipeline looks like this:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
  ↓&lt;br&gt;
Voice Input&lt;br&gt;
  ↓&lt;br&gt;
Deepgram Speech-to-Text&lt;br&gt;
  ↓&lt;br&gt;
Gemini LLM&lt;br&gt;
  ↓&lt;br&gt;
Memory / Tools / Specialist / Human Escalation&lt;br&gt;
  ↓&lt;br&gt;
Murf Falcon Text-to-Speech&lt;br&gt;
  ↓&lt;br&gt;
Voice Response&lt;/p&gt;

&lt;p&gt;For outbound calls, the flow extends through LiveKit SIP:&lt;/p&gt;

&lt;p&gt;FinSaathi&lt;br&gt;
    ↓&lt;br&gt;
LiveKit SIP&lt;br&gt;
    ↓&lt;br&gt;
Linphone&lt;br&gt;
    ↓&lt;br&gt;
User&lt;/p&gt;

&lt;p&gt;The project uses Murf Falcon for natural voice generation, Deepgram for speech recognition, Gemini for conversational intelligence, and LiveKit for real-time communication and telephony.&lt;/p&gt;

&lt;p&gt;What I Built During the Challenge&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Voice Conversations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first goal was to make FinSaathi capable of having a natural voice conversation instead of just returning text.&lt;/p&gt;

&lt;p&gt;The user speaks, the speech is transcribed, Gemini processes the request, and Murf Falcon generates the response.&lt;/p&gt;

&lt;p&gt;The result is a conversational voice experience rather than a traditional chatbot.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;FinSaathi can remember relevant information about returning users.&lt;/p&gt;

&lt;p&gt;This means the assistant doesn't necessarily need to start from zero every time a user interacts with it.&lt;/p&gt;

&lt;p&gt;The important lesson here was that memory needs to be useful and intentional. An AI shouldn't simply store everything a user says.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real Tools and Data&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent was also given tools that allow it to perform tasks instead of simply generating answers.&lt;/p&gt;

&lt;p&gt;For example, FinSaathi can use a financial scheme eligibility tool when a user needs help determining whether they may qualify for a scheme.&lt;/p&gt;

&lt;p&gt;This changed the architecture from:&lt;/p&gt;

&lt;p&gt;User → LLM → Answer&lt;/p&gt;

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

&lt;p&gt;User → LLM → Decide whether a tool is needed → Tool → LLM → Answer&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outbound Phone Calls&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the most interesting parts of the challenge was Day 6.&lt;/p&gt;

&lt;p&gt;Instead of waiting for the user to open the browser and start a conversation, I connected FinSaathi with LiveKit SIP and Linphone so that FinSaathi could actually make an outbound call.&lt;/p&gt;

&lt;p&gt;The flow became:&lt;/p&gt;

&lt;p&gt;FinSaathi&lt;br&gt;
    ↓&lt;br&gt;
LiveKit SIP&lt;br&gt;
    ↓&lt;br&gt;
Linphone rings&lt;br&gt;
    ↓&lt;br&gt;
User answers&lt;br&gt;
    ↓&lt;br&gt;
FinSaathi speaks&lt;/p&gt;

&lt;p&gt;Once the call is answered, FinSaathi automatically introduces itself:&lt;/p&gt;

&lt;p&gt;"Hi, this is FinSaathi, your AI Financial Assistant..."&lt;/p&gt;

&lt;p&gt;The conversation then continues in real time.&lt;/p&gt;

&lt;p&gt;This was also where I faced one of my biggest debugging problems.&lt;/p&gt;

&lt;p&gt;A Real Problem I Faced&lt;/p&gt;

&lt;p&gt;During the outbound-call implementation, the phone call was working perfectly.&lt;/p&gt;

&lt;p&gt;Linphone was ringing.&lt;/p&gt;

&lt;p&gt;I could answer the call.&lt;/p&gt;

&lt;p&gt;But...&lt;/p&gt;

&lt;p&gt;Nobody was speaking.&lt;/p&gt;

&lt;p&gt;The call connected, but there was complete silence.&lt;/p&gt;

&lt;p&gt;Initially, it looked like a telephony problem, but the actual issue was in the outbound agent flow.&lt;/p&gt;

&lt;p&gt;The agent session was starting without properly initiating the first assistant response.&lt;/p&gt;

&lt;p&gt;The important fix was to correctly handle the SIP participant joining and explicitly trigger the initial greeting after the agent session was ready.&lt;/p&gt;

&lt;p&gt;The final flow became:&lt;/p&gt;

&lt;p&gt;SIP participant joins&lt;br&gt;
        ↓&lt;br&gt;
AgentSession starts&lt;br&gt;
        ↓&lt;br&gt;
Initial greeting is explicitly generated&lt;br&gt;
        ↓&lt;br&gt;
Murf TTS&lt;br&gt;
        ↓&lt;br&gt;
LiveKit audio output&lt;br&gt;
        ↓&lt;br&gt;
Linphone&lt;/p&gt;

&lt;p&gt;This was probably one of my biggest lessons from the challenge:&lt;/p&gt;

&lt;p&gt;A successful API connection doesn't necessarily mean the complete real-time pipeline is working.&lt;/p&gt;

&lt;p&gt;You have to trace the actual flow of data and audio.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Human Escalation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An AI assistant shouldn't try to solve everything itself.&lt;/p&gt;

&lt;p&gt;For Day 7, I taught FinSaathi when it should involve a human.&lt;/p&gt;

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

&lt;p&gt;"I think someone made an unauthorized UPI transaction."&lt;/p&gt;

&lt;p&gt;FinSaathi shouldn't pretend it can investigate or reverse the transaction.&lt;/p&gt;

&lt;p&gt;Instead, it explains that human assistance is appropriate and asks for permission before creating a support request.&lt;/p&gt;

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

&lt;p&gt;Possible fraud detected&lt;br&gt;
        ↓&lt;br&gt;
Explain why human help is needed&lt;br&gt;
        ↓&lt;br&gt;
Ask for permission&lt;br&gt;
        ↓&lt;br&gt;
User says YES&lt;br&gt;
        ↓&lt;br&gt;
Create escalation&lt;br&gt;
        ↓&lt;br&gt;
Generate reference ID&lt;br&gt;
        ↓&lt;br&gt;
Give user the next step&lt;/p&gt;

&lt;p&gt;I also made sure sensitive information such as OTPs, PINs, CVVs, passwords, and account credentials isn't included in the escalation summary.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Call Analytics&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For Day 8, I wanted to answer a simple question:&lt;/p&gt;

&lt;p&gt;How do I know whether my voice agent is actually performing well?&lt;/p&gt;

&lt;p&gt;So I defined what a successful FinSaathi conversation means and added call outcome tracking.&lt;/p&gt;

&lt;p&gt;The dashboard tracks:&lt;/p&gt;

&lt;p&gt;Total calls&lt;br&gt;
Successful calls&lt;br&gt;
Failed calls&lt;/p&gt;

&lt;p&gt;The important part is that these values come from actual conversations, rather than being hardcoded demo numbers.&lt;/p&gt;

&lt;p&gt;This was a useful shift from simply saying:&lt;/p&gt;

&lt;p&gt;"My AI agent works."&lt;/p&gt;

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

&lt;p&gt;"How well is my AI agent actually working?"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Specialist Agent Handoff&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For Day 9, I added a separate Government Scheme Specialist.&lt;/p&gt;

&lt;p&gt;The main FinSaathi agent handles general financial questions.&lt;/p&gt;

&lt;p&gt;The specialist focuses specifically on:&lt;/p&gt;

&lt;p&gt;Government schemes&lt;br&gt;
Eligibility&lt;br&gt;
Benefits&lt;br&gt;
Required documents&lt;br&gt;
Application-related guidance&lt;/p&gt;

&lt;p&gt;For example, if I ask:&lt;/p&gt;

&lt;p&gt;"Am I eligible for PM-KISAN?"&lt;/p&gt;

&lt;p&gt;FinSaathi can say:&lt;/p&gt;

&lt;p&gt;"I'll connect you to my Government Scheme Specialist. You won't need to repeat your question."&lt;/p&gt;

&lt;p&gt;The specialist then takes over with the context of the original question.&lt;/p&gt;

&lt;p&gt;The user doesn't have to explain everything again.&lt;/p&gt;

&lt;p&gt;This creates a simple multi-agent architecture:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                ┌── General Financial Question
                │
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;User → FinSaathi ───┤&lt;br&gt;
                    │&lt;br&gt;
                    └── Government Scheme Question&lt;br&gt;
                              ↓&lt;br&gt;
                   Government Scheme Specialist&lt;br&gt;
The Technology Behind FinSaathi&lt;/p&gt;

&lt;p&gt;The project combines several components:&lt;/p&gt;

&lt;p&gt;Component   Technology&lt;br&gt;
Speech-to-Text  Deepgram&lt;br&gt;
LLM Gemini&lt;br&gt;
Text-to-Speech  Murf Falcon&lt;br&gt;
Real-time voice LiveKit&lt;br&gt;
Telephony   LiveKit SIP&lt;br&gt;
SIP client/testing  Linphone&lt;br&gt;
Agent framework LiveKit Agents&lt;br&gt;
Memory  Project database/memory layer&lt;br&gt;
Analytics   Call outcome database + dashboard&lt;/p&gt;

&lt;p&gt;The interesting part isn't any individual API.&lt;/p&gt;

&lt;p&gt;It's how these pieces work together to create a complete voice-agent workflow.&lt;/p&gt;

&lt;p&gt;How to Run the Project&lt;/p&gt;

&lt;p&gt;Clone the repository:&lt;/p&gt;

&lt;p&gt;git clone YOUR_GITHUB_REPOSITORY&lt;br&gt;
cd murf-livekit-starter&lt;/p&gt;

&lt;p&gt;Set up the backend:&lt;/p&gt;

&lt;p&gt;cd backend&lt;br&gt;
uv sync&lt;/p&gt;

&lt;p&gt;Add your API credentials to your local environment file.&lt;/p&gt;

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

&lt;p&gt;LIVEKIT_URL=your_livekit_url&lt;br&gt;
LIVEKIT_API_KEY=your_livekit_api_key&lt;br&gt;
LIVEKIT_API_SECRET=your_livekit_api_secret&lt;br&gt;
MURF_API_KEY=your_murf_api_key&lt;br&gt;
DEEPGRAM_API_KEY=your_deepgram_api_key&lt;br&gt;
GOOGLE_API_KEY=your_google_api_key&lt;/p&gt;

&lt;p&gt;Never commit these values to GitHub.&lt;/p&gt;

&lt;p&gt;Then start the agent:&lt;/p&gt;

&lt;p&gt;uv run python -m src.agent dev&lt;/p&gt;

&lt;p&gt;For the browser-based experience, start the frontend according to the project's frontend setup.&lt;/p&gt;

&lt;p&gt;For outbound testing, the SIP configuration and Linphone account need to be configured separately.&lt;/p&gt;

&lt;p&gt;What I Learned&lt;/p&gt;

&lt;p&gt;The biggest lesson from these 10 days is that building a voice agent isn't just about connecting an LLM to a TTS API.&lt;/p&gt;

&lt;p&gt;The difficult parts are everything around the conversation.&lt;/p&gt;

&lt;p&gt;You have to think about:&lt;/p&gt;

&lt;p&gt;What should the agent remember?&lt;br&gt;
When should it use a tool?&lt;br&gt;
What happens when an API fails?&lt;br&gt;
When should it stop instead of guessing?&lt;br&gt;
When should a human take over?&lt;br&gt;
How do you measure whether a conversation was successful?&lt;br&gt;
When should another specialist agent take over?&lt;br&gt;
What happens when real-time audio doesn't behave as expected?&lt;/p&gt;

&lt;p&gt;The outbound-call debugging experience especially taught me that distributed real-time systems can fail silently. A call can connect successfully while the actual audio pipeline is broken.&lt;/p&gt;

&lt;p&gt;What's Next for FinSaathi?&lt;/p&gt;

&lt;p&gt;There is still a lot I'd like to improve.&lt;/p&gt;

&lt;p&gt;Some of the next steps would be:&lt;/p&gt;

&lt;p&gt;More reliable real-time financial data&lt;br&gt;
More Indian language support&lt;br&gt;
More specialist agents&lt;br&gt;
Better financial scheme coverage&lt;br&gt;
Improved human-support workflows&lt;br&gt;
More detailed call analytics&lt;br&gt;
Better production-grade privacy and authentication&lt;br&gt;
More robust handling of failed calls and unavailable services&lt;br&gt;
Final Thoughts&lt;/p&gt;

&lt;p&gt;Over these 10 days, FinSaathi went from a basic voice assistant to a much more complete system.&lt;/p&gt;

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

&lt;p&gt;Talk → Remember → Use Tools → Make Calls → Escalate → Measure → Handoff&lt;/p&gt;

&lt;p&gt;And the biggest thing I learned is that a good voice agent isn't one that tries to do everything.&lt;/p&gt;

&lt;p&gt;It's one that knows what it can do, what it shouldn't do, and when it needs help.&lt;/p&gt;

&lt;p&gt;This project was built as part of:&lt;/p&gt;

&lt;p&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/p&gt;

&lt;p&gt;with Murf Falcon powering the voice experience.&lt;br&gt;
GitHub&lt;/p&gt;

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

</description>
      <category>agents</category>
      <category>ai</category>
      <category>buildinpublic</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
