आर्किटेक्चर
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)इन्फ़रेंस बैकएंड
| बैकएंड | हार्डवेयर | मॉडल |
|---|---|---|
| MLX | Metal GPU | Qwen3-ASR, Qwen3-TTS, CosyVoice3, Qwen3.5-Chat, PersonaPlex, Omnilingual ASR (300M / 1B / 3B / 7B), Pyannote, Silero VAD, WeSpeaker |
| 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 (वैकल्पिक) |
| Accelerate | CPU (SIMD) | ऑडियो प्रीप्रोसेसिंग (STFT, mel, FFT), सिग्नल प्रोसेसिंग |
मॉडल वेट फ़ॉर्मैट
MLX मॉडल safetensors फ़ॉर्मैट का उपयोग करते हैं जिसमें 4-bit या 8-bit क्वांटिज़ेशन (group size 64) होता है। CoreML मॉडल .mlmodelc कंपाइल्ड फ़ॉर्मैट का उपयोग करते हैं। scripts/ में कन्वर्ज़न स्क्रिप्ट PyTorch चेकपॉइंट से कन्वर्ट करती हैं।
| मॉडल | पैरामीटर | क्वांटिज़ेशन | डिस्क पर आकार |
|---|---|---|---|
| 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 |
| 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 |
| 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 |
| 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 |
| 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) |
| Sortformer (CoreML) | — | float16 | ~50 MB |
| DeepFilterNet3 (CoreML) | ~2.1M | FP16 | ~4.2 MB |
परफ़ॉर्मेंस ऑप्टिमाइज़ेशन
- 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 |
| 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 |
| DeepFilterNet3 | 48 kHz | Mono Float32 |
सोर्स संरचना
Sources/
AudioCommon/ Shared protocols, audio I/O, HuggingFace downloader,
SentencePieceModel (protobuf reader)
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)
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
SpeechEnhancement/ DeepFilterNet3 noise suppression (CoreML)
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)