Sarvam Epoch Buildathon · 26.07.2026 · Razorpay Arena

A voice career counsellor for tier-3/4 India

Disha listens the way India speaks.
Hindi, Marathi, English — mixed.
Answers with judgment.

Built by
Rushikesh Patade · solo
Time to ship
04h · 11:35 → 15:35 IST
Voice stack
Sarvam Saaras v3 + Bulbul v3
Scored branch
Voice Experience
01 / The problem

The hardest career question is rarely about careers.

A student says “mujhe engineering karni hai.” Underneath that one sentence sits a fee ceiling, a parent who won’t allow a hostel, a two-hour travel limit, and a dream borrowed from a cousin. A form captures the answer. A counsellor discovers the reason.

Today that student decides from two cousins, a WhatsApp forward, and a commission agent who names the colleges he’s paid to name. They are phone-first, speak Hindi or Marathi code-mixed with English, and have no trustworthy adult to ask.

Voice wasn’t a feature. It was the only interface that made sense.
02 / The idea, locked

One honest conversation, in the student’s own language.

A voice counsellor that asks the questions nobody asked, opens avenues they’ve never heard of, and notices when the real problem is pressure — not marks.

  • The user

    Class 11–12 / fresh-pass student in a tier-3/4 town. Phone, no laptop. Speaks Hindi or Marathi, code-mixed.

  • The job

    Leave with 2–3 viable, affordable career avenues, a plan a parent can read — and if they’re struggling, a human counsellor alerted.

  • The state change

    Spoken trade-offs grounded in a closed dataset · a written student + parent summary · a flag log and escalation card in a counsellor queue.

03 / How I leveraged Sarvam

Sarvam made the hardest part feel almost unfair.

In most voice products the first hours vanish into plumbing — transcription, accents, language detection, synthetic voices that flatten emotion. The first loop worked early enough that the rest of the time went to the product’s judgment.

Saaras v3 · the ears

Code-mixing as speech, not noise.

A student says “fees ka issue hai, hostel afford nahi kar payenge” without adapting to the machine — and a slip into Marathi mid-sentence survives. Runs on language="unknown" auto-detect. 22 Indian languages, code-mixed output.

Bulbul v3 · the voice

A personality people trust.

Indian names sound right; English words inside Hindi don’t break the rhythm. When Disha slows down after a student names family pressure, the voice carries the change. 11 languages, 30+ natural voices.

Docs AI · the ingestion — a third Sarvam product

The SD SEED handbook ships subsetted fonts with no Unicode map — pdftotext returns glyph soup. Sarvam Docs AI reads the rendered page instead, so both handbooks digitize cleanly into chunks the agent later cites by page. It runs offline, upstream of the call — the reason search_handbook can quote a real source instead of inventing one.

04 / The system

Every layer has a job, a boundary, an observable outcome.

Input
Phone mic

One tap in a browser. No app, no login.

Sarvam · listen
Saaras v3 STT

Code-mixed Hindi/Marathi → usable context.

Reason
Agent + 12 tools

LiveKit worker. Elicit, ground, flag, remember.

Sarvam · speak
Bulbul v3 TTS

A voice that belongs in the conversation.

  • Grounding

    search_careers · search_handbook · find_scholarships over a closed dataset — the advice can only be as wrong as the data.

  • Live surface

    Constraint tracker, flags and refusals stream over the LiveKit data channel to a Next.js client — no DB on the live path.

  • Deployed

    Web on Vercel · Python worker + case API on a Graviton box via Coolify. Case API has no public domain — it fails closed.

05 / The full loop one call today, a counsellor that grows with the student

From a first vague call to a lifelong career companion.

Phone tapno app · no login
Voice call · Sarvam
Saaras v3listen · auto-detect
Dishareason
Bulbul v3speak
Counselling loopprofile · constraints · wellbeing
Grounded KB327 paths · 2 handbooks · 41 schemes
Live web surfacetracker · flags · refusals
Session endstudent + parent summary · counsellor card
Memoryconversations | person facts
Live data refresh. Cron / loop engineering keeps the KB fresh — new paths & scholarships, never stale. [roadmap]
Memory → return visit. Questions evolve, the counsellor grows with the person. [roadmap]
06 / What it captures this is not “ask AI anything”

Every call reads more than it says back.

Listens for → structured signal

What Disha quietly captures

Profile
name · class · stream · interests — re-injected into the prompt so a name is never asked twice
5 constraints
travel · hostel · fee ceiling · family permission · scholarship dependence
Wellbeing
distress · family pressure · choice paralysis · self-harm — each with the verbatim quote
Facts
notable life facts (a parent’s work, a responsibility at home) worth guidance later
Strengths
2–3, each bound to the student’s exact words as evidence
Produces → and refuses to invent

What the student walks away with

Shortlist
2–3 exact tool-returned paths — unverified ones are dropped, never spoken
Scholarships
only schemes whose applies_to fits the path under discussion
Handbook facts
durations, forms, entrance exams — only while naming the page citation aloud
Refusals
every out-of-list ask (a college, a fee, a salary) logged and auditable
Artifacts
student summary · parent summary (translated) · counsellor escalation card
Voice Experience 2.5× the scored branch

Live code-mix, real turn-taking, a voice with grammar.

  • Barge-in

    Cut Disha off mid-sentence and she stops in 1.2–1.4s — measured across four interruptions, no degradation over three consecutive cut-ins, and she never resumes the killed sentence.

  • Language auto-detect

    Saaras runs on language="unknown" — it understands Hindi, Marathi, English and code-mixing without the student ever adapting to the machine. Comprehension is language-agnostic; the reply-language directive rebuilds the prompt without dropping other state.

  • She sounds like herself

    Hindi and Marathi mark the speaker’s gender on the verb. Disha is a woman, so the prompt forces the feminine form everywhere — “main samjhaati hoon”, “mi sangte” — never the masculine.

  • The room got loud

    Browsers suppress a fan easily; nearby talking lives in speech frequencies and syllable rhythm. Cancelling background voices, not just noise, kept the demo room from reading as an interruption.

  • Garbled input

    Every number, class and institution name is repeated back to confirm (“gyarah-baarah class, theek?”); unclear proper nouns are re-asked, never guessed.

JTBD completion 2.5×

A conversation that finishes the job — no builder touch.

Five constraints surface through concrete life questions, never a form: travel · hostel · fee ceiling · family permission · scholarship dependence. Each saved the moment it becomes clear.

  • Not an interview

    Rhythm rule enforced in the prompt: after each fact, give something back — name a real path from search_careers and its trade-off — before asking at most one new question. By turn 5 the student has heard 2–3 concrete paths.

  • The artifact

    finish_session persists a Hindi summary + a shortlist of exact tool-returned paths only — unverified paths are dropped, not spoken. A parent-facing version goes out translated.

  • The handoff

    Any wellbeing flag logs a verbatim quote and a timestamp into a counsellor escalation card — the job isn’t “a chat reply”, it’s a state change on a second surface.

Creativity 1.5×

Three reinforcing choices — and the rule lives in code.

  • Indirect elicitation

    Constraints surface through life questions, never a form. Advice a student brings (cousin, WhatsApp, agent) is acknowledged for its care, then checked against the list — never endorsed because someone trusted said it.

  • Closed-list discipline

    Every named career triggers search_careers first. No match → the reply must begin “meri list mein nahi hai”, then log_refusal, then the nearest listed option. No colleges, fees, cutoffs, or salaries — ever. Every refusal is auditable.

  • The prompt lost — so the tool won

    Told in plain words to stop the career script after a frightening moment, the model gave the helpline… then asked about travel distance one turn later. Instructions are a request; the tools are the rule. A self-harm flag now flips a safety lock that makes the career tools refuse for the rest of the session.

Memory & Context

It remembers the student, not the transcript.

Within the call. The five constraints and the profile fill a live tracker on the student’s screen. The saved profile is re-injected into the system prompt after every save_profile, so a long call never asks a name twice.

Across sessions. Reopening the link resumes the case — distilled facts only. recall_memory lets Disha reach for why an option was ruled out. By design it stores no audio; flags keep the quote and timestamp, nothing more.

  • Deliberately forgotten

    No audio stored. No transcripts kept. The memory boundary is a product decision, written down in MEMORY-DESIGN.md and enforced in the load path.

Impact 1.5×

Grounded in real data, and a real track record.

The alternative isn’t nothing — it’s a commission counsellor naming colleges he’s paid to name. The metric that matters: % of students reaching a constraint-fit shortlist vs. an agent-fed default.

327grounded career pathways
41government scholarships
02printed handbooks, cited by page
  • Credibility

    The career tree descends from NaksheKadam, my SIH-2022-winning project on this exact problem — data reuse with disclosed lineage, zero code reuse.

Delight

At the hardest moment, it drops the checklist.

When distress, family pressure or choice paralysis appears, Disha calls flag_wellbeing with the student’s exact words, then slows down, acknowledges, and drops the constraint questions for that turn. She never diagnoses, never labels — she flags and hands to a human.

For explicit self-harm language, the career conversation ends. She gives the Tele-MANAS helpline 14416 and stays with the student in short warm sentences. The parent summary that reaches home frames the student’s constraints with respect. Honest recovery, not cheerfulness.

Delight here is judgment under pressure — not a stock “I understand your concern.”
07 / The honest part I used Sarvam to test a Sarvam agent

I built the ruler too — and it caught what I’d have shipped.

Coval and Hamming are built for English; on Marathi they score the failures that matter least reliably. So a persona bot speaks through Bulbul, the agent’s replies come back through Saaras, and every step is scored twice — assertions and an LLM judge — passing only if both agree. The agent under test is unmodified.

14/22steps passing on assertions alone
8/22surviving a reader too
0lines changed in the agent under test
  • It found the bug

    Five Marathi turns, five Hindi replies — STT auto-detected fine, but TTS was hardcoded to hi-IN. One line killed the whole Marathi path. A free-form call had already “passed” it.

  • Two bugs were in the ruler

    A restarted worker read as a failed safety flow; a double-transcription bug blamed the agent for its own cut-off fragments. Before believing a bad score, check the thing measuring it was alive.

08 / Where it grows — the person shipped: single call + resume roadmap: the multi-year arc

Not post-12 advice. A counsellor that grows with you.

Because conversations and person-facts are stored separately, Disha recalls the student, not a transcript — so each visit starts deeper than the last, and the questions change as the person does.

01

First call

From “no idea” to “these things interest you — this is worth trying.” A first constraint-fit shortlist.

vague → a direction
02

They come back

After the spoken aptitude test, Disha pushes an emerging interest a level deeper. The questions are no longer “what stream?” but “how far into this?”

a direction → a plan
03

The long arc

Post-12 → degree or diploma → first jobs → career moves. The same voice, carrying everything it learned, asking the questions the next stage needs.

a plan → a career
09 / Where it grows — the data shipped: closed KB roadmap: the refresh loop

Grounded advice is only as good as fresh data.

The risk. Career paths and government scholarships change every year. A static tree quietly goes stale — and a confident, out-of-date answer is worse than a refusal.

The plan. Cron / loop-engineering agents that continuously discover new pathways and scholarships and fold them into the closed KB, with lineage disclosed — so the same three lookups keep returning current answers.

  • The guarantee holds

    The dataset gets fresher, but the discipline is unchanged: Disha still speaks only what a tool returns, still says “meri list mein nahi hai” for anything absent, and still logs every refusal. Fresh data widens the list — it never loosens the rule.

10 / The clock “a few hours” only works when you know what not to build

Four hours, riskiest layer first.

  1. Idea lockedOne honest conversation, in the student’s language.
  2. Voice aliveHindi in, a natural Bulbul voice back. Riskiest layer working.
  3. Product, not demoConstraints, grounded search, memory, summary connected.
  4. Language followedA Marathi student stops being answered in Hindi.
  5. Boundaries heldThe wellbeing stop moved from prompt into code.
  6. Room got loudBackground voices stopped counting as the student.
  7. She sounds like herselfA woman’s voice needed a woman’s grammar.
  8. ShippedImages built, deploy green, conversation held under test.
11 / Against the rubric

Every dimension, mapped to observable proof.

DimensionMultObservable proof
Voice Experience2.5×Auto-detected Hindi/Marathi/English code-mix input · barge-in 1.2–1.4s, no resume · feminine-verb grammar · background-voice cancellation.
JTBD completion2.5×Five constraints elicited conversationally → closed-list shortlist → student + parent summary, no builder touch.
Creativity1.5×Indirect elicitation · auditable “not in my list” refusals · safety stop enforced in the tools, not the prompt.
Impact1.5×Commission-counsellor baseline · 327 pathways / 41 scholarships · NaksheKadam SIH-2022 lineage.
Memory & ContextLive constraint tracker · case resumes on reload · distilled facts only, no audio, no transcript.
DelightPressure moment handled with judgment — tone shift, verbatim flag, honest recovery without losing progress.

No double-counting — in-call flow → Voice · persisted resume → Memory · refusal + flagging → Creativity · pressure handling → Delight · artifact → JTBD.

The takeaway

India-first AI should not feel like a translation.

Sarvam let me build from the student outward instead of the model inward. The language could be mixed, the thought unfinished, the accent local — the product still listened. In four hours, that’s the difference between a demo and a counsellor.

Rushikesh Patade · Built with Sarvam Saaras v3 · Bulbul v3 · Docs AI

github.com/Rushour0/sarvam-disha  ·  read the build story ↗

Disha / Build 01