Home / Blog / Production Hindi Voice Agent

Engineering · Voice AI

How we built a production Hindi voice agent

The build breakdown of the agent that answers Battery Smart's inbound driver support calls — with zero human handoff for in-scope queries.

There is a large and growing gap between a voice AI demo and a voice AI system. A demo needs to survive one conversation in a quiet room. A production system answers thousands of calls from drivers standing next to running engines, speaking Hindi mixed with English, asking about money — and it has to be right, fast, every time, with no human watching.

This is the breakdown of how we built the second kind: the voice agent that handles inbound driver support for Battery Smart, India's largest EV battery-swapping network. In-scope calls — battery status, station availability, swap history, account and payment queries — are resolved end-to-end with zero human handoff.

The constraints that shaped everything

Three constraints drove every architectural decision:

The architecture

[DIAGRAM: full architecture diagram — telephony, STT, agent layer, API gateway, TTS, observability]
Architecture diagram — to be added

The simplified flow, every stage streaming:

Telephony Inbound call audio
STT Sarvam AI, Hindi-tuned, streaming
Agent Layer LLM — dialogue state + tool calling
Live APIs Driver · battery · station data
TTS Sarvam AI, natural Hindi voice

Five stages, but the design rule is one sentence: treat the phone call as a distributed system. Each stage can be slow, fail, or return garbage, and the call has to survive all of it gracefully.

The speech layer: why Sarvam AI

We chose Sarvam AI for both speech-to-text and text-to-speech because it is built for Indian languages rather than adapted to them. That mattered in three specific ways:

Both directions run streaming: partial transcripts flow to the agent as the caller speaks, and synthesized audio starts playing before the full response is generated.

The agent layer: an LLM with tools, not an intent tree

The classic approach here is an intent classifier feeding a decision tree — IVR 2.0. We went with an LLM agent layer instead, for one reason: real callers don't speak in intents. They interrupt themselves, ask two things at once, and refer back to something they said a minute ago. A dialogue-state-carrying LLM handles that naturally; a tree becomes unmaintainable.

The agent layer owns three jobs:

  1. Understanding in context. It maintains dialogue state across turns, so "aur wahan se pehle wala?" resolves against what was already discussed.
  2. Tool calling. Every fact the agent can state maps to a tool — a thin, typed wrapper over a production API. Driver profile, battery telemetry, station availability, swap history, payments. If there's no tool for it, the agent cannot claim it.
  3. Knowing its limits. The in-scope query list is explicit. Anything outside it — disputes, refunds, anything contractual — routes to the escalation path with the transcript attached. The prompt is written so the agent's failure mode is "let me connect you", never a confident guess.

The most important line in the system prompt is not what the agent should do. It's what the agent must never do: invent an answer it didn't retrieve.

Live data, defensively

Tool calls hit the same production APIs that power the driver app — which means answers reflect reality at answer time, and also means the agent inherits every failure mode those APIs have. So every tool carries a timeout, a retry policy, and a spoken fallback ("I'm having trouble checking that right now — one moment"). A slow upstream service degrades the conversation; it never breaks it.

Latency engineering

The latency budget is end-to-end: caller stops speaking → agent starts speaking. Ours lands at ~200ms on average. Getting there was less about any single fast component and more about never doing work in sequence that could happen in parallel:

What production actually required

Everything above gets you a working agent. These are the parts that let it run unsupervised:

What we deliberately didn't build

Two roads we considered and rejected, because both optimise for the demo instead of the operation:

Results

In-scope customer queries are resolved with zero human handoff, 24/7, at 1000+ calls per month, 70% of total inbound volume. Support executives stopped scaling with customer growth, which was the point. Less hiring. More postive EBITDA.

What we'd tell anyone building one

This is the engineering behind our AI voice agents service, and the same tool-calling, live-data approach powers our RAG & AI integration work. The full case study, including the business results, is here: Battery Smart voice agent case study →

Want a voice agent like this?

Book a call — we'll demo the agent live and map what your version would look like.