> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt.
> For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# Government Services Voice Agents

> Architecture, model configuration, and pitfalls for building citizen-facing government scheme and services voice agents with Sarvam AI.

Government scheme awareness bots serve the widest and most varied audience of any vertical here: citizens with limited formal education, elderly users, and speakers of every major Indian language, often calling from a basic phone with an unreliable connection. The bar isn't just "answer correctly": it's "be understandable and trustworthy to someone this system was never designed to accommodate."

This guide covers the architecture and pitfalls common to citizen-services voice agents, then walks through the [Government Scheme Agent](/api-reference-docs/cookbook/Examples/Government_Scheme_Agent_LiveKit) example as the concrete implementation.

**In short:** auto-detect language, keep answers short and jargon-free, and always point citizens to an official source to confirm eligibility rather than treating the bot's answer as final.

## Architecture

```
Citizen Audio → STT (streaming, auto-detect language) → LLM (simple language, cites official sources) → TTS (streaming, warm + clear) → Citizen
```

You cannot assume which of the 11+ supported languages a citizen will use, and many callers will code-mix. `language="unknown"` on STT, plus a default `target_language_code` chosen for the widest reach in your deployment region (commonly `hi-IN`), are the right starting point, not an afterthought.

Scheme names, eligibility criteria, and deadlines change. Don't let the bot state specifics as certain. If you have access to an authoritative scheme database or API, wire it in via [tool calling](/api-reference-docs/chat-completion/overview#tool-calling-function-calling) so answers are grounded in current data instead of the model's training-time knowledge.

Citizens with limited digital literacy benefit from short, concrete turns ("You'll need your Aadhaar card and bank passbook") over long, multi-clause explanations. Structure the system prompt to enforce this rather than relying on the model to self-moderate.

Every answer about eligibility or benefits should end with a pointer to the relevant official portal or office. The bot is a first stop for understanding, not the final word on approval.

## Recommended models & params

| Layer            | Setting                                                                                                                                                                                                | Why                                                                                                                                                      |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| STT              | `saaras:v3`, `mode="transcribe"`, `language="unknown"`                                                                                                                                                 | Widest possible language coverage for a citizen base you can't pre-segment by language                                                                   |
| LLM              | `sarvam-30b` for most scheme-explanation turns; `sarvam-105b` when it needs to reason across multiple schemes to recommend the best fit for a citizen's situation                                      | Most turns here are explanatory, not deeply reasoning-heavy. Save the latency cost of `sarvam-105b` for genuine multi-scheme comparison                  |
| LLM params       | Low `temperature` (0.2–0.4)                                                                                                                                                                            | Consistent, predictable answers matter more than creative phrasing when the topic is benefits eligibility                                                |
| TTS              | `bulbul:v3`, WebSocket streaming, `pace=0.85–0.9`, warm speaker (e.g. `simran`)                                                                                                                        | Slower than the conversational default, with a warm tone that reads better to elderly and low-literacy callers than a brisk, efficient-sounding delivery |
| Speaker/language | Match the [language-specific speaker recommendations](/api-reference-docs/text-to-speech/best-practices#10-speaker-selection-by-language) for your deployment region rather than defaulting to `en-IN` | A citizen-services bot's voice is often that user's primary interface with the scheme, so it's worth getting the local-language voice quality right      |

## Latency targets

* Follow the same streaming-first defaults as every other vertical: streaming STT, streaming TTS.
* Citizens calling over patchy rural connectivity are more sensitive to dropped audio than to an extra few hundred milliseconds of LLM latency. Prioritize connection resilience and clear re-prompting ("Sorry, I didn't catch that, could you repeat?") over squeezing out the last bit of speed.
* If you add tool calling to a live scheme database, that's an extra network round-trip in the critical path. Cache frequently asked scheme details where currency isn't second-to-second critical, and reserve live lookups for status or deadline-sensitive queries.

## Pitfalls

Scheme names, amounts, and deadlines change with policy updates the model wasn't trained on. Always have the bot flag uncertainty and redirect to an official portal for final confirmation. This is explicit in the [Government Scheme Agent](/api-reference-docs/cookbook/Examples/Government_Scheme_Agent_LiveKit) system prompt: "If you don't know something, honestly say so..."

The [Government Scheme Agent](/api-reference-docs/cookbook/Examples/Government_Scheme_Agent_LiveKit) prompt explicitly instructs "use simple language avoiding complex jargon." Copy that instruction rather than letting the model default to formal, government-document-style phrasing a citizen bot shouldn't reproduce.

Instructions like "visit the portal and upload your documents" mean little to someone who's never used a web form. Where possible, describe the offline path (nearest office, required physical documents) alongside the digital one.

A brisk, efficient IVR voice reads as impatient to an elderly caller. Use the slower, warmer preset from [recommended params](#recommended-models-params) rather than the general conversational default.

Citizens will ask about schemes or services the bot doesn't cover. Have it say so plainly and redirect to a human helpline or official number instead of guessing.

## Full example

The [Government Scheme Agent](/api-reference-docs/cookbook/Examples/Government_Scheme_Agent_LiveKit) guide has the complete, runnable code (LiveKit-based). The accessibility-relevant part of the system prompt:

```python
class GovernmentSchemeAgent(Agent):
    def __init__(self) -> None:
        super().__init__(
            instructions="""
                You are a helpful government scheme awareness assistant...
                Communication guidelines:
                - Use simple language avoiding complex jargon
                - Be patient and willing to repeat or explain again
                - Speak slowly and clearly
                - Be encouraging and supportive
                - If you don't know something, honestly say so and suggest where they can get accurate information
                - Always mention official government portals for verification
                - Be sensitive to the fact that many users may have limited formal education
            """,
            stt=sarvam.STT(language="unknown", model="saaras:v3", mode="transcribe"),
            llm=sarvam.LLM(model="sarvam-105b"),
            tts=sarvam.TTS(target_language_code="hi-IN", model="bulbul:v3", speaker="simran"),
        )
```

**See also:** [Agri / Rural](/api-reference-docs/api-guides-tutorials/speech-to-text/use-cases/agri-rural) for a closely related audience (rural, feature-phone-first, multilingual) with farming-specific content.