File size: 2,725 Bytes
2d4fb23 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | ---
license: cc-by-4.0
language:
- en
tags:
- automatic-speech-recognition
- onnx
- parakeet
- streaming
- eou
- voice-agent
base_model: nvidia/parakeet_realtime_eou_120m-v1
---
# parakeet-realtime-eou-120m ONNX (split decoder/joint, 320 ms chunks)
Streaming preview model. Re-export of [nvidia/parakeet_realtime_eou_120m-v1](https://huggingface.co/nvidia/parakeet_realtime_eou_120m-v1) to three separate ONNX files, int8 dynamic-quantized for CPU / DirectML inference. 120M-parameter cache-aware Conformer with end-of-utterance detection at 80–160 ms latency.
| File | Inputs | Outputs |
|---|---|---|
| `streaming_encoder.int8.onnx` | `mel [1, 128, F] f32`, `mel_length [1] i32`, `cache_last_channel [1, 17, 70, 512] f32`, `cache_last_time [1, 17, 512, 8] f32`, `cache_last_channel_len [1] i32` | `encoder [1, 512, T] f32`, `encoder_length [1] i32`, `cache_last_channel_next`, `cache_last_time_next`, `cache_last_channel_len_next [1] i32` |
| `decoder.int8.onnx` | `targets [1, 1] i32`, `target_length [1] i32`, `h_in [1, 1, 640] f32`, `c_in [1, 1, 640] f32` | `decoder [1, 640, 1] f32`, `h_out`, `c_out` |
| `joint_decision.int8.onnx` | `encoder [1, 512, T] f32`, `decoder [1, 640, U] f32` | `token_id [1, T, U] i32`, `token_prob [1, T, U] f32`, `duration [1, T, U] i32` |
The streaming encoder carries cache state (`cache_last_channel`, `cache_last_time`, `cache_last_channel_len`) between chunks. Initial call: feed zero-initialised cache tensors. Subsequent calls: feed the previous call's `*_next` outputs.
## Why split?
NeMo's own `asr_model.export()` and [altunenes/parakeet-rs](https://huggingface.co/altunenes/parakeet-rs)'s ONNX version fuse the decoder and joint network into a single ONNX file. That's fine for inference engines that call the full RNN-T decoder loop in one go, but doesn't fit pipelines that drive the loop themselves and need the sub-graphs callable independently (e.g. the [talat](https://github.com/lumikey/talat) Rust streaming inference layer, which mirrors FluidAudio's macOS CoreML 3-file decomposition).
The PyTorch wrappers are adapted from [FluidInference/mobius](https://github.com/FluidInference/mobius/tree/main/models/stt/parakeet-realtime-eou-120m) (Apache 2.0).
## Chunk size
This export is the **320 ms** variant — 5120-sample chunks at 16 kHz, the talat-inference default. The 160 ms and 1280 ms variants exist in FluidInference's CoreML release; re-exports of those will land in this repo's branches when needed.
## Quantization
Per-channel int8 weight-only via `onnxruntime.quantization.quantize_dynamic`. Activations stay fp32 — no calibration dataset needed.
## License
Inherits NVIDIA's parakeet_realtime_eou_120m-v1 license (CC-BY-4.0).
|