--- license: cc-by-4.0 library_name: onnx pipeline_tag: automatic-speech-recognition language: - ar tags: - quran - quranic-arabic - fastconformer - onnx - int8 - streaming - speech-recognition base_model: mohammed/fastconformer-quran-ar --- # FastConformer Quran — int8 ONNX (stateless export) A mirror of [mohammed/fastconformer-quran-ar-onnx-int8](https://huggingface.co/mohammed/fastconformer-quran-ar-onnx-int8) (**CC-BY-4.0**), packaged for the on-device recitation engine of the [Voidwave Quran](https://voidwave.com/Quran) web app (runs fully in the browser via `onnxruntime-web`). The base model is a Qatar Computing-style FastConformer fine-tuned on Quranic recitations (NVIDIA NeMo, `tarteel-ai/everyayah`). This export is fully causal `[128, 0]` — no caches in or out — so a plain stateless loop decodes it one token per encoder frame (greedy). ## Files | file | size | what it is | |---|---|---| | `encoder.int8.onnx` | ~126 MB | streaming encoder: `audio_signal [1, 80, T]` + `length [1]` → `[1, 512, T/8]` + `encoded_lengths` | | `decoder.int8.onnx` | ~5 MB | **fused decoder_joint**: `encoder_outputs [1, 512, 1]`, `targets [1, 1]`, `target_length [1]`, `input_states_1/2 [1, 1, 640]` → joint logits `[1, 1, 1, 1025]` + output states | | `tokens.txt` | ~13 KB | 1025 entries: 1024 BPE tokens (with diacritics) + `` at id 1024 | | `meta.json` | <1 KB | upstream metadata | Notes: - The upstream `joiner.int8.onnx` is a **byte-identical duplicate** of `decoder.int8.onnx` and is omitted here. - Runs on `onnxruntime-web` **≥ 1.30** (wasm kernels; earlier runtimes lack the quantized `ConvInteger` op). - Input features must be NeMo-style log-mel: 80 filters, 25 ms window / 10 ms hop, `n_fft` 512, slaney mel, `log(x + 2^-24)`, and **per-feature normalization is required** — despite `meta.json` claiming `normalize_type: ""` (upstream metadata is wrong on this point; without normalization the decoder emits an empty result). ## Usage (browser, onnxruntime-web) ```js const ort = await import('https://cdn.jsdelivr.net/npm/onnxruntime-web@1.30.0/dist/ort.min.js'); const encoder = await ort.InferenceSession.create('encoder.int8.onnx', { executionProviders: ['wasm'] }); const decoder = await ort.InferenceSession.create('decoder.int8.onnx', { executionProviders: ['wasm'] }); // feature extraction: NeMo-compatible mel + per-feature normalization (see notes above) // decoding: encoder → per-frame greedy join with a single re-primed predictor state ``` ## Attribution - Base model: [mohammed/fastconformer-quran-ar](https://huggingface.co/mohammed/fastconformer-quran-ar) (NVIDIA NeMo FastConformer, fine-tuned on `tarteel-ai/everyayah`) - Original ONNX export: [mohammed/fastconformer-quran-ar-onnx-int8](https://huggingface.co/mohammed/fastconformer-quran-ar-onnx-int8) - License: **CC-BY-4.0** (see upstream) — please keep this attribution when redistributing.