आर्किटेक्चर
speech-swift एक मॉड्यूलर Swift पैकेज के रूप में संगठित है जिसमें साझा प्रोटोकॉल, स्वतंत्र मॉडल मॉड्यूल, और एक एकीकृत CLI है। सभी इन्फ़रेंस MLX (Metal GPU) या CoreML (Neural Engine) का उपयोग करके ऑन-डिवाइस चलते हैं।
मॉड्यूल निर्भरता ग्राफ़
┌──────────┐
│ AudioCLI │ (entry point)
└────┬─────┘
│
┌──────┴──────┐
│ AudioCLILib │ (commands)
└──────┬──────┘
│
┌─────────┬───────┼───────┬──────────┬──────────────┐
│ │ │ │ │ │
┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
│Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │ Speech- │
│Parakeet│ │ TTS │ │Voice│ │naPlex│ │ VAD │ │Enhancement │
└────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
│ │ │ │ │ │
└────────┴───────┼───────┴─────────┘ │
│ │
┌──────┴──────┐ │
│ Qwen3Common │ (shared layers) │
└──────┬──────┘ │
│ │
┌──────┴──────┐ │
│ AudioCommon │ ◄──────────────────────┘
└─────────────┘ (protocols, audio I/O)MOSS Transcribe Diarize
MossTranscribe native CoreML और MLX backends से speaker सहित timestamp segments देता है। छोटे recordings के लिए CoreML fixed 1,024-token state उपयोग करता है। MLX dynamic 131,072-token context, affine INT5/INT8 decoder weights और वैकल्पिक FP16/INT8 KV caches उपयोग करता है। दोनों offline autoregressive runtimes हैं, streaming नहीं।
VoiceChat 11B
Task और reference: duplex speech-to-speech; SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model (Interspeech 2025), जिसे NVIDIA के upstream VoiceChat model card में cite किया गया है।
पूरा runtime, M5 Pro 48 GB, Release, 80 ms live cadence: protected-head INT5 का peak RSS लगभग 8.69 GB है; तीन controlled whole-pipeline RTF results 0.96, 0.96 और 0.99 थे। Optimized INT8 performance को अभी दोबारा नहीं मापा गया है।
VoiceChat पूरा native MLX audio-to-audio path लागू करता है: causal FastConformer perception, Nemotron-H duplex text/function channels, आठ MaskGIT iterations वाला स्वतंत्र text-conditioned EAR-TTS decoder और 22.05 kHz neural codec। Streaming हर layer के bounded attention और causal-convolution caches रखती है, जबकि steady eight-frame live codec window compiled graph का उपयोग करती है। हर 80 ms input frame एक language decision, 31 RVQ codes और ठीक 1,764 output samples बनाता है। loader को पूरा encoder/ + llm/ + tts/ bundle चाहिए और पुराने understanding-only exports अस्वीकार होते हैं। INT5 अब परीक्षित M5 Pro पर average RTF 1 से कम रखता है, हालांकि per-frame p95 headroom अभी कम है।
इन्फ़रेंस बैकएंड
| बैकएंड | हार्डवेयर | मॉडल |
|---|---|---|
| MLX | Metal GPU | Qwen3-ASR, Qwen3-TTS, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Omnilingual ASR (300M / 1B / 3B / 7B), Cohere Transcribe 2B, Voxtral Mini 3B, Pyannote, Silero VAD, WeSpeaker, MOSS Transcribe Diarize, SpeechBrain ECAPA LID |
| CoreML | Neural Engine | Qwen3-ASR encoder (हाइब्रिड), Parakeet TDT, Parakeet EOU streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (वैकल्पिक), Sortformer diarization, DeepFilterNet3, Silero VAD (वैकल्पिक), WeSpeaker (वैकल्पिक), MOSS Transcribe Diarize, SpeechBrain ECAPA LID |
| Accelerate | CPU (SIMD) | ऑडियो प्रीप्रोसेसिंग (STFT, mel, FFT), सिग्नल प्रोसेसिंग |
मॉडल वेट फ़ॉर्मैट
MLX मॉडल safetensors फ़ॉर्मैट का उपयोग करते हैं जिसमें 4-bit या 8-bit क्वांटिज़ेशन (group size 64) होता है। CoreML मॉडल .mlmodelc कंपाइल्ड फ़ॉर्मैट का उपयोग करते हैं। scripts/ में कन्वर्ज़न स्क्रिप्ट PyTorch चेकपॉइंट से कन्वर्ट करती हैं।
Cohere और Voxtral में MLX affine INT5 बंडल भी उपलब्ध हैं। MLX affine INT7 का समर्थन नहीं करता; अधिक गुणवत्ता वाला समर्थित विकल्प INT8 है।
| मॉडल | पैरामीटर | क्वांटिज़ेशन | डिस्क पर आकार |
|---|---|---|---|
| Qwen3-ASR 0.6B (MLX) | ~600M | 4-bit / 8-bit | 680 MB / 1.0 GB |
| Qwen3-ASR 0.6B (CoreML) | ~186M (encoder) | INT8 | ~180 MB |
| Qwen3-ASR 1.7B (MLX) | ~1.7B | 4-bit / 8-bit | 2.1 GB / 3.2 GB |
| Parakeet-TDT 0.6B (CoreML) | ~600M | INT8 | 500 MB |
| Whisper Large-v3 Turbo (CoreML) | 809M | FP16 | 1.6 GB |
| MOSS Transcribe Diarize 0.9B (MLX) | 908.5M | FP16 audio + INT5 / INT8 decoder | 987.0 MiB / 1,200.1 MiB |
| MOSS Transcribe Diarize 0.9B (CoreML) | ~900M | FP16 / INT8 block-32 | 1.7 GB / 1.2 GB |
| Parakeet-EOU 120M (CoreML) | ~120M | INT8 | ~120 MB |
| Omnilingual-ASR-CTC 300M (CoreML) | 326M | INT8 | 312 MB |
| Omnilingual-ASR-CTC 300M (MLX) | 326M | 4-bit / 8-bit | 193 MB / 342 MB |
| Omnilingual-ASR-CTC 1B (MLX) | 1.01B | 4-bit / 8-bit | 549 MB / 1006 MB |
| Omnilingual-ASR-CTC 3B (MLX) | ~3B | 4-bit / 8-bit | 1.71 GB / 3.16 GB |
| Omnilingual-ASR-CTC 7B (MLX) | ~7B | 4-bit / 8-bit | 3.55 GB / 6.63 GB |
| Cohere Transcribe 2B (MLX) | 2B | FP16 / INT5 / INT8 | 3.85 / 1.62 / 2.25 GiB |
| Voxtral Mini 3B 2507 (MLX) | 3B | FP16 / INT5 / INT8 | 8.71 / 3.77 / 5.18 GiB |
| Qwen3-ForcedAligner 0.6B (MLX) | ~600M | 4-bit / 8-bit | 979 MB / 1.4 GB |
| Qwen3-ForcedAligner 0.6B (CoreML) | ~600M | INT4 / INT8 | 630 MB / 1.0 GB |
| Qwen3-TTS 0.6B (MLX) | ~600M | 4-bit / 8-bit | 1.7 GB / 2.4 GB |
| Qwen3-TTS 1.7B (MLX) | ~1.7B | 4-bit / 8-bit | 3.2 GB / 4.8 GB |
| CosyVoice3 0.5B (MLX) | ~500M | 4-bit LLM | ~1.2 GB |
| IndexTTS2 expanded bundle (MLX) | 1.5B-class | FP16 + auxiliary models | ~4.8 GB |
| Kokoro-82M (CoreML) | 82M | INT8 (1 bucket) | ~89 MB |
| Qwen3.5-Chat 0.8B (MLX) | ~800M | INT4 | 418 MB |
| Qwen3.5-Chat 0.8B (CoreML) | ~800M | INT8 | 981 MB |
| PersonaPlex 7B (MLX) | ~7B | 4-bit / 8-bit | 4.9 GB / 9.1 GB |
| VoiceChat 11B (MLX) | ~11B | INT5 / INT8 | 8.56 GB / 12.11 GB |
| Pyannote VAD (MLX) | ~1.49M | float32 | ~5.7 MB |
| Silero VAD v5 | ~309K | float32 | ~1.2 MB (MLX & CoreML) |
| WeSpeaker ResNet34 | ~6.6M | float32 | ~25 MB (MLX & CoreML) |
| SpeechBrain ECAPA VoxLingua107 | 21.25M | FP16 | ~40.6 MiB (MLX) / ~40.8 MiB (CoreML) |
| ReDimNet2-B6 | 12.3M | float16 | ~25 MiB (CoreML) |
| Pyannote Community-1 (CoreML) | 8.35M | float32 + native VBx | ~32 MB |
| Sortformer (CoreML) | — | float16 | ~50 MB |
| DeepFilterNet3 (CoreML) | ~2.1M | FP16 | ~4.2 MB |
| LocalVQE v1.4-AEC (CoreML + C++) | 200K + 2,742 | FP16 + FP32 | ~732 KB |
परफ़ॉर्मेंस ऑप्टिमाइज़ेशन
- MLX compile() — ऑटोरिग्रेसिव लूप के लिए कर्नेल फ़्यूज़न। Talker
compile(shapeless: true)का उपयोग करता है, Code Predictor फिक्स्ड कैश साइज़ के साथcompile(shapeless: false)का उपयोग करता है। - Metal shader library — प्री-कंपाइल्ड metallib ~5x JIT कंपाइलेशन ओवरहेड से बचाती है।
scripts/build_mlx_metallib.shके माध्यम से बिल्ड की जाती है। - Chunked codec decode — TTS decoder GPU timeout से बचने के लिए 10-फ़्रेम कॉन्टेक्स्ट ओवरलैप के साथ 25-फ़्रेम chunks में ऑडियो प्रोसेस करता है।
- Batch-doubled CFG — CosyVoice3 DiT कंडीशनल + अनकंडीशनल को एक साथ बैच करके flow matching passes को आधा करता है।
- Fused RoPE — मैनुअल रोटेशन के बजाय Metal kernel द्वारा समर्थित
MLXNN.RoPEका उपयोग करता है। - BN fusion — WeSpeaker batch normalization को कन्वर्ज़न समय पर Conv2d वेट में फ़्यूज़ किया जाता है।
ऑडियो प्रोसेसिंग
सभी ऑडियो I/O Float32 PCM का उपयोग करता है। आंतरिक resampling फ़ॉर्मैट कन्वर्ज़न को हैंडल करती है:
| मॉडल | अपेक्षित रेट | फ़ॉर्मैट |
|---|---|---|
| Qwen3-ASR | 16 kHz | Mono Float32 |
| Cohere Transcribe 2B | 16 kHz | Mono Float32 |
| Voxtral Mini 3B | 16 kHz | Mono Float32 |
| Qwen3-TTS | 24 kHz आउटपुट | Mono Float32 |
| CosyVoice3 | 24 kHz आउटपुट | Mono Float32 |
| Kokoro-82M | 24 kHz आउटपुट | Mono Float32 |
| PersonaPlex | 24 kHz I/O | Mono Float32 |
| Pyannote VAD | 16 kHz | Mono Float32 |
| Silero VAD | 16 kHz | Mono Float32 |
| WeSpeaker | 16 kHz | Mono Float32 |
| SpeechBrain ECAPA LID | 16 kHz | Mono Float32 |
| ReDimNet2-B6 | 16 kHz | Mono Float32 |
| DeepFilterNet3 | 48 kHz | Mono Float32 |
सोर्स संरचना
Sources/
AudioCommon/ साझा प्रोटोकॉल, ऑडियो I/O, सिस्टम आउटपुट कैप्चर
(SystemAudioTap), HuggingFace डाउनलोडर,
SentencePieceModel (protobuf रीडर)
MLXCommon/ MLX utilities: weight loading, QuantizedLinear helpers,
SDPA multi-head attention helper, metal budget
Qwen3Common/ Shared model components (KV cache, RoPE, quantization)
Qwen3ASR/ Qwen3-ASR speech-to-text
ParakeetASR/ Parakeet TDT speech-to-text (CoreML)
ParakeetStreamingASR/ Parakeet EOU 120M streaming dictation (CoreML)
OmnilingualASR/ Meta wav2vec2 + CTC, 1,672 languages
(CoreML 300M + MLX 300M / 1B / 3B / 7B)
CohereTranscribeASR/ Cohere Transcribe 2B speech-to-text (MLX)
VoxtralASR/ Voxtral Mini 3B speech-to-text (MLX)
Qwen3TTS/ Qwen3-TTS text-to-speech
CosyVoiceTTS/ CosyVoice3 text-to-speech
KokoroTTS/ Kokoro-82M text-to-speech (CoreML)
Qwen3Chat/ Qwen3.5-0.8B on-device LLM chat (MLX + CoreML)
PersonaPlex/ PersonaPlex speech-to-speech
SpeechVAD/ VAD (Silero + Pyannote), diarization, speaker embeddings
SpeechLanguageID/ बोली गई भाषा की पहचान (SpeechBrain ECAPA, MLX + CoreML, 107 लेबल)
SpeechEnhancement/ DeepFilterNet3 noise suppression (CoreML)
SourceSeparation/ Open-Unmix HQ / UMX-L + HTDemucs (Demucs v4) music source separation (MLX, 4 stems)
MAGNeTMusicGen/ MAGNeT text-to-music generation (MLX, 30 s @ 32 kHz, INT4/INT8)
VoxCPM2TTS/ VoxCPM2 text-to-speech (MLX, 48 kHz, voice cloning + voice design)
IndexTTS2TTS/ IndexTTS2 voice cloning (MLX, semantic GPT + emotion/tempo/pause control + S2Mel + BigVGAN)
VibeVoiceTTS/ VibeVoice long-form / multi-speaker TTS (MLX, EN/ZH)
MADLADTranslation/ MADLAD-400 many-to-many translation (MLX, 400+ languages)
AudioCLILib/ CLI command implementations
AudioCLI/ CLI entry point
scripts/ Model conversion (PyTorch → MLX/CoreML), benchmarking
Tests/ Unit and integration tests
Examples/ Demo apps (PersonaPlexDemo, SpeechDemo)