डिवाइस पर वॉइस एजेंट चलाना
एक पाइपलाइन, तीन मेमोरी बजट।
एक लोकल वॉइस एजेंट एक मॉडल नहीं है — यह चार की पाइपलाइन है: वॉइस एक्टिविटी डिटेक्शन, स्पीच-टू-टेक्स्ट, एक भाषा मॉडल और टेक्स्ट-टू-स्पीच, जो टर्न संभालने वाली स्टेट मशीन से जुड़े होते हैं। पाइपलाइन फ़ोन और लैपटॉप पर एक जैसी है। जो बदलता है वह है हर खाने में कौन-सा मॉडल जाता है, और यह दो संख्याओं से तय होता है: आपके पास कितनी मेमोरी है, और आप कौन-सा एक्सेलेरेटर खिला रहे हैं।
जो संख्या याद रखनी है वह पूरी लूप है, कोई एक मॉडल नहीं: स्पीच परसेप्शन (STT) + उत्तर जनरेशन (LLM) + स्पीच सिंथेसिस (TTS) सब उसी में समा जाते हैं — iPhone पर ~1.2 GB, Galaxy S23 पर ~1.5 GB, और असली चैट-दिमाग वाले Mac पर ~4 GB से कम।
पाइपलाइन ही पोर्टेबल हिस्सा है।
ऑर्केस्ट्रेशन speech-core में एक शुद्ध C++ स्टेट मशीन के रूप में रहता है, जो मॉडल-अज्ञेय है: चारों चरण इंटरफ़ेस हैं जिनमें आप कोई भी बैकएंड लगा सकते हैं — ऑन-डिवाइस ONNX, LiteRT, CoreML/MLX, या यहाँ तक कि क्लाउड API — इसलिए वही पाइपलाइन फ़ोन पर 270M टूल-कॉलर और Mac पर Gemma 4 दिमाग चलाती है।
एक लूप, चार चरण। वेक वर्ड, AEC और एन्हांस VAD-पूर्व वैकल्पिक चरण हैं; LLM की टूल कॉल ही उसे केवल जवाब नहीं, कार्य करने देती हैं।
ऑर्केस्ट्रेटर है VoicePipeline, speech-core में। यह टर्न डिटेक्शन, इंटरप्शन, बातचीत का इतिहास, टूल-कॉल लूप और स्पीच क्यू संभालता है — पर इसके अपने कोई मॉडल नहीं। हर चरण एक इंटरफ़ेस (VADInterface, STTInterface, LLMInterface, TTSInterface) के पीछे बदला जा सकता है, जिसे आप ONNX Runtime, LiteRT, CoreML/MLX (सहयोगी speech-swift के ज़रिए), या क्लाउड API से लागू करते हैं। हल्के मोड भी हैं — Echo (VAD → STT → TTS) और TranscribeOnly (VAD → STT → टेक्स्ट)।
NPU पहले, और पूरी लूप ~1.5 GB में समाती है।
फ़ोन पर बाधा मेमोरी, बैटरी और गर्मी है — कच्ची गणना शक्ति नहीं। सही लक्ष्य है न्यूरल प्रोसेसिंग यूनिट (NPU): iOS पर Apple का Neural Engine, Android पर NNAPI / Hexagon। यह क्वांटाइज़्ड ट्रांसफ़ॉर्मर को CPU या GPU की ऊर्जा के एक अंश में चलाता है और CPU को ऑडियो और UI के लिए खाली रखता है।
NPU क्यों, CPU या GPU क्यों नहीं? NPU एक निश्चित-कार्य डेटाफ़्लो इंजन है जो एक ही काम के लिए बना है — कम-परिशुद्धता वाला गुणा-जोड़ जिससे न्यूरल नेट बने होते हैं। यह वज़न को गणना इकाइयों के ठीक बगल में ऑन-चिप SRAM में रखता है, और उस इंस्ट्रक्शन फ़ेच/डिकोड और चौड़े सामान्य-उद्देश्य डेटा-पथ को छोड़ देता है जो CPU या GPU की अधिकांश ऊर्जा खा जाते हैं। डेटा हिलाना गणना करने से कहीं महँगा है, इसलिए दोनों को लोकल रखना ही फ़ायदा है: वही मैट्रिक्स गुणा कुछ ही वाट में चलता है — कोई थर्मल थ्रॉटलिंग नहीं, कोई बैटरी खपत नहीं, और CPU बाक़ी सब के लिए खाली।
इसलिए मोबाइल पाइपलाइन छोटे, क्वांटाइज़्ड, NPU-अनुकूल मॉडल हैं: Silero VAD, Parakeet-EOU 120M (अंतर्निहित एंड-ऑफ़-अटरेंस के साथ हल्का स्ट्रीमिंग STT), FunctionGemma 270M (टूल-कॉलिंग दिमाग), और आवाज़ के लिए Kokoro-82M या Supertonic-3। डिवाइस पर मापा गया:
| चरण · मॉडल | iPhone 16 Pro (CoreML / ANE) | Galaxy S23 (LiteRT / ONNX, CPU) |
|---|---|---|
| STT · Parakeet-EOU 120M | 0.04 RTF · 297 MB | 0.21 RTF · 232 MB |
| STT · Omnilingual 300M | 0.28 RTF · 495 MB | 0.15 RTF · 831 MB |
| TTS · Kokoro-82M | 0.08 RTF · 676 MB | 0.53 RTF · 640 MB |
| TTS · Supertonic-3 99M | 0.15 RTF · 956 MB | 0.34 RTF · 832 MB |
| LLM · FunctionGemma 270M | 128 tok/s · 236 MB | 118 tok/s · 611 MB |
RTF = वॉल-टाइम ÷ ऑडियो-सेकंड (कम = तेज़; <1.0 यानी रियल-टाइम से तेज़)। पीक मेमोरी हर मॉडल की अलग-अलग।
हर चरण रियल-टाइम पार करता है। एक लाइव एजेंट के लिए साथ लोड करने पर रेज़िडेंट वर्किंग सेट iPhone पर ~1.2 GB और Galaxy S23 पर ~1.5 GB है — अंतर लगभग पूरा LLM है: FunctionGemma ANE पर 236 MB बनाम S23 CPU पर 611 MB। iOS पहले से NPU पर चलता है (इसीलिए STT 0.04 RTF और LLM 128 tok/s); Android आज CPU पर रियल-टाइम है, NNAPI/Hexagon डेलीगेट अतिरिक्त लाभ हैं, अनिवार्य नहीं।
आज़माएँ: Examples/iOSEchoDemo iPhone पर Parakeet + Silero + Kokoro को पूरी एको लूप के रूप में चलाता है; Android पक्ष speech-android में है, वही पाइपलाइन लपेटता हुआ। (Examples/iOSBenchmark ऊपर के iPhone आँकड़ों के पीछे का उपकरण है।)
मशीन चलाने वाला असली LLM — फिर भी 4 GB से कम।
Mac पर बाधा ढीली पड़ती है: CPU और Metal GPU के बीच साझा यूनिफ़ाइड मेमोरी। वही चार चरण, बड़े मॉडल, और मुख्य रूप से 270M टूल-कॉलर की जगह एक असली चैट-दिमाग — और पूरी लूप फिर भी ~4 GB में समाती है।
LLM दिमाग है, और यहीं मॉडल का आकार वैकल्पिक नहीं रह जाता। परखने के बाद दो मॉडल ने जगह बनाई: मोबाइल पर FunctionGemma 270M (एक टूल कॉल देने के लिए काफ़ी, फ़ोन-साइड एजेंट को जितना चाहिए) और डेस्कटॉप पर Gemma 4 E2B/E4B (4-bit MLX) (असली मल्टी-टर्न बातचीत और तर्क जो टिकते हैं, फिर भी हल्के)। बीच का लुभावना विकल्प — 1B से कम का कॉम्पैक्ट चैट हेड — फ़ुटप्रिंट में मुफ़्त लगता है पर असली मल्टी-टर्न में डगमगाता है, इसलिए बाहर रहा। जो छलांग मायने रखती है वह 0.27B → 0.8B नहीं; वह है FunctionGemma की टूल-कॉल → Gemma 4 की बातचीत।
बाक़ी स्टैक भी ऊपर उठता है: डेस्कटॉप हल्के Parakeet-EOU को Parakeet-TDT (पूर्ण बहुभाषी) से बदलता है, और TTS हर जगह Supertonic-3 पर रहता है — तेज़, 44.1 kHz, स्थिर। भारी ज़ीरो-शॉट क्लोनिंग TTS मॉडल हम जानबूझकर छोड़ते हैं; क्लोनिंग हमेशा-चालू एजेंट में बैठने के लिए अभी पर्याप्त भरोसेमंद नहीं है।
| चरण | मोबाइल | डेस्कटॉप (Mac / MLX) |
|---|---|---|
| VAD | Silero v6.2.1 | Silero v6.2.1 |
| STT | Parakeet-EOU (streaming) | Parakeet-TDT (multilingual) |
| LLM | FunctionGemma 270M | Gemma 4 E2B/E4B |
| TTS | Kokoro-82M / Supertonic-3 | Supertonic-3 |
| Resident set | iPhone ~1.2 GB · S23 ~1.5 GB | ~4 GB |
वही डेस्कटॉप रास्ता Runner Agent देता है — एक नोटराइज़्ड macOS ऐप जो Mic → VAD → Parakeet-TDT → Gemma 4 → Supertonic TTS पूरी तरह लोकल चलाता है, 47 MB DMG जिसमें पूरी लूप Apple Silicon पर लगभग ~4 GB। और चूँकि दिमाग टूल कॉल देता है, Runner केवल जवाब नहीं देता — यह आवाज़ से मशीन चलाता है: ब्राउज़र खोलकर DOM ऑपरेशन चलाना, Telegram या WhatsApp खोलकर आई मैसेज पढ़ना और जवाब टाइप करना, ऐप लॉन्च और नियंत्रित करना — सब बोले गए आदेशों से, सब लोकल। यही असली वजह है कि डेस्कटॉप को 270M टूल-कॉलर नहीं, Gemma 4 चाहिए: मशीन पर कार्य करने के लिए असली तर्क चाहिए, बस खाने भरना नहीं।
एक पाइपलाइन, बजट के अनुसार।
VAD → STT → LLM → TTS हर जगह एक जैसा। असली बात हर चरण को डिवाइस के एक्सेलेरेटर और मेमोरी से मिलाना है।
बैटरी और गर्मी मॉडल चुनती है। ANE iOS को CPU-वार लगभग मुफ़्त बनाता है; Android आज CPU पर रियल-टाइम, NPU की गुंजाइश आगे।
पूरी लूप ~4 GB में समाती है, और वह बजट आवाज़ से मशीन चलाने वाला Gemma 4 तर्क और बहुभाषी Parakeet-TDT देता है।
ऑडियो और बातचीत की स्थिति कभी डिवाइस नहीं छोड़ती — परसेप्शन, तर्क और सिंथेसिस सब आपके सामने के मेटल पर चलते हैं।
