Voxa.Speech.Voxtral 0.7.2-alpha

This is a prerelease version of Voxa.Speech.Voxtral.
dotnet add package Voxa.Speech.Voxtral --version 0.7.2-alpha
                    
NuGet\Install-Package Voxa.Speech.Voxtral -Version 0.7.2-alpha
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Voxa.Speech.Voxtral" Version="0.7.2-alpha" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Voxa.Speech.Voxtral" Version="0.7.2-alpha" />
                    
Directory.Packages.props
<PackageReference Include="Voxa.Speech.Voxtral" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Voxa.Speech.Voxtral --version 0.7.2-alpha
                    
#r "nuget: Voxa.Speech.Voxtral, 0.7.2-alpha"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Voxa.Speech.Voxtral@0.7.2-alpha
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Voxa.Speech.Voxtral&version=0.7.2-alpha&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Voxa.Speech.Voxtral&version=0.7.2-alpha&prerelease
                    
Install as a Cake Tool

Voxa.Speech.Voxtral

Fully-offline, open-weights speech-to-text for the Voxa pipeline, built on Mistral's Voxtral-Mini-4B-Realtime (Apache-2.0) served locally by vLLM over its realtime WebSocket API. Implements the streaming ISpeechToTextEngine — pair it with the generic SpeechToTextProcessor from Voxa.Speech.Abstractions, or just set "Voxa:Stt": "Voxtral" with the meta-package.

This is the heavy local tier (VLS-009): unlike whisper.cpp it needs a GPU (≥ 16 GB) and a vLLM server. For a keyless, CPU-friendly local STT, use Voxa.Speech.WhisperCpp instead.

Two honest hosting modes

Voxa does not pin a vLLM binary (the BF16 model is multi-file, ~9 GB, and needs a GPU). You provide the server:

  • Connect-only — point Voxa at a vLLM realtime server you already run:
    "Voxa": {
      "Stt": "Voxtral",
      "Voxtral": { "ServerUrl": "ws://127.0.0.1:8000" }
    }
    
  • Managed — let Voxa launch and own the server process (it drains logs, polls readiness, and kills the process tree on shutdown):
    "Voxa": {
      "Stt": "Voxtral",
      "Voxtral": {
        "LaunchCommand": "vllm",
        "LaunchArgs": ["serve", "mistralai/Voxtral-Mini-4B-Realtime-2602", "--tokenizer-mode", "mistral"],
        "Host": "127.0.0.1",
        "Port": 8000
      }
    }
    

Configuration

Key Default Notes
Voxa:Voxtral:ServerUrl Connect-only: ws(s) base URL of a running server. Wins over the managed keys.
Voxa:Voxtral:LaunchCommand / ExecutablePath Managed: command on PATH / launcher executable.
Voxa:Voxtral:LaunchArgs [] Args for the managed launch target.
Voxa:Voxtral:Host / Port 127.0.0.1 / 8000 Managed listen / connect target.
Voxa:Voxtral:Model mistralai/Voxtral-Mini-4B-Realtime-2602 Sent in the session.update handshake.
Voxa:Voxtral:InputSampleRate 16000 Voxtral Realtime requires 16 kHz mono PCM16.
Voxa:Voxtral:DelayMs 480 Realtime delay knob (80–2400; 480 recommended).
Voxa:Voxtral:Language null BCP-47 hint; null auto-detects.
Voxa:Voxtral:ReadyTimeoutSeconds 180 How long to wait for a managed cold 4B load.
Voxa:Voxtral:MinGpuMemoryGb 16 VRAM floor for the Studio GPU-gated default.

Running the model

# One-time: a GPU box with vLLM (≥ 16 GB VRAM)
vllm serve mistralai/Voxtral-Mini-4B-Realtime-2602 --tokenizer-mode mistral

The model is Apache-2.0 (open weights, redistributable, commercial-OK). vLLM is the only officially-supported runtime today — there is no ONNX export and the Realtime architecture is not yet upstream in llama.cpp, so a lighter CPU/GGUF tier is deferred to a follow-up.

Developing without a GPU

sidecar/voxtral_realtime_mock.py is a tiny stand-in that speaks the same /v1/realtime envelopes and replays a canned transcript — so you can wire up and smoke-test the pipeline end-to-end with no GPU or model:

pip install websockets
python sidecar/voxtral_realtime_mock.py --port 8000
# then: "Voxa:Voxtral:ServerUrl": "ws://127.0.0.1:8000"

Wire protocol

vLLM realtime is OpenAI-Realtime-style JSON over a WebSocket at /v1/realtime, and it is one-shot per connection: a session is session.update → a "ready" commit → audio → one commit {final:true} → streamed deltas → one done, after which the stream is finished. So the engine buffers each utterance (between VAD speech-start and speech-end) and, at speech-end, opens one connection per utterance, replays the buffered audio, finalizes, and reconnects for the next turn:

// client → server  (one connection per utterance, sent at speech-end)
{ "type": "session.update", "model": "mistralai/Voxtral-Mini-4B-Realtime-2602", "delay": 480 }  // + "language" when set
{ "type": "input_audio_buffer.commit" }                  // "ready to start"
{ "type": "input_audio_buffer.append", "audio": "<base64 PCM16>" }   // the whole buffered utterance, in chunks
{ "type": "input_audio_buffer.commit", "final": true }   // finalize this utterance

// server → client
{ "type": "transcription.delta", "delta": "the quick brown" }   // → interim
{ "type": "transcription.done",  "text":  "the quick brown fox" } // → final, then this connection is done
{ "type": "error", "error": { "message": "…" } }                 // → faults the transcript stream

A bare commit never produces a done, and {"final": true} ends the stream — so per-utterance reconnection is required to drive a multi-turn conversation (one persistent socket would either never finalize a turn or stop after the first). Buffering the utterance (rather than streaming audio live) means no preroll is lost while a socket connects and the final commit can't race a tail append. Requires VAD upstream to bracket utterances.

Parsing is total: an unknown or malformed frame is ignored, never throwing out of the receive loop.

License: MIT (this package). The Voxtral model weights are Apache-2.0, provisioned by you via vLLM.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Voxa.Speech.Voxtral:

Package Downloads
Voxa

Batteries-included Voxa package. One package reference: AddVoxa(cfg) + MapVoxaVoice("/voice").UseDefaults() gives a working voice bot with STT, TTS, VAD, and an OpenAI chat agent — no knowledge of frames required.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.7.2-alpha 90 7/10/2026
0.7.1-alpha 65 7/10/2026
0.7.0-alpha 68 7/10/2026