Downloads · 30 days
0
anuj-inavlabs/kupe-asr-en
kupe-asr-en is a automatic speech recognition model from anuj-inavlabs. Use it when you need speech turned into text. The card lists the license as other.
<img src="https://huggingface.co/anuj-inavlabs/kupe-asr-en/resolve/main/kupe-light.png" height="44" alt="logo"/
Downloads · 30 days
0
Access
Public
Updated Sep 7, 2026
Repo size
1.3 GB
Likes
0
Public
Click a slice to open those files.
.safetensors1.3 GB · 98%
From the Hugging Face model README
A 670M streaming speech‑to‑text model: audio is turned into Mimi codec tokens and the Kupe‑SLM‑670M language backbone reads them and writes English text. Small, fast, real‑time.
| Split | WER | CER |
|---|---|---|
| Test (held‑out, n=500) | 10.3 % | 4.9 % |
| Validation | 11.2 % | 5.4 % |
| Silence → empty output | 100 % | — |
⚠️ Early Phase‑1 checkpoint. This is a first sanity‑milestone model trained on ~2.6k h to prove the pipeline and architecture. It is not the final release — quality will improve substantially with more data, augmentation, and epochs in later phases.
inputs_embeds → the model decodes English text. No separate acoustic encoder.PRE_HIT_LLM (prefetch your LLM) and END_OF_SPEECH (commit final)."", so silence
decodes to nothing (measured 100 %).Production English ASR on much larger corpora sits around 4–6 % WER. 10.3 % from a Phase‑1 670M model on 2.6k h is a strong early result and already usable for voice agents. Live WER during training fell 41 % → 18 % → 12.8 % → 10.3 %.
| Source | Hours | Clips |
|---|---|---|
| LibriSpeech (clean+other) | 599 | 172,657 |
| People's Speech (CC‑BY) | 2,100 | 543,069 |
| Svarah (Indian‑accented EN) | 8.6 | 5,227 |
| Silence / ambient (labelled "") | 35 | 36,315 |
| Total encoded | ~2,606 | 716,968 |
24 kHz mono, Mimi‑encoded (8 codebooks). Splits: train ~2,733 h · val 5.1 h · test 5.0 h.
| Method | full fine‑tune (all params), causal‑LM cross‑entropy |
| Effective batch | 128 (micro‑batch 32 × grad‑accum 4) |
| LR / schedule | 2e‑4, cosine, 3 % warmup |
| Epochs / steps | 2 / 11,158 |
| Precision | bf16 + TF32, fused AdamW |
| Regularisation | SpecAugment (time masking) |
| Wall‑clock | ~3.5 h · final eval_loss 0.26 |
The 131,072‑vocabulary tokenizer is very efficient — low fertility (tokens/word) means shorter targets, faster decoding, lower CER.
| Language | Fertility (tok/word) | Round‑trip |
|---|---|---|
| English | 1.29 | 100 % |
| Hindi | 1.63 | 100 % |
| Gujarati | 1.60 | 100 % |
| Punjabi | 1.47 | 100 % |
| Bengali | 1.77 | 100 % |
| Marathi | 1.93 | 100 % |
| Telugu / Kannada / Tamil / Odia | 2.1–2.3 | 100 % |
| Malayalam | 3.12 | 100 % |
The backbone was pre‑trained on English + 11 Indic languages; a probe found it already generates coherent Hindi & Gujarati and has 100 % tokenizer round‑trip across all 11 scripts. So extending to Hindi/Gujarati/… is mainly a matter of more data on the same pipeline — the model side is ready.
kupe-lm/ — the Kupe‑SLM‑670M backbone (weights + tokenizer).frontend.pt — audio frontend (codebook embeddings + projector).asr_config.json — frontend mode (per_frame_sum), codebooks (8), embed dim.Requires transformers==5.4.0 and the
kupe-asr-en code.
from kupe_asr_en.modeling.asr_model import LummaASR # loader class name; loads Kupe-SLM
model, tok = LummaASR.load("anuj-inavlabs/kupe-asr-en", device="cuda")
Streaming from a wav (turn flags):
from kupe_asr_en.stream import transcribe_file
for ev in transcribe_file("model_dir", "audio.wav"):
print(ev.type, ev.text) # PARTIAL / PRE_HIT_LLM / END_OF_SPEECH
Live mic / Gradio demo (file + realtime, with RTF):
python scripts/06_mic_stream.py --model-dir <this repo> # terminal mic
python scripts/10_gradio_kaggle.py # web UI (file + live mic)
anuj-inavlabs/kupe-asr-en-dataanuj-inavlabs/kupe-asr-en-runsSpeech‑LM backbone weights are used under their upstream license; audio codec: kyutai/mimi.
Data: LibriSpeech, MLCommons People's Speech (CC‑BY), AI4Bharat Svarah. Released as other.
Built by iNavLabs.