Request access to Shravya
This repository is publicly accessible, but you have to accept the conditions to access its files and content.
Shravya is free for research and other non-commercial use. We read every request and approve by hand, usually within a few days. Tell us briefly who you are and what you plan to do with the model.
Log in or Sign Up to review the conditions and access this model content.
Shravya (श्रव्य)
Nepali speech recognition by Fiste AI. Version 0.1, released 11 November 2026.
Shravya turns spoken Nepali into Devanagari text. It is built for Nepali as people speak it: conversations, phone calls, podcasts and lectures with English words mixed in, as well as read speech.
- Accurate across kinds of speech. The lowest mean word error rate among the 16 publicly available Nepali speech recognition systems we have measured so far, ours included: 23.5% over five test sets (20.4% after spelling normalisation). The next system, IndicConformer 600M multilingual, is at 27.3% (23.8%). The tables below show every number and where the comparison favours us.
- Two writing styles.
standardwrites standard spelling.verbatimwrites words the way they were said, which is how call and podcast transcripts are written. - Standalone. One Python file and three weight files. It needs
onnxruntimeandnumpy, no deep learning framework and no graphics card, and transcribes about 28 times faster than real time on a desktop processor. - Measured on the published files. Every Shravya number on this page was produced by the files in this repository, and every system was scored with the same scorer.
Website · Code and full benchmark on GitHub
Results
Word error rate in percent on the test sets, lower is better. Each cell is WER / nWER. Measured 11 November 2026.
| Model | Size | Mean | FLEURS | IndicVoices | IndicVoices (phone) | Podcast | Code-switch |
|---|---|---|---|---|---|---|---|
| Shravya 0.1 | 120M | 23.5 / 20.4 | 23.9 / 18.4 | 11.8 / 11.1 | 13.8 / 13.1 | 34.1 / 31.8 | 33.7 / 27.6 |
| IndicConformer 600M multilingual | 600M | 27.3 / 23.8 | 23.7 / 18.7 | 15.0 / 14.0 | 17.9 / 17.0 | 41.7 / 35.9 | 38.4 / 33.3 |
| IndicConformer Nepali | 129M | 27.7 / 24.4 | 24.8 / 19.4 | 11.3 / 10.6 | 13.6 / 12.9 | 48.8 / 43.5 | 40.1 / 35.4 |
| SraVaani 1.0 | 430M | 29.7 / 26.2 | 25.9 / 20.9 | 13.9 / 13.0 | 19.1 / 18.1 | 45.0 / 39.3 | 44.5 / 39.5 |
| Kriti Telephony | 129M | 31.2 / 23.8 | 31.8 / 19.8 | 25.1 / 17.2 | 27.2 / 19.9 | 28.3 / 26.4 | 43.5 / 35.6 |
| IndicConformer Nepali, int8 ONNX | 120M | 33.3 / 30.2 | 29.2 / 24.6 | 16.3 / 15.3 | 21.3 / 20.3 | 54.5 / 50.2 | 45.1 / 40.4 |
| SraVaani Nepali-English code-mix | 449M | 38.2 / 30.3 | 34.5 / 25.2 | 34.0 / 27.5 | 39.6 / 32.7 | 39.3 / 32.0 | 43.6 / 34.0 |
| IndicConformer Nepali-English code-mix | 128M | 38.6 / 31.4 | 34.9 / 26.2 | 34.3 / 28.1 | 38.4 / 32.0 | 42.1 / 36.0 | 43.2 / 34.7 |
| Whisper large-v3-turbo Nepali-English code-mix | 809M | 42.0 / 34.5 | 39.2 / 29.6 | 39.3 / 34.0 | 46.9 / 40.9 | 39.8 / 32.6 | 44.9 / 35.6 |
| Ratna (Ampixa Labs) | 32M | 54.2 / 51.5 | 56.9 / 52.4 | 48.3 / 46.3 | 53.9 / 51.8 | 46.0 / 45.3 | 65.6 / 61.7 |
| Sagarmatha v4 | 809M | 55.4 / 52.1 | 38.5 / 31.9 | 52.3 / 50.5 | 59.6 / 58.3 | 62.7 / 59.7 | 64.1 / 60.2 |
| Nepali ASR aud8 | 325M | 57.7 / 54.1 | 43.6 / 38.8 | 54.1 / 51.1 | 62.8 / 60.3 | 63.5 / 61.1 | 64.3 / 59.4 |
| Rani (Ampixa Labs) | 121M | n/a | 33.8 / 26.8 | n/a | n/a | n/a | n/a |
How to read the table:
- WER is the plain word error rate after removing punctuation. nWER is the same after writing numbers as words and folding spelling variants of one word together, so that systems trained on different spelling conventions are compared on content. Mean is the unweighted mean of the five sets, and the table is sorted by it. Bold marks the lowest value in a column.
- The test sets. FLEURS: 726 read sentences, the official Nepali test split. IndicVoices: 1,000 clips of spontaneous, conversational and read speech from 11 speakers who are not in our training data. IndicVoices (phone): the same clips through a simulated telephone channel. Podcast: 798 clips from two podcast episodes kept out of training. Code-switch: 1,440 lecture clips with English mixed in, the official test split of its dataset.
- Where the comparison favours us. Shravya was trained on the training portions of all five kinds of speech. Most of the other systems were not trained on podcast or code-switched lecture speech (the AI Lab systems were), so read those two columns as "trained for this kind of speech" against "not trained for it". On FLEURS and IndicVoices the best systems are close to each other: see the intervals further down.
- IndicVoices. The test speakers are not in our training data. The public multilingual models that several systems in this table start from, ours included, were trained on undisclosed data that may contain them.
- Latin letters. The three AI Lab systems write English words in Latin letters. Our references write them in Devanagari, so their error rates on Podcast and Code-switch are overstated here.
- Rani (Ampixa Labs) was measured on FLEURS through its public demo, because its weights are not openly available. It has no mean.
- Every other system was run by us from its public weights with its default greedy decoding, on the same audio files. The full table with all 16 systems is in the benchmark file on GitHub.
Speech from sources we never trained on
Three more test sets, used for reporting only. Nothing about Shravya was chosen on them.
| Model | Size | NepTel 0.2 (calls) | PVSpeech (read) | New read speech |
|---|---|---|---|---|
| Rani (Ampixa Labs) | 121M | 33.5 / 31.2 | 18.4 / 14.6 | n/a |
| Kriti Telephony | 129M | 37.9 / 34.5 | 16.8 / 11.2 | n/a |
| Shravya 0.1 | 120M | 38.2 / 34.6 | 16.2 / 12.8 | 18.4 / 11.0 |
| SraVaani 1.0 | 430M | 42.9 / 40.6 | 24.7 / 20.5 | 20.0 / 13.9 |
| IndicConformer 600M multilingual | 600M | 47.5 / 45.4 | 12.5 / 9.6 | 16.5 / 11.7 |
| IndicConformer Nepali | 129M | 47.6 / 45.6 | 22.1 / 19.4 | 18.0 / 12.2 |
| IndicConformer Nepali-English code-mix | 128M | 48.7 / 44.6 | 21.3 / 17.8 | 26.3 / 19.3 |
| SraVaani Nepali-English code-mix | 449M | 49.0 / 44.1 | 18.1 / 13.8 | 24.7 / 17.3 |
| Whisper large-v3-turbo Nepali-English code-mix | 809M | 54.3 / 50.1 | 22.9 / 19.4 | 30.4 / 22.3 |
| Ratna (Ampixa Labs) | 32M | 67.5 / 66.2 | 43.1 / 39.9 | 45.3 / 40.6 |
| Nepali ASR aud8 | 325M | 79.2 / 78.5 | 25.3 / 23.9 | n/a |
| MMS 1B | 965M | 81.6 / 79.8 | 32.7 / 29.0 | n/a |
| Sagarmatha v4 | 809M | 91.5 / 90.4 | 33.5 / 30.9 | n/a |
| Nepali ASR Whisper turbo | 809M | 94.8 / 94.7 | 24.2 / 20.5 | 28.3 / 18.9 |
- NepTel 0.2 is 78 segments of real telephone calls published by Ampixa Labs for evaluation. On calls Rani (Ampixa Labs) is ahead of Shravya: 33.5 against 38.2. The set is small, so differences below about 3 points are not resolved.
- PVSpeech is 50 read clips, also from Ampixa Labs. New read speech is 172 sentences recorded for us in November 2026 and never used in training.
- Rani's numbers were scored by us from the transcripts Ampixa Labs published (NepTel 0.2) and from its public demo (PVSpeech). "n/a" means not measured.
Is the difference real?
The other system's error rate minus Shravya's, in points, on the five-set mean. A positive number means the other system makes more errors. The brackets are 95% intervals from a paired bootstrap that resamples whole groups of clips (speakers, recordings or sentences), so that many clips of one voice count as one observation. The last three columns sort the five sets by whether the interval of the WER difference lies above zero, includes zero or lies below zero.
| Compared with | Mean WER, points | Mean nWER, points | Shravya has fewer errors on | No clear difference on | Shravya has more errors on |
|---|---|---|---|---|---|
| IndicConformer 600M multilingual | +3.9 [+3.2, +4.7] | +3.4 [+2.7, +4.3] | IndicVoices, IndicVoices (phone), Podcast, Code-switch | FLEURS | none |
| IndicConformer Nepali | +4.2 [+3.8, +4.8] | +4.0 [+3.5, +4.7] | FLEURS, Podcast, Code-switch | IndicVoices (phone) | IndicVoices |
| Kriti Telephony | +7.7 [+7.3, +8.1] | +3.4 [+3.0, +4.0] | FLEURS, IndicVoices, IndicVoices (phone), Code-switch | none | Podcast |
| SraVaani 1.0 | +6.2 [+5.6, +7.2] | +5.8 [+5.2, +6.8] | FLEURS, IndicVoices, IndicVoices (phone), Podcast, Code-switch | none | none |
| SeamlessM4T v2 large | +45.9 [+42.5, +50.1] | +45.0 [+41.6, +49.4] | IndicVoices, IndicVoices (phone), Podcast, Code-switch | FLEURS | none |
| SraVaani Nepali-English code-mix | +14.7 [+13.3, +16.5] | +9.9 [+8.6, +11.7] | FLEURS, IndicVoices, IndicVoices (phone), Podcast, Code-switch | none | none |
| IndicConformer Nepali-English code-mix | +15.1 [+14.0, +16.5] | +11.0 [+9.9, +12.5] | FLEURS, IndicVoices, IndicVoices (phone), Podcast, Code-switch | none | none |
| Ratna (Ampixa Labs) | +30.7 [+29.6, +31.9] | +31.1 [+30.0, +32.4] | FLEURS, IndicVoices, IndicVoices (phone), Podcast, Code-switch | none | none |
Quick start
Access to the weights is by request: sign in to Hugging Face, fill in the form at the top of this page, and we approve by hand. Then:
pip install onnxruntime numpy soundfile soxr huggingface_hub
hf auth login
hf download fiste-ai/shravya --local-dir shravya-model
python shravya-model/shravya.py clip.wav
In Python:
import sys
sys.path.insert(0, "shravya-model")
import shravya
model = shravya.load() # finds the weights beside shravya.py
print(model.transcribe("clip.wav")) # standard spelling
print(model.transcribe("call.wav", style="verbatim")) # written the way it was said
transcribe takes a sound file (wav, flac, ogg or mp3, any sample rate) or 16 kHz mono samples as a numpy array.
Recordings longer than 40 seconds are cut at quiet points and transcribed piece by piece. shravya.load(threads=4)
limits the processor threads.
| File | Size | What it is |
|---|---|---|
encoder.onnx |
481 MB | the acoustic encoder |
decoder.npz |
18 MB | prediction network, joint network, the two output heads and the mel filterbank |
config.json |
4 KB | feature settings and the 256 output tokens |
shravya.py |
8 KB | the runtime, MIT licence |
Speed and memory. 28 times faster than real time (real-time factor 0.036) on
8 threads of an Intel Core i7-10700K, measured on 128 test clips one at a time with default
settings. With the environment variable OPENBLAS_NUM_THREADS=1 it was 45 times
(0.022), because the small matrix products of the decoder run faster on one thread. Peak memory is
about 1.2 GB for a 40 second piece.
The model
| Developer | Fiste AI |
| Task | Nepali speech to Devanagari text |
| Type | Conformer transducer, 119.6M parameters |
| Encoder | 17 Conformer layers, width 512, 8 attention heads, one output frame per 40 ms |
| Decoder | one LSTM layer of 640 units and a joint network of 640 units, greedy search, no language model |
| Output | 256 subword tokens in Devanagari, no punctuation; English words are written in Devanagari |
| Styles | two output heads that share everything else: standard and verbatim |
| Input | 16 kHz mono audio; 80 log-mel features, 25 ms window, 10 ms step |
| Mode | offline, a whole utterance at a time (not streaming) |
| Licence | weights CC BY-NC 4.0, runtime MIT |
Shravya 0.1 is a fine-tuned model. We started from an openly licensed Nepali Conformer transducer, added the second output head, and trained every weight further on the data below. The starting model and the other work we build on are named under "Acknowledgements and third-party licences" at the end of this page.
Training data
| Source | Hours | Licence |
|---|---|---|
| IndicVoices Nepali, spontaneous and conversational speech (used in both writing styles) | 98.9 | CC BY 4.0 |
| IndicVoices Nepali, read speech | 20.0 | CC BY 4.0 |
| Nepali podcast speech | 24.8 | none declared by its publisher |
| Lectures with English mixed in | 16.6 | CC BY-NC 4.0 |
| FLEURS Nepali, training split | 9.4 | CC BY 4.0 |
| Telephone speech with machine-made transcripts | 4.7 | not distributed |
| Total | 174.3 |
- Transcripts were made writable in the model's alphabet before training: English words in Latin letters were transliterated to Devanagari and ASCII digits were written as Devanagari digits. Clips that still could not be written were dropped.
- For the five test sets in the first table, no training transcript equals a test reference or shares a run of eight words with one. NepTel 0.2, PVSpeech and the new read speech were never used in training.
- About thirty percent of the training clips were passed through a simulated telephone channel.
- Training took 3,000 updates of 48 clips at a peak learning rate of 2e-5 on one 11 GB graphics card, in under five hours. The published weights are 85% the fine-tuned weights and 15% the starting weights, a mix chosen on the development sets by a rule written down before the run.
How the published files were checked
The files here are an export of the model we scored during development. On 128 test clips the exported files and this runtime gave exactly the same text as the original model in 128 cases, clip by clip. The Shravya rows in the tables were then produced by these files and this runtime on a processor.
Where it falls short
- Calls are still hard. 38.2% word error rate on NepTel 0.2. That is not good enough to transcribe calls without a person checking the result.
- No punctuation and no Latin letters. English words come out in Devanagari. Numbers come out sometimes as digits and sometimes as words.
- Names, numbers and addresses are the most error-prone words. Do not rely on a phone number or an amount without checking it.
- Offline only. It needs the whole utterance. There is no streaming mode yet.
- Small training set. 174 hours. Children, strong regional accents, far-away microphones, music and loud noise were not tested.
- Two heads, one choice. You pick the writing style. The model does not detect which one suits the audio.
Not for decisions about people's health, money, liberty or legal standing without human review.
Licence and access
The weights are released under CC BY-NC 4.0: free to use and
share for non-commercial purposes with credit to Fiste AI. The runtime shravya.py is MIT. See LICENSE.md.
Access is by request and non-commercial because of the training data: one source carries a non-commercial licence, one declares no licence, and the telephone speech is not public. For commercial use, open an issue at github.com/fiste-ai/shravya and tell us what you need.
The name
श्रव्य (shravya) means audible, that which can be heard, as in श्रव्य-दृश्य, audio-visual. Fiste AI also makes Suseli (सुसेली), a Nepali text-to-speech model in development.
Citation
@misc{fisteai2026shravya,
title = {Shravya: Nepali speech recognition},
author = {{Fiste AI}},
year = {2026},
url = {https://huggingface.co/fiste-ai/shravya}
}
Acknowledgements and third-party licences
- Starting model. Shravya 0.1 is fine-tuned from the Nepali IndicConformer by AI4Bharat, released
under the MIT License. The notice is in
NOTICE.md. - Training data. IndicVoices (AI4Bharat, CC BY 4.0), FLEURS (Google, CC BY 4.0),
saileshbro/nepali-cs-asr(CC BY-NC 4.0) andBijay13/nepali-podcast-code-switch-asr-dataset. - Transliteration. English words in training transcripts were written in Devanagari with the word map from Ampixa/rani-asr (MIT). Verbatim spellings of part of the training text follow the output of Kriti Telephony (MIT).
- Evaluation. NepTel 0.2 and PVSpeech are by Ampixa Labs. This card reports results of Rani (Ampixa Labs), https://github.com/Ampixa/rani-asr, and Ratna (Ampixa Labs), https://huggingface.co/ampixa/ratna-asr, alongside the other systems named in the tables.
- The encoder follows the Conformer design as implemented in NVIDIA NeMo. No NeMo code is included.
Versions
- 0.1 (11 November 2026): first release.
- Downloads last month
- -
Datasets used to train fiste-ai/shravya
ai4bharat/IndicVoices
saileshbro/nepali-cs-asr
Evaluation results
- WER on FLEURS (Nepali, test)test set self-reported23.900
- CER on FLEURS (Nepali, test)test set self-reported8.200
- WER on NepTel 0.2 (telephone calls)self-reported38.200
