voxtral-mini-4b-realtime-2602-p300x2 on Tenstorrent p300x2
Derived from mistralai/Voxtral-Mini-4B-Realtime-2602 by Mistral AI, unmodified. See the original model card for training and evaluation details.
Voxtral-Mini-4B-Realtime-2602, Mistral AI's realtime speech-to-text model: a 970M-parameter causal audio encoder feeding a 3.4B-parameter Ministral text decoder, 13 languages, one text token per 80 ms of audio. Served with vLLM as an OpenAI-compatible /v1/audio/transcriptions endpoint, tested at one request and at 32 concurrent requests.
Runs on Tenstorrent p300x2 (mesh P300x2) β 131,072-token context, up to 32 concurrent sequences.
Packaged and published with tt-model-manager 0.1.0 (manifest schema 5.1).
At a glance
| Hardware | p300x2 |
| Context | 131,072 tokens |
| License | apache-2.0 |
Intended use
Speech-to-text transcription of mono speech audio (wav, flac, mp3 and other formats soundfile decodes; resampled to 16 kHz) through the OpenAI audio transcriptions API, in the 13 languages the checkpoint covers.
Prerequisites
- The Tenstorrent CLI,
tt:uv tool install tenstorrent(or use tt-model alone, see the Quickstart) - Docker
- Tenstorrent hardware: p300x2
- 1 GB hugepages configured on the host
- About 9 GB of free space in the Hugging Face cache for the weights
Quickstart
tt serve ndaly/Voxtral-Mini-4B-Realtime-2602
tt serve downloads the Docker image and the mistralai/Voxtral-Mini-4B-Realtime-2602 at 2769294da9567371363522aac9bbcfdd19447add weights (into your HF cache; they are not in the image), then starts an OpenAI-compatible server on port 20000 (or the next free port, if that one is busy). The first start compiles kernels for your device, which takes several minutes; the server is ready when it logs Application startup complete.
Without tt-cli: tt-model serve ndaly/Voxtral-Mini-4B-Realtime-2602.
This server answers transcription requests only: tt-model curl sends a chat completion and gets
a 404. Send audio as shown under Capabilities.
Capabilities
The server speaks the OpenAI API at http://127.0.0.1:20000/v1 (or whichever port your serve command reported; chat completions, completions, and /v1/models). Pass "model": "mistralai/Voxtral-Mini-4B-Realtime-2602" β the weights id, not this package's name.
The one inference endpoint is POST /v1/audio/transcriptions (multipart form, OpenAI shape);
/v1/chat/completions is not mounted.
curl -s http://127.0.0.1:20000/v1/audio/transcriptions \
-F model=mistralai/Voxtral-Mini-4B-Realtime-2602 -F file=@clip.wav
# streaming (server-sent events, text deltas as they are decoded):
curl -sN http://127.0.0.1:20000/v1/audio/transcriptions \
-F model=mistralai/Voxtral-Mini-4B-Realtime-2602 -F file=@clip.wav -F stream=true
Any OpenAI client works the same way (client.audio.transcriptions.create(model=..., file=...)).
Decoding is greedy by default.
Expected performance
| eval | this package | reference | prompts |
|---|---|---|---|
| LibriSpeech test-other, WER (greedy) | 5.64 % | β | 2,939 utterances |
| Transcript identical to the Hugging Face reference | 8 of 10 clips | β | 10 clips |
| Top-1 token agreement with the bf16 reference | 99.5 % | β | β |
WER was scored with lmms-eval through the served endpoint; the two clips that differ do so by near-tie words. The original model card reports Fleurs, long-form and short-form English WER at a 480 ms delay (Fleurs average 8.72 %, English 4.90 %) but no LibriSpeech figure; those sets were not run here.
| profile | ISL | OSL | concurrency | N | TTFT (ms) | prefill tok/s/u | decode tok/s/u | E2EL (s) |
|---|---|---|---|---|---|---|---|---|
| default | 5.28 s of audio | 78 | 1 | β | 37.5 | β | 49.7 | 1.59 |
| default | β | β | 32 | β | β | β | 18.9 (606 aggregate) | 3.63 (median) |
Measured on p300x2 through the served endpoint on 2026-09-23, greedy, streaming; ISL is audio length. Decode is 20.14 ms per step for one user, and 32 of 32 concurrent requests completed. The payload of the 32-request run and the number of runs behind each row were not recorded.
Limitations
- Transcription only: no chat, text completion, translation, speaker diarization or audio question
answering;
/v1/chat/completionsis not mounted. - Validated on p300x2 only, as one tensor-parallel replica over four chips; no data parallelism, no other board.
- At most 32 concurrent requests. Validated on utterances up to about 35 s; longer audio runs through the same streaming path but was not measured.
- Weights run at reduced precision (bfp4 with LoFi inner projections, bfp8 LM head and KV cache), not bf16. On LibriSpeech test-other this drops one word onset on 1 of 2,939 utterances where the bf16 reference does not, and under concurrency 1 of 2,939 utterances came back empty.
- Sampled decoding is supported but not evaluated for accuracy; use the greedy default.
Licensing
Weights: Apache-2.0 (Mistral AI). Port and serving code in code/, and the vLLM fork and plugin
inside the image: Apache-2.0.
Feedback
Questions or problems with this package: open a discussion at https://huggingface.co/ndaly/Voxtral-Mini-4B-Realtime-2602/discussions β that is what reaches its author. A problem with the tt tooling itself: tt report issue (collects your environment and opens a prefilled issue against tenstorrent/tt-cli). Product feedback: support@tenstorrent.com.
Provenance
The exact sources the image was built from β code/ in this repo is byte-identical to the model code inside the image:
| component | built from |
|---|---|
| tt-metal | a local checkout β commit not published (dirty tree β the image includes uncommitted changes) |
| vLLM | vllm-0.1.dev14195+g8c28fcecb.d20260916.empty-py3-none-any.whl β a wheel the author built |
| vllm-tt-plugin | a local checkout β commit not published (dirty tree β the image includes uncommitted changes) |
code/ digest |
b26d652115a867ab (sha256, first 16 hex digits) |
| built | 2026-09-25T16:20:42+00:00 by tt-model 0.1.0 |
Model tree for ndaly/Voxtral-Mini-4B-Realtime-2602
Base model
mistralai/Ministral-3-3B-Base-2512