Shruti Odia · Udgam Labs

UDGAM LABS · Speech-to-text model · about 56M parameters · part of the Shruti family

Shruti Odia

Shruti Odia turns Odia and English speech into text, offline, from one 29.7 MB file. Odia comes out in Odia script and English words stay in English, the way people actually type: hockey match ପାଇଁ ticket ମିଳିଗଲା. It runs on a phone, a laptop or inside a web page, with no server and no internet connection. On a 2021 Samsung Galaxy F62 it transcribes 10.3x faster than real time using 64 MB of memory.

On Odia conversations that mix in English, scored with the English words written in English letters, it makes fewer errors than every model we measured, including SraVaani-1.0, a model about 31 times its size (36.2 vs 43.4), and IndicConformer Odia, almost five times its size (49.9). On read Odia, and on those conversations with English written in Odia script in the reference, those two larger models are more accurate (see below). Whisper's language list has no Odia, so it is not in the table.

Shruti Odia is the Odia member of the Shruti family, next to Shruti Hindi, Shruti Marathi, Shruti Tamil, Shruti Bengali, Shruti Telugu and Shruti Gujarati, and is built on Cactus Whistle (Apache-2.0) via Shruti Hindi: we retrained all its weights on openly licensed Odia and English speech and added 700 Odia vocabulary pieces.

Shruti (ଶ୍ରୁତି) is Sanskrit for "that which is heard".

Try it: in your browser, on your own device · demo on Hugging Face · Code and examples: github.com/udgamlabs/shruti

Audio (Odia with English, AI voice)        Shruti Odia writes (on the phone, native engine, unedited)
"...hockey match ପାଇଁ ticket ମିଳିଗଲା..."     ->  କଳିଙ୍ଗ ଷ୍ଟାଡିୟମରେ hockey match ପାଇଁ ticket ମିଳିଗଲା ଆଜି ସନ୍ଧ୍ୟାରେ ଆମ team ଖେଳିବ
"Cyclone ର warning ଆସିଛି, ଘରେ ମହମବତୀ..."   ->  ସାଇଟ୍ରୋନର warning ଆସିଛି ଘରେ ମହମ୍ମଦୀ ଚୁଡା ମୁଢି ଆଉ ପିଇବା ପାଣି ରଖିଦିଅ

(The first line writes stadium in Odia script. The second shows real errors: Cyclone as ସାଇଟ୍ରୋନର and ମହମବତୀ, candles, as ମହମ୍ମଦୀ.)

Developer Udgam Labs
Base model Shruti Hindi (Udgam Labs), built on Cactus Whistle (Cactus Compute); both Apache-2.0
Parameters About 56M (55,875,913; 8 encoder + 8 decoder layers, width 512)
File shruti-odia.cact, 29.7 MB (4-bit weights, 8-bit activations) for the Cactus needle engine
Input / output 16 kHz audio of any length → text; Odia in Odia script, English words in lowercase Latin
Languages Odia, English, and Odia mixed with English. For Hindi use Shruti Hindi; for Marathi, Shruti Marathi; for Tamil, Shruti Tamil; for Bengali, Shruti Bengali; for Telugu, Shruti Telugu; for Gujarati, Shruti Gujarati
Runtime Cactus needle engine (Apache-2.0), native and WebAssembly; we measured it on a Mac, an Android phone and that phone's Chrome
Licence Apache-2.0

Quick start

pip install cactus-needle
hf download udgamlabs/shruti-odia shruti-odia.cact config.json --local-dir .
from needle import Whistle

model = Whistle("shruti-odia.cact")
print(model.transcribe("clip.wav"))   # Odia or English is detected automatically

The cactus-needle Python package sends anonymous usage counts by default; set NEEDLE_TELEMETRY=0 to turn that off. Command line: ./needle --model shruti-odia.cact --audio clip.wav with the needle binary for your platform from Cactus-Compute/needle3. In the browser, the wasm/ build of the same engine runs it inside a web page; udgamlabs.com/models/shruti/odia is a working page.

Results

Word error rate (%, lower is better), the same clips and scorer for every model; Shruti Odia in its on-device engine on a Mac. FLEURS and Kathbath have 200 clips each, DiarBench 196 turns. Measured 2 November 2026. Size is the file as published by its makers.

Model File size FLEURS (read) Kathbath test-unknown (read) DiarBench, English in English (conversation, held out) DiarBench, native reference
Shruti Odia 29.7 MB 39.5 32.5 36.2 49.2
Dolphin base (int8) 103.7 MB 68.1 52.7 97.5 99.4
IndicConformer Odia (int8) 137.7 MB 25.9 21.1 49.9 40.7
Dolphin small (int8) 249.7 MB 71.1 40.4 99.9 99.9
SraVaani-1.0 908.8 MB 22.1 21.4 43.4 34.9

DiarBench is real conversation that mixes in English: 196 turns from 37 conversations, 5,859 reference words, 1,459 of them English. The "English in English" column scores against references that write English words in English (Latin script), as Shruti Odia does; the native column scores against references that write English words in Odia script. FLEURS and Kathbath are read Odia.

Paired 95% intervals below are Shruti Odia minus the other model, in word error points (1,000 resamples of clips).

  • Conversations that mix in English: Shruti Odia makes fewer errors than SraVaani-1.0 (36.2 vs 43.4; -9.75 to -4.76; with whole conversations resampled -10.72 to -1.20; with script ignored -7.42 to -2.94) and IndicConformer Odia (49.9; -16.36 to -11.38; -16.29 to -8.55; -13.31 to -8.52). That is about 17% and 27% fewer. The Dolphin models are further behind (97.5 and 99.9).
  • English inside Odia: Shruti Odia writes 55.8% of DiarBench's English words in English; IndicConformer Odia and SraVaani-1.0 write none (0%), Dolphin base 8.0% and Dolphin small 0.3%.
  • Against Dolphin (over three and eight times its size): fewer errors on every set.
  • One file for two languages: Shruti Odia also transcribes English: LibriSpeech test-clean 6.25 (Shruti Hindi: 5.95).
  • Silence: 0 words invented on 100 silent clips.
  • Held-out sets: we did not train on FLEURS or DiarBench, or on Kathbath's unseen-speaker test set.

Other Odia speech models exist that we have not measured. A scan of Hugging Face on 6 November 2026 found none under about 140 MB, apart from adapters that need a larger base model; these results cover only the models listed here.

Speed and memory (offline): Samsung Galaxy F62 (2021, 6 GB RAM), native engine, 10.3x faster than real time, 64 MB peak memory (20 clips). In that phone's Chrome, the page reports 3.2-4.1 s on the device for 7.6-10.0 s of speech.

Where it falls short

  • Read Odia accuracy. IndicConformer Odia (almost 5x larger) makes about 35% fewer errors on FLEURS (25.9 vs 39.5) and on Kathbath (21.1 vs 32.5); SraVaani-1.0 (about 31x larger) is ahead on both (22.1 and 21.4). Character errors on FLEURS are 18.38% against 7.64% and 6.79%, a large gap.
  • Conversations on the native reference. When the reference writes English words in Odia script, IndicConformer Odia (40.7; +6.10 to +10.62) and SraVaani-1.0 (34.9; +12.37 to +16.13) are ahead of Shruti Odia (49.2).
  • In a browser, set the language. In the phone's browser, with the language left to the engine, 3 of 4 English-heavy lines we played in on 5 November came out as English garble. Passing or fixed them on 6 November, and it is what our try box does. Plain English loses a little accuracy this way. The native engine detected all of them correctly. Not yet tested with a live microphone.
  • English words in Odia script: many English words come out in English letters, not all (start as ଷ୍ଟାର୍ଟ, online as ଅନଲାଇନ୍‌ରେ), and acronyms can split into letters (EMI as e m i).
  • Real errors and spelling variants: real errors happen (Cyclone as ସାଇଟ୍ରୋନର, ମହମବତୀ, candles, as ମହମ୍ମଦୀ). Local names that DiarBench glosses in Latin come out in Odia (cuttack as କଟକ) and score as errors. Joins and spelling variants count as errors too.
  • Loud noise: Shruti models sometimes repeat a phrase over and over in loud noise (9 of 3,400 clips at 5 dB on an everyday-speech test, measured on Shruti Hindi-family models, not on Odia).
  • Not tested on Odia: noise, music, far-away or speaker-played audio, Linux, Windows and iOS. No punctuation; numbers come out as words. No Odia speaker has reviewed this output yet.

How it was trained

  • Start: Shruti Hindi (itself a full fine-tune of Cactus Whistle). We added 700 Odia vocabulary pieces and used Shruti Hindi's language tag for Odia, then trained all weights with 4-bit quantisation-aware training.
  • Data: openly licensed Odia speech, with English words kept in English where the dataset marks them, plus English from Shruti Hindi's own training data. Test sentences were removed.
Source Licence
AI4Bharat IndicVoices, Odia CC-BY-4.0
AI4Bharat Kathbath, Odia CC-BY-4.0
SPRING-INX Odia R1 (SPRING Lab, IIT Madras) CC-BY-4.0
ARTPARK-IISc Vaani, Odia (transcribed part) CC-BY-4.0
English from Shruti Hindi's training data: LibriSpeech, Mozilla Common Voice 17 English, AI4Bharat NPTEL CC-BY-4.0, CC0, CC-BY-4.0

Intended use and limitations

For transcribing Odia and English speech on devices where privacy, cost or connectivity rule out a cloud service: voice notes, dictation, voice commands, captions, field apps. Not for high-stakes use (medical, legal) without human review. Accuracy drops on noisy audio, strong accents, rare names, numbers and long technical English.

Licence

Apache-2.0. Shruti Odia is a modified version of Shruti Hindi (Udgam Labs) and of Cactus Whistle by Cactus Compute (both Apache-2.0); see NOTICE. The training data licences are listed above; please credit the datasets if you build on it.

Citation

@misc{udgamlabs2026shrutiodia,
  title  = {Shruti Odia: offline speech-to-text for Odia and English in 29.7 MB},
  author = {{Udgam Labs}},
  year   = {2026},
  url    = {https://huggingface.co/udgamlabs/shruti-odia}
}

About Udgam Labs. Udgam Labs is an independent AI research lab. We work from first principles: before we build, we understand why things work, whether we are training a model, fine-tuning one or applying AI to a new problem. Udgam (उद्गम) is Sanskrit for origin. udgamlabs.com

Downloads last month
23
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for udgamlabs/shruti-odia

Finetuned
udgamlabs/Shruti
Finetuned
(22)
this model

Datasets used to train udgamlabs/shruti-odia

Space using udgamlabs/shruti-odia 1

Collection including udgamlabs/shruti-odia

Article mentioning udgamlabs/shruti-odia