rekody-streaming-en-0.6b-160ms-int8
An int8 ONNX conversion of NVIDIA's Nemotron speech streaming 0.6B model (the March 2026 checkpoint), exported at the 160 ms cache-aware latency profile and packaged for on-device streaming dictation. This is the model behind Rekody, the private, local-first voice dictation tool for macOS.
- Cache-aware streaming ASR: transcribes while you speak, in 160 ms chunks, with encoder cache carried across chunks. No audio leaves the machine.
- Runs on the ONNX Runtime CPU execution provider. The files load directly with onnxruntime or parakeet-rs.
- Four files:
encoder.onnx(int8, 880 MB),decoder_joint.onnx(int8, 11 MB),tokenizer.model(SentencePiece), andconfig.json.
What "160 ms" means, and why it is a separate repository
The checkpoint supports several cache-aware right-context settings. The attention right context R fixes how many encoder frames are produced per call, and each frame is 80 ms:
| Profile | R | Encoder frames per chunk | Chunk |
|---|---|---|---|
[70,0] |
0 | 1 | 80 ms |
[70,1] (this repo) |
1 | 2 | 160 ms |
[70,6] (the 560 ms repo) |
6 | 7 | 560 ms |
[70,13] |
13 | 14 | 1120 ms |
The profile is baked into the exported graph, so this artifact is not a drop-in replacement for the 560 ms one. Feeding this encoder a 560 ms chunk (65 mel frames) returns only the first 2 output frames and silently discards five sevenths of the audio — no error is raised. That is why the two profiles live in separate repositories rather than as revisions of one: a consumer pinned to the 560 ms bytes keeps getting exactly those bytes.
Consumers that read the profile from the file do the right thing
automatically. The encoder's ONNX metadata_props carry:
| Key | Value |
|---|---|
chunk_size_output_frames |
2 |
pre_encode_cache |
9 |
These are the key names and decimal-string format that
parakeet-rs >= 0.3.7 reads from the encoder session, defaulting to 7 and
9 when absent. Mel frames per encoder call is
chunk_size_output_frames * 8 + pre_encode_cache = 25, i.e. 2560 audio
samples of new audio per chunk at 16 kHz.
Accuracy at this profile
NVIDIA publishes word error rate by chunk size for this checkpoint across the eight Open ASR Leaderboard sets. Reproduced here from the base model card as upstream data, not as a Rekody measurement:
| Chunk | R | Average | AMI | Earnings22 | Gigaspeech | LS-clean | LS-other | SPGI | TEDLIUM | VoxPopuli |
|---|---|---|---|---|---|---|---|---|---|---|
| 0.56 s | 6 | 7.07 | 11.88 | 12.82 | 9.78 | 2.46 | 5.07 | 3.03 | 3.54 | 8.00 |
| 0.16 s | 1 | 7.67 | 14.71 | 13.01 | 10.34 | 2.56 | 5.57 | 3.25 | 3.77 | 8.18 |
The +0.60 pp average gap is not evenly spread: AMI alone contributes +2.83 pp of it. Excluding AMI, the far-field multi-party meeting set, the mean of the remaining seven moves from 6.39% to 6.67%, a +0.28 pp difference. For near-field single-speaker dictation, which is what this artifact is packaged for, the relevant number is the smaller one.
Rekody has not re-run the Open ASR Leaderboard at this profile, so no Rekody-measured leaderboard table is published here. The 560 ms repository's table should not be read as applying to this artifact.
Why trust this conversion
- Produced by the same pipeline as the 560 ms artifact, with
--right-contextas the only changed input: the same pinned checkpoint revision, the same NeMo 2.7.3 export script, and the sameonnxruntime1.23.2quantize_dynamicQInt8 call over MatMul and LSTM ops. - The export was gated on parity against NeMo's own streaming step on the same inputs: max absolute difference 0.0.
decoder_joint.onnxcame out bit-identical to the 560 ms repository's (89cae615…before metadata stamping). The RNN-T decoder does not depend on the encoder's latency profile, so it must not change — and it did not, which is a direct check that the pipeline reproduced the earlier conversion.tokenizer.modelis byte-identical to the 560 ms repository's.- The quantization coverage matches the 560 ms artifact exactly: 217
MatMulInteger, 170DynamicQuantizeLinear, 0ConvInteger, 77 floatConvin the encoder; 2DynamicQuantizeLSTMand 3MatMulIntegerin the decoder, with the embedding table left fp32. - The cost of int8 quantization on this architecture was measured as statistically zero on the 560 ms export: on LibriSpeech test-clean (n = 2620), int8 differs from the fp32 export it came from by +0.072 pp WER with a paired bootstrap 95% CI of [-0.004, +0.150], which includes zero.
License
Two licenses apply to this repository, and users must comply with both:
- The conversion work (the int8 quantization, packaging, and
benchmarking published here) is licensed under the
PolyForm Shield License 1.0.0
(see
LICENSE). PolyForm Shield is a noncompete license: any use is permitted except providing a product that competes with the software or with the licensor's products built on it. - The base model weights remain licensed by NVIDIA Corporation under the
NVIDIA Open Model License
(see
NOTICEand the dated copy inlicenses/).
File integrity (SHA-256)
| File | SHA-256 |
|---|---|
encoder.onnx |
5a8f5c01d7804346e3e79d539bde6011907961192c578441d7b2eb725f82220c |
decoder_joint.onnx |
6fa6b88cd439b0281b1b9361c5789d51c851fe202c43bb2fdccabb87186a9630 |
tokenizer.model |
07d4e5a63840a53ab2d4d106d2874768143fb3fbdd47938b3910d2da05bfb0a9 |
config.json |
af9bf85d1b620ee83147149120e02dd5b7b57f2c2a845be05c61b707e0f98802 |
These hashes are also published in SHA256SUMS.
Provenance
- Source: nvidia/nemotron-speech-streaming-en-0.6b,
revision
df1f0fe9dfdf05152936192b4c8c7653d53bf557(the March 13, 2026 checkpoint). - Conversion recipe: NeMo 2.7.3 ONNX export at
att_context_size = [70, 1], then onnxruntime 1.23.2quantize_dynamicQInt8 over MatMul and LSTM ops, then the streaming profile stamped into the encoder's ONNX metadata.
Contact: hi@rekody.com
- Downloads last month
- 3
Model tree for Rekody/rekody-streaming-en-0.6b-160ms-int8
Base model
nvidia/nemotron-speech-streaming-en-0.6b