Inspiration

Hundreds of millions of Indians think and speak in a mix of Hindi and English, yet most assistants either stumble on Hinglish or expect you to hand your phone number, Aadhaar, PAN and UPI ID straight to a cloud model. I wanted an assistant that talks the way we talk and treats personal data as something the model never needs to see.

What it does

Saathi is a voice-first Hinglish assistant for everyday tasks: a daily brief, bill tracking and payment, reminders, email triage and calendar.

  • Hinglish first: "Bijli ka bill kab due hai?" finds the BESCOM electricity bill, its amount and days left.
  • Approval gate: "Bijli ka bill pay kar do" never pays on its own. It creates an approval card with the exact amount and UPI ID; nothing happens until you tap Approve.
  • Mask before model: phone numbers, emails, Aadhaar, PAN, UPI, card and account numbers are replaced with tokens like before any model call. A privacy panel shows exactly what the model saw.
  • Memory you control: encrypted at rest (AES-256-GCM), view, edit or delete any memory.
  • Budget meter: every token is priced and a hard daily cap is enforced.
  • Full Hindi / English UI, dark and light mode, mobile to desktop. No sign-up: open the link and you get a demo session.

How I built it

  • Nebius Token Factory (OpenAI-compatible API) for every model call.
  • NVIDIA Nemotron 3 Nano routes every turn: intent + skill selection as JSON, then the spoken reply.
  • NVIDIA Nemotron 3 Super handles escalation: low router confidence, multi-step asks or a failed tool call.
  • Qwen3-Embedding-8B for memory recall over pgvector.
  • API: Python 3.12, FastAPI modular monolith, async SQLAlchemy, Alembic, on Render (Docker).
  • Web: Next.js 15, TypeScript, Tailwind, TanStack Query, browser Web Speech API for hi-IN / en-IN voice, on Vercel.
  • Data + auth: Supabase Postgres 16 + pgvector with Row Level Security on every table, anonymous demo sessions.

Challenges I ran into

Nemotron's reasoning tokens count against max_tokens. With a 256-token router budget the JSON was silently truncated and every turn fell back to plain chat, so bills and payments looked "broken". Structured logging of each route decision exposed it; giving the router room fixed routing. Making Hinglish skill arguments robust ("bijli" means electricity, "pay_bill" means pay) took a few iterations too.

Accomplishments that I'm proud of

A real end-to-end flow on live infrastructure: Hinglish question, correct skill, masked prompt, approval card, confirmed action, all under a strict daily budget, with no personal data ever reaching the model.

What I learned

How to run a two-tier Nano/Super routing setup cheaply, how reasoning models interact with JSON mode, and how much trust comes from showing users exactly what the model saw.

What's next for Saathi

Gmail and Google Calendar connectors beyond demo data, server-side Indic speech recognition for browsers without Hindi STT, on-device memory encryption, and more Indian languages (Odia, Bengali, Tamil).

Live demo: https://saathi-chi-sandy.vercel.app Code: https://github.com/sandeepguptax2003/saathi

Built With

Share this project:

Updates

Submission history