Hindi, English and Hinglish¶
People speak to their own Ira the way they speak: in Hindi (written in Devanagari or in Latin letters), in English, and in Hinglish, mixing both in one sentence, often in half sentences: "upload kitna hua", "jab khatam ho jaaye, batana".
What Ira does¶
- Understanding. The system prompt says which languages the person speaks (each person chooses, in Your assistant; Hindi, English and Hinglish by default) and that half sentences are normal. When a tool that only reads can settle what they meant ("upload kitna hua": look at the tabs), Ira looks first, and asks one short question back only when looking would not help.
- Speech in the browser, when the server has none. With
voice.browser_stt: fallback(the default), the Ira app recognises speech with the browser's own engine when the server has no speech-to-text, and sends Ira only the text:hi-INfor someone who speaks Hindi or Hinglish,en-INotherwise.preferuses it even when the server has speech-to-text;offnever. Chrome sends the audio to Google to do this (see Privacy). - Transcription keeps the words. The speech-to-text prompt says to
transcribe in the language spoken and never to translate, answer or tidy
up. A vocabulary list (
voice.stt.vocabulary) helps with names. - Replies in kind. Ira answers in the language and script of the latest
message (English gets English, Devanagari gets Devanagari, Hindi in Latin
letters gets Hinglish in Latin letters), or always in the language the
person chose (
reply_language:auto,en,hi,hinglish). - A bilingual Indian voice. With Amazon Polly and an Indian English or
Hindi voice (Kajal speaks both), a reply in Devanagari is spoken as
hi-INand everything else asen-IN, which reads Hinglish in Latin letters naturally.
Measured, not assumed¶
ira eval language asks a small fictional set of requests
(src/ira/evals/language.yaml: 7 in Hindi, 10 in Hinglish, 7 in English)
of the models configured in ira.yaml, with stand-in devices and search, and
reports:
- intent: the share of requests where Ira called the right tool, first
or after another (bringing a tab to the front, then reading the screen,
is right), or called none when none fits. The devices are stand-ins for
Ira for Mac's
browser_tabs,browser_show_tabandscreen_read; - reply: the share of answers in the language of the request (any Chinese, Japanese or Korean character in it is a miss), counted in words, with addresses and "quoted" or bold titles left out (a Hindi answer that lists English tab titles is a Hindi answer);
- heard (with
--spoken): each request is spoken by a macOS voice (Lekha for Hindi, Rishi for English and Hinglish), or with--voice pollyby Polly's Kajal (ashi-INfor Devanagari,en-INotherwise), transcribed by the configured speech-to-text, and scored by word accuracy (1 minus the word error rate). The transcript is then what Ira is asked.
cd ~/ira/me
ira eval language # typed requests: one or two model calls each
ira eval language --spoken # speak, transcribe, then ask
ira eval language --spoken --voice polly # spoken by Polly's Kajal (any OS)
ira eval language --json # every request, answer and score
Nothing is written to the business folder: the run uses a database in memory.
Results so far¶
On 22 Oct 2026, typed requests, on an EC2 server in Mumbai with the
default tier of ira init --provider bedrock: moonshotai.kimi-k2.5, then
zai.glm-5, then deepseek.v3.2 on Bedrock (us-east-1). Each run is the 24
requests once; models are not deterministic, so runs differ.
| Run | Prompt | Intent (hi / hinglish / en) | Reply language (hi / hinglish / en) | Median answer |
|---|---|---|---|---|
demo:router |
(the keyword router, no model) | 29% / 100% / 57% | 0% / 0% / 100% | instant |
| 1 | ask when unsure | 100% / 100% / 100% | 100% / 100% / 100% | 2.0 s |
| 2 | ask when unsure | 86% / 90% / 100% | 100% / 80% / 100% | 1.8 s |
| 3 | look first, then ask | 100% / 100% / 100% | 100% / 100% / 100% | 2.2 s |
| 4 | look first, then ask | 100% / 100% / 100% | 100% / 100% / 86% | 2.8 s |
| 5, deployed | look first, then ask; Ira for Mac's tools | 86% / 90% / 100% | 86% / 100% / 100% | 1.8 s |
| 6, deployed | look first, then ask; Ira for Mac's tools | 100% / 100% / 100% | 100% / 90% / 100% | 1.8 s |
Runs 1 to 4 used stand-ins for the old Chrome extension (list, read and
watch a tab). On 23 Oct 2026 the set moved to Ira for Mac's own tools: a
tab's progress is now read by bringing it to the front and reading the
screen, and the three "tell me when the upload finishes" requests, which
have no tool any more, became "what is on my screen?". Runs 5 and 6 are
that set on the server as deployed that day (fda306a), with
qwen.qwen3-235b-a22b-2507 added to the chain. In run 5, Kimi once wrote
its tool call as text ("
Some models slip other scripts in. Kimi K2.5 has answered "了几个月क्या मैं सर्च बटन दबा दूं?" (four Chinese characters before a Hindi question) and, once, wholly in Chinese. Ira now takes Chinese, Japanese and Korean out of an answer to someone who does not write them; an answer that was mostly in them is asked for once more, and if that fails Ira says, in the person's language, that it did not understand. It is never silent and never Chinese.
Heard: spoken by Polly, transcribed by Amazon Transcribe¶
The first speech numbers, on 23 Oct 2026, on the same deployed server:
each request spoken by Polly's Kajal, transcribed by Transcribe streaming in
ap-south-1 (Hindi preferred, then Indian English), then asked.
| Run | Heard (hi / hinglish / en) | Intent | Reply language |
|---|---|---|---|
| 1 | 95% / 92% / 86% | 100% / 80% / 100% | 86% / 80% / 100% |
- Hinglish comes back in Devanagari ("Chrome mein kaunse tabs khule hain?" is heard as "क्रोम में कौन से टैब्स खुले हैं?"). That is the right words in the other script, so heard also scores each Hinglish request against its Devanagari spelling, and the nukta (ख़ or ख) is not counted. Ira answers a request heard in Devanagari in Devanagari Hindi, which sounds the same spoken.
- Real mishearings: "tab" heard as "तब" (twice); "mein kya naya hai, web pe dhundo" heard as "miyanayahe"; and the short English "Thanks, that's all for now." heard as Hindi ("थैंक्स, था"), because with Hindi preferred, Transcribe picks one language per utterance and a short one can go the wrong way. "9" came back as "नौ", the same word.
- The intent misses were a call written as text (now run) and "I'll check" with no check (the prompt now says to call the tool at once).
What the misses were:
- Half sentences (run 2): "upload kitna hua" and "जब अपलोड पूरा हो जाए तो बताना" got a question back ("which upload?") instead of a look at the tabs. The prompt then changed to "look first, then ask"; both passed in runs 3 and 4.
- Script drift, in every kind of prompt: an answer about the news in English to "aaj ki khabar batao", and in Hinglish to "What's in the news today?"; "theek hai, thanks" answered in Devanagari. About one answer in 25 drifts. Keeping names and titles as they are is fine; the drift is in the sentence around them.
- An earlier run, scored the old way, counted a Hindi answer that listed English tab titles as English, and "list the tabs, then read one" as the wrong tool. Both were scoring faults, fixed before the runs above.
The demo router is not a language model. It knows a few Hinglish words for the quick start's phrases, so it routes those, and it always answers in English. Its numbers are a floor.
Not measured yet: speech. On 22 Oct 2026 Bedrock's OpenAI-compatible
endpoint (Mantle) refused audio for Voxtral ("Model does not support audio
modality"), with the audio part first or second, and AWS's model card now
lists Voxtral's speech input under the Converse API only. So chat_audio
with Voxtral on Mantle does not transcribe today, and the heard column
has no real number yet. Amazon Transcribe streaming (voice.stt.type:
transcribe, Hindi and English identified per recording) is the next to
measure, once the server's role may use it. When a speech-to-text that works is configured, run
ira eval language --spoken and add its row. Until then, IRA makes no claim
about how well it hears Hindi or Hinglish.