- Implementasi berbasis Rust yang dapat menjalankan pengenalan suara streaming baik di lingkungan native maupun browser, menggunakan framework Burn ML
- Model ini berbasis Voxtral Mini 4B Realtime milik Mistral, dan melakukan inferensi sepenuhnya di sisi klien dalam tab browser melalui WASM + WebGPU
- Model terkuantisasi Q4 GGUF (2,5GB) dapat dijalankan di browser, sementara model F32 berbasis SafeTensors (9GB) berjalan di lingkungan native
- Untuk mengatasi batasan browser (alokasi 2GB, ruang alamat 4GB, pembatasan pembacaan GPU, dll.), diterapkan teknik seperti sharding, pemuatan dua tahap, dan pemrosesan tensor asinkron
- Dirilis dengan lisensi Apache-2.0, dan demo real-time dapat dicoba di HuggingFace Spaces
Gambaran umum Voxtral Mini 4B Realtime (Rust)
- Model Voxtral Mini 4B Realtime milik Mistral diimplementasikan sepenuhnya dengan Rust dan framework Burn ML
- Pengenalan suara streaming dapat dijalankan di lingkungan lokal dan browser
- Versi browser memanfaatkan WASM (WebAssembly) dan WebGPU untuk berjalan di sisi klien
- Model terkuantisasi Q4 GGUF (sekitar 2,5GB) berjalan di browser, sedangkan model F32 SafeTensors (sekitar 9GB) digunakan di lingkungan native
- Menyediakan demo real-time di HuggingFace Spaces
Arsitektur
- Audio masukan (16kHz mono) diubah menjadi Mel spectrogram, lalu dikonversi menjadi teks melalui encoder (32 lapisan) dan decoder (26 lapisan)
- Tahap pemrosesan utama
- Mel spectrogram → encoder (32 lapisan, 1280 dimensi) → Conv downsample 4x → adapter (3072 dimensi) → decoder (GQA 32Q/8KV)
- Menyediakan dua jalur inferensi
- F32 (native): berbasis SafeTensors, menggunakan operasi tensor Burn
- Q4 GGUF (native + browser): kuantisasi GGUF Q4_0, menggunakan shader WGSL kustom
Solusi teknis untuk menjalankan di browser
- Untuk menjalankan model 4B di browser, proyek ini mengatasi 5 batasan
- Batas alokasi 2GB → membaca banyak buffer dengan
ShardedCursor
- Batas ruang alamat 4GB → pemuatan dua tahap (parse lalu lepaskan reader, kemudian finalisasi)
- Tabel embedding 1,5GiB → embedding Q4 di GPU + lookup baris di CPU
- Pembacaan sinkron GPU dilarang → menggunakan
into_data_async().await
- Batas 256 workgroup → membatasi ukuran kernel dengan patch cubecl-wgpu
Koreksi padding Q4
- mistral-common bawaan mem-padding audio dengan 32 token senyap, tetapi ini hanya mencakup setengah dari 38 prefix decoder
- Akibatnya, model terkuantisasi Q4_0 dapat menghasilkan error pada input yang langsung dimulai dengan suara
- Untuk mengatasinya, padding diperluas menjadi 76 token (=38 token decoder) agar seluruh prefix terisi dengan keheningan
Build dan pengujian
- Opsi build
- Default:
cargo build --release (wgpu + native-tokenizer)
- Untuk browser:
wasm-pack build --target web --features wasm
- Pengujian
- Mendukung unit test dan integration test berbasis GPU
- Pengujian browser E2E dilakukan dengan Playwright + lingkungan GPU nyata
- Di CI, pengujian terkait dilewati karena tidak ada GPU
Persiapan model dan sharding
Lisensi dan sumber daya
1 komentar
Komentar Hacker News
Jika ada yang tertarik, @antirez telah merilis implementasi C untuk Voxtral Mini 4B
Bisa dilihat di antirez/voxtral.c
Saya membuat versi fork saya dan sedang menambahkan implementasi CUDA serta beberapa peningkatan
Sudah bekerja cukup baik, tetapi masih belum menyamai kecepatan endpoint API Mistral AI
Rasanya saya perlu membaca dan belajar dari materi terkait dulu, bukan langsung menulis kode, jadi akan sangat membantu kalau ada panduan yang bisa dijadikan referensi
Saya tidak terlalu paham bedanya, tetapi respons komunitas tampaknya lebih baik ke yang ini
Setelah mencoba demonya, hasil baru keluar setelah menekan tombol Mic untuk merekam lalu “Stop and transcribe”
Saya penasaran apakah ini bisa dibuat menjadi mode realtime sungguhan di mana subtitle langsung muncul dalam 1–2 detik setelah pengguna berbicara
Demo server Hugging Face melakukan itu dengan model 8.5GB berbasis GPU
Namun, dengan membuat UI berbasis ring buffer, hal serupa tetap bisa diwujudkan
Saya memakai Whisper seperti ini di Flutter, dan inferensi GGUF dari llama.cpp juga saya jalankan lewat Dart
Bahkan di M4 Max ini belum realtime, sementara Whisper di perangkat sejak 2022 hampir realtime dengan ONNX
Menurut saya, di hardware konsumen, kecepatan inferensi lebih penting daripada peningkatan akurasi (WER)
Arah seperti model terbuka on-premise inilah yang benar-benar dibutuhkan
Baik pengguna maupun perusahaan lebih menyukai bentuk seperti ini. Sepertinya Mistral berhasil menangkap kebutuhan itu
Era model terbuka tampaknya akan menjadi jauh lebih menarik sekarang
Keren sekali. Akan bagus jika bisa terintegrasi dengan handy.computer, dan saya juga penasaran apakah ada rencana untuk dukungan streaming
Versi pertama kemungkinan belum akan mendukung streaming
Berkat itu saya jadi tahu tool yang bagus, dan sekarang rasanya dukungan Voxtral benar-benar dibutuhkan
Saya tidak terlalu paham model, tetapi saya pernah mencoba Nvidia Parakeet dan hasilnya sangat baik
Saya penasaran, untuk model 9GB seperti ini, apakah agar bisa dipakai realtime model harus terus dimuat di memori GPU, atau boleh dimuat ulang setiap kali dipakai
Kalimat pendek hampir seketika, kalimat panjang berubah dalam 1–3 detik
Sedikit penurunan akurasi tidak berarti untuk penggunaan berbicara dengan AI
Aplikasi open source bernama Handy (tautan) memakai Parakeet V3, tetapi implementasi C jauh lebih lambat
Dalam STT, kecepatan adalah inti dari UX
Latensi muncul saat memanggil model baru atau mengganti context besar
Sebagian besar waktu model sudah dimuat, jadi tokens per second menjadi variabel utama
Dalam arsitektur kompleks dengan banyak agen, pergantian context membuatnya lambat
Prompt caching dari ik_llama membantu mempercepat dalam situasi seperti itu
Singkatnya, selama Anda tidak sering mengganti model atau context, latensi loading bobot bukan masalah besar
Saya ragu apakah struktur di mana satu tab browser mengunduh model 2.5GB lalu segera menghapusnya itu efisien
Walaupun kecepatan internet dan ruang penyimpanan makin murah, pendekatan seperti ini tetap terasa boros
Komputasi sisi klien memang bagus, tetapi untuk model sebesar ini, menjalankannya di server tampaknya lebih masuk akal
Namun, jika ada standar web API untuk LLM, situasinya bisa berubah
Jika browser berkomunikasi dengan model pilihan pengguna dan mengabstraksi inferensi lokal/jarak jauh, model bisa dibagikan antarsitus
Jika pada 2026 model lokal 2.5GB masih dianggap masalah, saya jadi bertanya-tanya apa yang bisa disebut aman sekarang
Kita berkembang dari mustahil → terpusat → lokal, dan kalau harganya 2.5GB, itu masih sangat layak diterima
Menjalankannya di browser memang keren, tetapi saya tidak ingin hidup di dunia di mana situs web diam-diam mengunduh 2.5GB di background
Nano disimpan di local storage dan dibagikan antar-situs, jadi cukup diunduh sekali
Sepertinya Mistral tidak seperti itu
Statistik terkait dirangkum dalam postingan blog ini
tetapi menurut saya lingkungan sandbox browser lebih aman daripada memasang paket atau mengunduh executable
Sebentar lagi kita mungkin akan terbiasa dengan hal seperti ini :-)
Di lingkungan saya (Firefox, Asahi Linux, M1 Pro), ini tidak berfungsi dengan benar
Saya mengatakan “hello”, lalu sekitar semenit kemudian kata-kata aneh terus keluar berulang-ulang
Ini pertanyaan sederhana, tetapi saya penasaran, model terbuka seperti Mistral dibanding OpenAI atau Anthropic itu ada di level seperti apa
Apakah sudah cukup untuk memakai fitur LLM secara privat di mesin pribadi,
atau masih sangat tertinggal dibanding model komersial
Proyek yang menarik, dan menyenangkan juga melihat framework burn dipakai
Namun, saat saya menjalankannya di Chromium versi terbaru, sistem saya macet dan OS melakukan shutdown paksa
Tepat setelah model selesai diunduh, koneksi VPN juga terputus, padahal tidak ada pembatasan bandwidth jadi saya tidak tahu penyebabnya