Native GigaChat Audio inference on Apple Silicon with MLX
Project description
GigaChat Audio MLX
English · Русский
Local, offline audio understanding on Apple Silicon Macs. Ask questions about audio, transcribe or translate speech, detect emotion, find moments by time, and create timestamped summaries. This is an independent native MLX port of the official GigaChat3.1-Audio-10B-A1.8B model from the GigaChat Audio paper. It runs without a PyTorch, CUDA, or cloud runtime.
PyPI · Hugging Face models · Latest release · Full results · Upstream model · Original paper
At a glance: what each model needs
| Variant | Model size | Free disk to set aside | Measured total process memory | 5:17 audio on M4 Pro | Recommendation |
|---|---|---|---|---|---|
| BF16 | 22.54 GB | about 25 GB | 22.84 GiB | 10.41 s · 30.5× realtime | default for quality |
| Q8/BF16 | 13.75 GB | about 16 GB | 14.80 GiB | 6.90 s · 46.0× realtime | experimental opt-in |
In plain terms: on the tested Mac, a 5-minute 17-second recording took about
10 seconds with BF16 or 7 seconds with Q8/BF16. Download time is not included.
The free-disk figures are practical rounded reserves; download --dry-run
reports the exact requirement before transferring anything.
The memory column is measured use by the whole process, not a promise that a Mac with exactly that much unified memory will work. Both variants are verified only on a 48 GB Mac today. 16/24/32 GB support will be stated only after it is tested.
Quick start
The verified environment is an Apple M4 Pro with 48 GB unified memory, macOS 15.7.7, and native ARM Python 3.12 or 3.13. Broader M1–M5 and lower-memory support is not yet claimed.
brew install uv
uv tool install gigachat-audio-mlx
gigachat-audio-mlx doctor
gigachat-audio-mlx download --variant bf16 --dry-run
gigachat-audio-mlx download --variant bf16 --yes
gigachat-audio-mlx run meeting.m4a \
--variant bf16 \
--task summarize \
--max-tokens 768
doctor is read-only. The download dry run shows exact bytes, cache hits, free
disk space, and the destination before any network transfer.
Why this port?
- Native MLX inference without PyTorch, CUDA, ONNX Runtime, Core ML, or a cloud API.
- One local runtime for audio QA, transcription, translation, emotion analysis, temporal grounding, and timestamped summaries.
- Data-only model repositories: no remote Python execution and no
trust_remote_code. - Immutable model revisions, a signed manifest of expected files, and SHA-256 validation before loading.
- A quality-first BF16 model and a clearly labelled, optional Q8/BF16 variant.
Model variants and quality trade-off
All resource figures below are direct measurements on the same 317.27-second audio workload. Lower is better. The median of five clean processes is reported for time and whole-process physical memory.
| Variant | Recommended use | Model size | Process memory | 5-minute time | Hugging Face |
|---|---|---|---|---|---|
| BF16 | recommended quality-first default | 22.54 GB | 22.84 GiB | 10.41 s | ai-babai/gigachat-audio-mlx |
| Q8/BF16 | experimental opt-in | 13.75 GB | 14.80 GiB | 6.90 s | ai-babai/...-q8-bf16 |
Q8/BF16 is 39.0% smaller, used 35.2% less process memory, and was 33.7% faster. It also produced a factual error in 29 of 64 reviewed responses versus 26 of 64 for BF16. BF16 therefore remains the default.
Common tasks
The text instruction is part of every input. Use a preset or provide an exact custom request:
# Russian transcription
gigachat-audio-mlx run speech.wav --variant bf16 --task transcribe
# Translate speech to English
gigachat-audio-mlx run interview.flac --variant bf16 --task translate-en
# Find a moment in time
gigachat-audio-mlx run meeting.m4a \
--variant bf16 \
--prompt "Find when the budget decision was approved. Return start and end timestamps."
# Timestamped summary
gigachat-audio-mlx run meeting.m4a \
--variant bf16 \
--task summarize \
--max-tokens 768 \
--stats
Available presets are transcribe, translate, translate-ru,
translate-en, emotion, ground, summarize, and qa. A custom --prompt
overrides the preset.
WAV and FLAC work in the default installation. MP3 is supported by the bundled audio wheel; M4A uses the macOS-native decoder fallback. Stereo is mixed to mono and resampled deterministically to 16 kHz with SoXR HQ. No Homebrew or ffmpeg installation is required.
Results available today
MLX BF16 compared with MLX Q8/BF16
| Metric, lower is better | MLX BF16 · recommended | MLX Q8/BF16 · experimental | Change |
|---|---|---|---|
| Model size, decimal GB | 22.54 | 13.75 | −39.0% |
| Whole-process memory, 5-minute profile | 22.84 GiB | 14.80 GiB | −35.2% |
| End-to-end time, 5-minute profile | 10.41 s | 6.90 s | −33.7% |
| Responses with a factual error | 26/64 (40.63%) | 29/64 (45.31%) | +3 responses (+4.69 pp) |
Model size is the disk payload, not RAM. Memory is the whole-process macOS physical footprint. Published performance figures come from the verified M4 Pro / 48 GB machine and are not universal Apple Silicon claims.
Original PyTorch BF16 compared with the MLX port
| Check | Original PyTorch BF16 | MLX BF16 | MLX Q8/BF16 |
|---|---|---|---|
| Model size, decimal GB | 23.73 | 22.54 | 13.75 |
| Exact decoded-text agreement | Reference | 41/50 vs Original | 45/50 vs MLX BF16 |
Exact text agreement is an implementation-parity diagnostic, not an aggregate quality score. Original PyTorch has not yet been measured with the same five-minute Mac resource protocol, so it is intentionally absent from the RAM and speed comparison. That measurement is planned after publication.
Results reported by the original authors
These values come from the upstream model card and were not rerun by this project.
| Task and dataset | Metric | Original reported result |
|---|---|---|
| Audio QA · MMAU | Accuracy ↑ | 62.2 |
| Audio QA (Russian) · RuBQ | Accuracy ↑ | 60.0 |
| Emotion · Dusha podcast | Accuracy ↑ | 92.4 |
| ASR (Russian) · FLEURS ru | WER ↓ | 4.4 |
| ASR (English) · FLEURS en | WER ↓ | 6.5 |
| Translation · FLEURS ru→en | BLEU ↑ | 33.4 |
| Translation · FLEURS en→ru | BLEU ↑ | 26.0 |
| Temporal localization · 20–60 min | mIoU ↑ | 48.3 |
| Timed summary · 20–60 min | Overall ↑ | 67.9 |
See the full result tables and measurement notes and the upstream model card.
Python API
from gigachat_audio_mlx.runtime import GigaChatAudioRuntime
runtime = GigaChatAudioRuntime.load("/path/to/mlx-model")
Pinned Hugging Face snapshots can also be loaded without remote code:
runtime = GigaChatAudioRuntime.from_pretrained(
"ai-babai/gigachat-audio-mlx",
revision="db430193908ea810d4873404b43a148d5cbe9753",
local_files_only=True,
)
Compatibility and limitations
- Verified: Apple M4 Pro, 48 GB unified memory, macOS 15.7.7 arm64, and Python 3.12/3.13.
- Not yet claimed: all M1–M5 Macs, 16/24/32 GB configurations, Intel Mac, Linux, Windows, iOS, or 90-minute inputs.
- Long timestamped summaries can reach the output-token limit. Increase
--max-tokensonly after checking the memory estimate. - Answers, translations, emotions, facts, and timestamps can be wrong. Verify important output against the source audio.
- Do not use output as the sole basis for medical, legal, employment, safety, or surveillance decisions. Users remain responsible for consent, privacy, copyright, and the terms governing their audio.
Reproducibility and development
The source model is pinned to revision
bf73d03a43bdf5118f5a4dbdc24ba6f56ac31cfb. Model weights, datasets, caches,
private audio, and large raw benchmark outputs are not stored in Git. The
repository contains compact results, manifests, selection rules, and commands
needed to inspect the published evidence.
Start with benchmarks/README.md for the benchmark map
and docs/release/v0.1.0/RESULTS.md for the
current tables and limitations.
License and attribution
The MLX runtime is MIT-licensed. Upstream model, paper, code, and dependency
provenance is recorded in THIRD_PARTY_NOTICES.md.
Please cite both this software through CITATION.cff and the
original work:
- GigaChat3.1-Audio-10B-A1.8B model
- GigaChat Audio: Time-aware Large Audio Language Model, by Aleksandr Kutsakov, Mariia Sadovina, Georgii Gospodinov, Alexandr Maximenko, Oleg Kutuzov, Pavel Bogomolov, and Fyodor Minkin
- Upstream MIT license declaration
This project is not an official release by the GigaChat Audio authors. Security
reports and contributions are covered by SECURITY.md and
CONTRIBUTING.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gigachat_audio_mlx-0.1.2.tar.gz.
File metadata
- Download URL: gigachat_audio_mlx-0.1.2.tar.gz
- Upload date:
- Size: 78.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4be7384512defc7801c83bb39f0834f4f0fabe65399fb1f131fff0904ef3b7a3
|
|
| MD5 |
9239d37c795cc83bb8603e5bdca8269c
|
|
| BLAKE2b-256 |
71a036ea98d3dc9eac1dcd973308807fc8136f6df4272a6a81d0c4b1b4fc855c
|
Provenance
The following attestation bundles were made for gigachat_audio_mlx-0.1.2.tar.gz:
Publisher:
publish-to-pypi.yml on ai-babai/gigachat-audio-mlx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gigachat_audio_mlx-0.1.2.tar.gz -
Subject digest:
4be7384512defc7801c83bb39f0834f4f0fabe65399fb1f131fff0904ef3b7a3 - Sigstore transparency entry: 2203740713
- Sigstore integration time:
-
Permalink:
ai-babai/gigachat-audio-mlx@ca20e048cdd8251e97ac68abae35479baf4612de -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/ai-babai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@ca20e048cdd8251e97ac68abae35479baf4612de -
Trigger Event:
release
-
Statement type:
File details
Details for the file gigachat_audio_mlx-0.1.2-py3-none-any.whl.
File metadata
- Download URL: gigachat_audio_mlx-0.1.2-py3-none-any.whl
- Upload date:
- Size: 39.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d154dc7d0e61ecc56cf7d11b4190b70588f0dded2d5991d0ee406860e1be48c
|
|
| MD5 |
cd618c738f20619f15ae27c681cb9cba
|
|
| BLAKE2b-256 |
7f5f77f3ff8b85bc92ba1b9c53a59d00eb924a8f9c05b2b60dd32a3f49fa3dc5
|
Provenance
The following attestation bundles were made for gigachat_audio_mlx-0.1.2-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on ai-babai/gigachat-audio-mlx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gigachat_audio_mlx-0.1.2-py3-none-any.whl -
Subject digest:
1d154dc7d0e61ecc56cf7d11b4190b70588f0dded2d5991d0ee406860e1be48c - Sigstore transparency entry: 2203740725
- Sigstore integration time:
-
Permalink:
ai-babai/gigachat-audio-mlx@ca20e048cdd8251e97ac68abae35479baf4612de -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/ai-babai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@ca20e048cdd8251e97ac68abae35479baf4612de -
Trigger Event:
release
-
Statement type: