MOSS-Transcribe-Diarize-0.9B-CoreML-INT8

Core ML conversion of OpenMOSS-Team/MOSS-Transcribe-Diarize, pinned to revision e6d68cdfcddbdad1a7e8454f0cb859cad76e2502. The model produces timestamped, speaker-attributed text in the form [start][Sxx]text[end].

Model

Property Value
Parameters 908,513,280 total: 312,463,360 audio/VQ + 596,049,920 text decoder
Architecture 24-layer Whisper-medium encoder, 4x VQ adaptor, 28-layer Qwen3 decoder
Quantization FP16 audio + symmetric linear INT8 block-32 decoder
Format Compiled Core ML (.mlmodelc), macOS 15 / iOS 18
Bundle size 1.19 GiB
Audio 16 kHz mono; non-overlapping 30-second encoder chunks
Output Timestamps, anonymous speaker labels, transcription text
Context The fixed 1024-token MLState cache covers at most about 1.4 minutes of raw audio before prompt/output tokens.

Files

File Size Description
added_tokens.json 707 B Additional token IDs
audio_encoder.mlmodelc/ 596.3 MiB Compiled Whisper encoder and VQ adaptor
chat_template.jinja 4.7 KiB Prompt and audio-placeholder template
config.json 844 B Root loader metadata and download-counting query file
decoder/config.json 1.2 KiB Decoder geometry, state cache, functions, and precision
decoder/decoder.mlmodelc/ 605.1 MiB Compiled stateful Qwen3 decoder and tied embedding
export_config.json 1.4 KiB Source revision, artifact hashes, and graph contract
generation_config.json 107 B Greedy generation token defaults
merges.txt 1.6 MiB Byte-pair merge rules
preprocessor_config.json 315 B 16 kHz Whisper feature-extractor settings
processing_moss_transcribe_diarize.py 10.7 KiB Upstream processor implementation
processor_config.json 292 B Audio-token and timestamp-marker settings
source_config.json 2.3 KiB Pinned upstream model geometry
special_tokens_map.json 613 B Special token definitions
tokenizer.json 10.9 MiB Qwen tokenizer vocabulary and rules
tokenizer_config.json 503 B Tokenizer configuration
validation.json 2.3 KiB Measured quality, speed, memory, and parity results
vocab.json 2.6 MiB Byte-pair vocabulary

Performance

Measured with greedy decoding on an Apple M5 Pro with 48 GB unified memory. Word error rate (WER), character error rate (CER), and real-time factor (RTF) are lower when better. Throughput is 1 / RTF, is higher when better, and reports how many seconds of audio are processed per wall-clock second. RTF excludes model loading. RSS is process memory sampled at clip boundaries; OS high-water RSS also includes transient peaks when the operating system reports it.

Slice Samples WER CER RTF Throughput Sampled / OS high-water RSS Plain parity vs FP32
english 80 8.32 5.38 0.0571 17.5x real-time 2,937 / 3,614 MB 77/80

Multilingual precision check

Slice Samples WER CER RTF Throughput Plain parity vs FP32
german 10 13.37 5.99 0.0507 19.7x real-time 10/10
french 10 4.91 1.99 0.0803 12.5x real-time 10/10
msa 10 26.50 8.31 0.0620 16.1x real-time 8/10

Round trips

  • 30-second overlapping AMI window: RTF 0.113; text=exact, speaker_sequence=exact, raw=drift. The source predicted 3 speakers where RTTM contains 4.
  • 33.12-second two-chunk German clip: RTF 0.054; text=exact, speaker_sequence=exact, raw=exact.

The multilingual check covers only ten German, ten French, and ten Modern Standard Arabic clips. It is a conversion check, not proof of the upstream model's full 50-language quality. The meeting round trip checks transcript and speaker-sequence parity but is not a diarization error-rate benchmark.

Usage

Python

from pathlib import Path

import coremltools as ct
from huggingface_hub import snapshot_download

bundle = Path(snapshot_download("aufklarer/MOSS-Transcribe-Diarize-0.9B-CoreML-INT8"))
audio = ct.models.CompiledMLModel(str(bundle / "audio_encoder.mlmodelc"))
embedding = ct.models.CompiledMLModel(
    str(bundle / "decoder/decoder.mlmodelc"), function_name="embedding"
)
decoder = ct.models.CompiledMLModel(
    str(bundle / "decoder/decoder.mlmodelc"), function_name="decoder"
)
state = decoder.make_state()

The host computes Whisper features, replaces audio-placeholder embeddings, runs prompt prefill, then performs greedy token decoding while preserving state. The exact tensor names and shapes are recorded in config.json and decoder/config.json.

Command line

hf download aufklarer/MOSS-Transcribe-Diarize-0.9B-CoreML-INT8 --local-dir ./moss-transcribe-diarize

This downloads a complete low-level model bundle. SDK integration is tracked in speech-swift issue #388; until that integration lands, applications must implement the documented host contract around the exported graphs or weights.

Runtime contract

The multifunction decoder exposes embedding and decoder and uses a persistent FP16 MLState K/V cache. It was loaded with ComputeUnit.ALL and FastPrediction. Prompt construction, audio chunking, generation, cache management, and transcript parsing remain host responsibilities. Machine-readable details and measured results are in config.json, export_config.json, and validation.json.

Source

No training was performed for this conversion. The source weights contain 908,513,280 parameters and are licensed under Apache 2.0.

Limitations

Speaker IDs are anonymous within each inference. The source model can emit malformed or overlapping timestamps and can miss speakers; conversion parity does not correct those behaviors. ANE-only loading failed with Core ML error -14, so the measured runtime allows Core ML accelerator fallback. The validation here does not establish the upstream 90-minute claim for this deployment format.

Links

License

Apache License 2.0, inherited from the upstream model.

Downloads last month
19
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for aufklarer/MOSS-Transcribe-Diarize-0.9B-CoreML-INT8

Finetuned
(6)
this model

Collection including aufklarer/MOSS-Transcribe-Diarize-0.9B-CoreML-INT8

Paper for aufklarer/MOSS-Transcribe-Diarize-0.9B-CoreML-INT8