MOSS-Transcribe is OpenMOSS's speech-LLM ASR model (~2.4 B params, Apache-2.0):
Stock Qwen3-Omni-MoE audio encoder (the full 1280-dim / 32-layer tower) feeds frames into a Qwen3-1.7B LLM via embedding splice in a ChatML prompt.
4.87 % average WER (reported by the authors).
Runs on CPU or GPU (Metal/CUDA) through the CrispASR runtime, with a persistent KV cache for O(1) per-token decode.
It is a close sibling of CrispASR's moss-audio backend (same author) but ASR-dedicated: no DeepStack, a conv_out/proj1/proj2 encoder head, and a smaller 1.7 B decoder.
Files
File
Size
Notes
moss-transcribe-preview-2b-f16.gguf
4.51 GB
F16
moss-transcribe-preview-2b-q8_0.gguf
3.28 GB
Q8_0, near-lossless
moss-transcribe-preview-2b-q4_k.gguf
2.63 GB
Q4_K — recommended default
The Q4_K and Q8_0 builds keep the audio encoder, the adapter, and the tied token-embedding / output head at F16 (only the LM's attention and FFN matmuls are quantised), so transcript quality is preserved.
All quantisations produce the correct transcript on samples/jfk.wav:
and so my fellow americans ask not what your country can do for you ask what you can do for your country
(The model outputs lowercase, lightly punctuated text.)
audio placeholder positions in the prompt get their token embedding replaced with the adapter output frames
Parameters
~2.4 B
Implementation notes (correctness)
The C++ runtime is verified against the PyTorch reference at every architectural boundary on samples/jfk.wav via the crispasr-diff harness:
Stage
Diff metric
Result
Mel (C++ STFT vs WhisperFeatureExtractor)
per-bin cosine
1.000000
Encoder layer 0 (conv + windowed attention)
per-row cosine
1.000000 (all rows)
Full encoder + adapter
per-row cosine
~0.98 (F16 weight precision)
First decode token
argmax vs reference
match (and)
End-to-end transcript
vs bf16 reference
verbatim
Non-obvious gotchas the port handled
Prompt template is mandatory. Inference must use the chat_template_default.py ChatML framing (user / assistant markers around the audio). The bare audio layout makes the model emit garbage instead of transcribing.
Whisper drops the trailing STFT frame (stft[..., :-1]), giving exactly n_samples / hop mel frames; the runtime truncates to match (otherwise the audio-token count drifts by one).
The token embedding is tied to the output head, so it is pinned at F16 in the quantised builds — quantising it corrupts both the input embeddings and every output logit.
Upstream licence:apache-2.0. This repository redistributes under the same terms; it grants no rights the upstream licence does not.
What was done here: format conversion and/or quantisation only (GGUF/GGML). No training, no fine-tuning, no merging, no distillation, no change to architecture, vocabulary or capability. Only the numeric representation of the upstream weights differs.
Training data: documented — where it is documented at all — by the upstream provider; see the upstream model card. No training data was used, added or selected by this repository.
Provider status: under Regulation (EU) 2024/1689 the upstream authors remain the provider of this model. Converting the serialisation format does not make this repository the provider of a new general-purpose AI model, and no such claim is made. Questions about training content, copyright policy or model capability belong upstream.