# Voxtral-Mini-3B-2507 → onnx-asr `speech-llm`: export report Source model: [mistralai/Voxtral-Mini-3B-2507](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507) (Mistral AI, Apache-2.0, **not gated**). Offline Voxtral only — the realtime/streaming variant is out of scope. Runtime: [TigreGotico/onnx-asr](https://github.com/TigreGotico/onnx-asr), branch `feat/speech-llm-voxtral` (off `feat/speech-llm-qwen3-asr`). ## Graph contract | File | Inputs | Outputs | | --- | --- | --- | | `encoder.onnx` | `input_features` `(1, 128, 3000 * N)` | `audio_embeds` `(1, 375 * N, 3072)` | | `embed_tokens.onnx` | `input_ids` `(1, S)` | `inputs_embeds` `(1, S, 3072)` | | `decoder.onnx` | `inputs_embeds` `(1, S, 3072)`, `attn_bias` `(1, 1, S, P + S)`, `position_ids` `(1, S)`, `past_key_values.{0..29}.{key,value}` `(1, 8, P, 128)` | `logits` `(1, S, 131072)`, `present.{0..29}.{key,value}` `(1, 8, P + S, 128)` | The audio tower is a Whisper-large-v3 encoder: full attention over a fixed 30 s (3000 frame) mel window. It therefore declares only `input_features`, and the runtime sends the features of the `whisper128` preprocessor unchanged — no packing indices and no block-diagonal bias, unlike Qwen3-ASR. Inside the graph the flat window is split into 30 s chunks, encoded to 1500 frames per chunk, grouped four frames at a time (the projector input width is `4 * 1280 = 5120`) and projected to the 3072-wide language model embedding space, so 375 audio embeddings per chunk. The feature extractor is a stock Whisper 128-mel extractor, identical to the `whisper128` preprocessor already in onnx-asr, so no in-graph feature extraction was needed. Voxtral is a full model with no LoRA or adapter to merge. ### Prompt mistral-common encodes a transcription request as ``` [INST]