gigaam-v3-mlx
Native GigaAM v3 inference for Swift and MLX on Apple Silicon — Russian speech recognition entirely on-device
What it is
An implementation of inference for the Russian speech recognition model GigaAM v3 in Swift and MLX. The model runs on Apple Silicon through the system’s own stack — no Python, no PyTorch, no server round trip.
Open source on GitHub, converted weights on Hugging Face.
Why it exists
Good Russian speech recognition usually means one of two things: a cloud service, or a local run through a Python environment with PyTorch.
For an application both are bad. The cloud sends the contents of a conversation outside and needs a network. A Python environment cannot be shipped inside an app in a way where the user simply downloads and runs it: you need an interpreter, dependencies, a model download, and all of it breaks on the next OS update.
That left a third route — move the model into a native runtime, where it becomes part of the app.
What I did
The full inference in Swift and MLX: audio preprocessing, the encoder, decoding, post-processing. Weight conversion to the MLX format. Verification against the original implementation.
What’s technically interesting
Porting a model is not translating code from one language to another. The numerical results have to match at every step, and the discrepancies appear in unobvious places: a different order of operations in convolutions, a different normalisation implementation, different padding behaviour, different precision for intermediate tensors.
In speech recognition an error shows up treacherously: the model keeps producing text that looks correct, and a single example will not reveal the substitution. So what needs checking is intermediate tensors, not just the final transcript.
What came out of it
A model you can embed in a macOS or iOS app and ship to users with no environment and no server.
The practical proof is Dictum: its recognition runs on this same port.