--- license: mit base_model: ARTPARK-IISc/SraVaani-1.0 library_name: parakeet.cpp pipeline_tag: automatic-speech-recognition tags: - gguf - ggml - parakeet.cpp - asr - speech-recognition - indic - hindi - conformer - transducer - tdt language: - hi - mr - ta - te - bn - gu - kn - ml - pa - or - as - en --- # SraVaani-1.0 GGUF GGUF conversions of [ARTPARK-IISc/SraVaani-1.0](https://huggingface.co/ARTPARK-IISc/SraVaani-1.0), an Indic multilingual speech recognition model, for CPU inference with [parakeet.cpp](https://github.com/mudler/parakeet.cpp). No Python, no PyTorch, no NeMo, no ONNX Runtime. One file and one binary. ## Files | file | size | notes | |---|---|---| | `sravaani-q8_0.gguf` | 660 MB | **recommended.** Byte-identical output to f16 in testing | | `sravaani-f16.gguf` | 1016 MB | full precision relative to the source weights | | `sravaani-q4_k.gguf` | 471 MB | smallest; shows occasional orthographic variants | ## Usage Get a `parakeet-cli` binary from [parakeet.cpp releases](https://github.com/mudler/parakeet.cpp/releases), then: parakeet-cli transcribe --model sravaani-q8_0.gguf --input clip.wav --decoder tdt --threads 4 Three things matter: - **`--decoder tdt`** is required. This is a token-and-duration transducer, not CTC. - **Do not pass `--lang`.** The model detects language automatically and outputs native script. It has no language token. - **Input must be 16 kHz mono 16-bit PCM WAV.** parakeet.cpp reads nothing else. Convert first: ffmpeg -i in.any -ac 1 -ar 16000 -c:a pcm_s16le out.wav ## Model | | | |---|---| | architecture | NeMo FastConformer-TDT (transducer) | | parameters | 443.62M | | encoder | 1024 d_model, 17 layers, 8 heads | | subsampling | dw_striding x8, 256 channels | | features | 128 mel, n_fft 512, win 400, hop 160, 16 kHz | | predictor | 1 LSTM layer, 640 hidden | | joint | 640 hidden, 5006 outputs (5000 vocab + blank + 5 durations) | | tokenizer | SentencePiece, 5000 pieces, embedded in the GGUF | ## Benchmark Intel i7 laptop, CPU only, single Hindi utterance, best of 3 runs. | model | size | 1 thr | 2 thr | 4 thr | 8 thr | WER vs f16 | |---|---|---|---|---|---|---| | f16 | 1016 MB | 3.04 s | 2.07 s | 1.30 s | 1.20 s | 0.000 | | q8_0 | 660 MB | 2.35 s | 1.86 s | 1.49 s | 1.33 s | 0.000 | | q4_k | 471 MB | 2.52 s | 1.98 s | 1.51 s | 1.36 s | 0.062 | Roughly 6 to 7x faster than realtime. Returns collapse past 4 threads. q4_k's single error was `यह` where f16 gave `ये`, both valid Hindi for "this", so the 0.062 overstates the real gap on this sample. ## How these were made SraVaani ships only a TorchScript graph, with no `.nemo` checkpoint, so the conversion tool had nothing to read. The checkpoint was reconstructed: 1. Weights extracted from the TorchScript module and remapped to NeMo names. 2. Architecture hyperparameters recovered from tensor shapes, with `xscaling` determined empirically by measuring the positional encoding's output gain. 3. Validated by a strict `load_state_dict` against a freshly built `EncDecRNNTBPEModel`: 705 of 705 tensors, zero missing, zero unexpected, zero shape mismatches. 4. Verified by an exact transcript match against the original implementation. 5. Converted with parakeet.cpp's `convert_parakeet_to_gguf.py`. ## Limitations - Accuracy testing here is limited to Hindi. Tamil and Telugu in particular are untested in these conversions and are known weaker languages for this model family. - The base model has a documented weakness on overlapping speakers and crosstalk. - WER figures compare quantised output against f16 output, not against ground truth. They measure quantisation damage, not accuracy. ## Credit All model weights and training are the work of [ARTPARK at IISc](https://huggingface.co/ARTPARK-IISc). This repository contains format conversions only, released under the same MIT License as the original.