Skip to main content

Independent native MLX port of GigaAM-Multilingual for Apple Silicon

Project description

GigaAM-Multilingual MLX

An independent native MLX port of GigaAM for Apple Silicon, based on the official GigaAM-Multilingual model. This project is not an official release of the GigaAM authors.

PyPI package · Model Collection · latest release

gigaam-multilingual-mlx runs local multilingual speech recognition without PyTorch, ONNX Runtime, Core ML, or a cloud ASR service. Model weights are downloaded separately from Hugging Face and reused from the standard Hub cache.

Install and transcribe in 60 seconds

Requirements: an Apple Silicon Mac, macOS 14 or newer, Python 3.12 or 3.13, uv, and ffmpeg.

brew install uv ffmpeg
uv tool install gigaam-multilingual-mlx
gigaam-stt meeting.m4a --output transcript.txt

For the Python API inside a uv-managed project, use uv add gigaam-multilingual-mlx. A regular python -m pip install gigaam-multilingual-mlx remains supported. The canonical gigaam-multilingual-mlx transcribe ... command and the explicit gigaam-stt transcribe ... form remain available for compatibility.

The first run downloads the default INT8 model at the immutable v0.1.0 release tag. Later runs reuse the cached files.

Model variants

Variant Role Model size Hugging Face repository
INT8 g64 default, lowest-risk quantized 699 MB ai-babai/gigaam-multilingual-mlx-int8-g64
FP16 reference MLX artifact 1.17 GB ai-babai/gigaam-multilingual-mlx
INT6 g64 compact balanced 573 MB ai-babai/gigaam-multilingual-mlx-int6-g64
INT4 g64 smallest opt-in 447 MB ai-babai/gigaam-multilingual-mlx-int4-g64

All variants are grouped in the GigaAM Multilingual MLX Collection. The technical upstream branch name large_ctc remains artifact metadata; it is not part of the public project name.

Select another variant without knowing its repository name:

gigaam-stt speech.wav --variant fp16
gigaam-stt speech.wav --variant int6 --format json
gigaam-stt models

Inputs and outputs

ffmpeg provides decoding for WAV, FLAC, MP3, M4A, and audio tracks in common video containers. Inputs are converted to mono 16 kHz PCM before inference.

# Write next to an explicit path
gigaam-stt interview.mp3 --format srt --output interview.srt

# Generate OUTPUT_DIR/INPUT_STEM.vtt
gigaam-stt recording.mov --format vtt --output-dir transcripts/

# Machine-readable output with text, word timestamps, model revision, and metrics
gigaam-stt sample.flac --format json --output sample.json

Supported output formats are txt, json, srt, and vtt. CTC word timestamps are estimates derived from emission frames. They are monotonic and useful for navigation/subtitles, but they are not forced-alignment timestamps.

Long inputs are processed in deterministic overlapping chunks. The inference graph and tensors are reused between chunks instead of accumulating model state.

Cache, local models, and offline use

By default, Hugging Face stores model snapshots under ~/.cache/huggingface/hub. Use the normal Hub variables such as HF_HOME to move that cache, or pass an explicit directory:

gigaam-stt audio.wav --cache-dir /Volumes/ML/huggingface
gigaam-stt audio.wav --offline
gigaam-stt audio.wav --model /path/to/portable/model
gigaam-stt audio.wav \
  --model ai-babai/gigaam-multilingual-mlx-int8-g64 \
  --revision v0.1.0

--offline never contacts the Hub and fails clearly if the requested snapshot is not already cached. To remove only downloaded model data, use the Hugging Face CLI cache tools or delete the corresponding models--ai-babai--gigaam-* cache folders; do not remove unrelated Hub cache entries.

Python API

Existing local-directory loading remains supported, and Hub variants use the same function:

import mlx.core as mx
from gigaam_multilingual_mlx import load_model

model = load_model(variant="int8")  # downloads/reuses ai-babai/...-int8-g64@v0.1.0
audio = mx.zeros((1, 16_000), dtype=mx.float32)
log_probs, lengths = model(audio)
text = model.greedy_decode(log_probs, lengths)[0]["text"]

local_model = load_model("/path/to/portable/model")

Support matrix

Scope Status
Apple Silicon supported by MLX, macOS 14+, native ARM Python supported
M1–M5 generations expected compatible; not benchmarked individually
Apple M4 Pro, 48 GB, macOS 15.7.7 release benchmark machine
Intel Mac, Linux, Windows, iOS not supported in v0.1.0

The package reports an actionable error on unsupported platforms or when ffmpeg is missing.

Validation and benchmark

The accepted model artifacts use source revision 3905cd51c3ed4e88c8edf33f3302969ba480a327. Strict FP32 conversion reached 100% greedy-token agreement on the frozen parity set. Every production artifact reloads strictly with its recorded SHA-256.

The public quality suite uses pinned subsets of FLEURS ru_ru, Russian LibriSpeech, and SOVA RuDevices with one normalization rule and identical greedy decoding. The release report publishes Original PyTorch/MPS, FP16, INT8, INT6, and INT4 side by side, including WER/CER, load/cold/warm timing, RTF, peak resident memory, MLX memory, and swap. It contains no private/user audio.

Results at a glance

Apple M4 Pro (48 GB), macOS 15.7.7. WER columns are FLEURS / Russian LibriSpeech / SOVA corpus WER. Runtime is the warm median for the same public 5-minute input; download time is excluded. Lower is better except speedup.

Implementation Weights WER: FLEURS / RuLibri / SOVA Load 5-min warm Speed vs Original Peak RSS
Original PyTorch/MPS 2.342 GB 6.271% / 5.911% / 12.448% 6.066s 3.023s 1.00× 5.019 GB
MLX FP16 1.171 GB 6.271% / 5.929% / 12.431% 0.947s 2.089s 1.45× 1.348 GB
MLX INT8 g64 (default) 0.699 GB 6.292% / 5.911% / 12.481% 0.578s 2.332s 1.30× 0.879 GB
MLX INT6 g64 0.573 GB 6.249% / 6.022% / 12.465% 0.478s 3.142s 0.96× 0.755 GB
MLX INT4 g64 0.447 GB 6.358% / 6.003% / 12.581% 0.378s 2.750s 1.10× 0.628 GB

INT8 is the default for its measured quality, size, and memory balance. FP16 is the fastest measured variant on the representative 5-minute input; quantization does not guarantee a speedup for every duration. Peak RSS is whole-process resident memory, not model-only or additional GPU memory.

See benchmarks/README.md for the reproducible public-only methodology and docs/benchmark-v0.1.0.md for release results.

Limitations

  • The v0.1.0 release exposes greedy CTC decoding; it does not add beam search.
  • Timestamps are approximate CTC emission times.
  • Training, fine-tuning, diarization, microphone streaming, and a local HTTP server are outside this release.
  • Quality is strongest for Russian, Kazakh, Kyrgyz, and Uzbek; upstream reports moderate English quality. See the upstream model card for the authoritative scope.
  • Model and dataset biases from the upstream training/evaluation material remain.

Developer tools

Conversion, quantization, parity, quality evaluation, and benchmark commands are kept out of the production CLI and use optional dependencies:

python -m pip install 'gigaam-multilingual-mlx[convert,quality]'
python -m gigaam_multilingual_mlx.dev_cli --help

Weights, datasets, generated audio, and raw benchmark outputs must stay outside the Git repository.

License, attribution, and citation

The code in this repository is MIT-licensed. GigaAM code/model provenance and dataset notices are recorded in THIRD_PARTY_NOTICES.md. When using the model, cite the original GigaAM-Multilingual work from the upstream model card; project citation metadata is available in CITATION.cff.

Security reports and contributions are described in SECURITY.md and CONTRIBUTING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gigaam_multilingual_mlx-0.1.1.tar.gz (286.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gigaam_multilingual_mlx-0.1.1-py3-none-any.whl (36.3 kB view details)

Uploaded Python 3

File details

Details for the file gigaam_multilingual_mlx-0.1.1.tar.gz.

File metadata

  • Download URL: gigaam_multilingual_mlx-0.1.1.tar.gz
  • Upload date:
  • Size: 286.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for gigaam_multilingual_mlx-0.1.1.tar.gz
Algorithm Hash digest
SHA256 cc543c6f00919416e16236c28bc7b85c65cd37f04c2423aae00d66f5e70c2b68
MD5 937ecc979e9729cf2209fc1281182361
BLAKE2b-256 fbeca7b4f00305f90ecdb3c2d149817918973a5bbde2b95562a525f670287642

See more details on using hashes here.

Provenance

The following attestation bundles were made for gigaam_multilingual_mlx-0.1.1.tar.gz:

Publisher: publish-to-pypi.yml on ai-babai/gigaam-multilingual-mlx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gigaam_multilingual_mlx-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for gigaam_multilingual_mlx-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 91312fa1d6abbed13b60e5c895559c32ea1cee634a6da5fe815fd45dfccee2a8
MD5 cc06721c44a85476d806b674c5aefb79
BLAKE2b-256 02ca72da09ff2a289976ca3be04fb3b9bf853a8a21f97f4ac094b314d37f0f05

See more details on using hashes here.

Provenance

The following attestation bundles were made for gigaam_multilingual_mlx-0.1.1-py3-none-any.whl:

Publisher: publish-to-pypi.yml on ai-babai/gigaam-multilingual-mlx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page