वॉइस ओवरले जीवनचक्र (macOS)
Audience: macOS app contributors. Goal: keep the voice overlay predictable when wake-word and push-to-talk overlap.वर्तमान आशय
- If the overlay is already visible from wake-word and the user presses the hotkey, the hotkey session adopts the existing text instead of resetting it. The overlay stays up while the hotkey is held. When the user releases: send if there is trimmed text, otherwise dismiss.
- केवल वेक‑वर्ड होने पर मौन पर स्वतः भेजा जाता है; पुश‑टू‑टॉक में छोड़ते ही भेजा जाता है।
कार्यान्वित (9 दिसंबर, 2025)
- Overlay sessions now carry a token per capture (wake-word or push-to-talk). Partial/final/send/dismiss/level updates are dropped when the token doesn’t match, avoiding stale callbacks.
- Push-to-talk adopts any visible overlay text as a prefix (so pressing the hotkey while the wake overlay is up keeps the text and appends new speech). यह अंतिम transcript के लिए 1.5s तक प्रतीक्षा करता है, उसके बाद मौजूदा text पर fallback कर जाता है।
- चाइम/ओवरले लॉगिंग
infoपर श्रेणियोंvoicewake.overlay,voicewake.ptt, औरvoicewake.chimeमें उत्सर्जित होती है (सत्र प्रारंभ, आंशिक, अंतिम, भेजें, बंद करें, चाइम कारण)।
अगले चरण
- VoiceSessionCoordinator (actor)
- एक समय में ठीक एक
VoiceSessionका स्वामित्व। - API (टोकन‑आधारित):
beginWakeCapture,beginPushToTalk,updatePartial,endCapture,cancel,applyCooldown। - बासी टोकन वाले कॉलबैक को छोड़ता है (पुराने रिकग्नाइज़र द्वारा ओवरले को फिर से खोलने से रोकता है)।
- एक समय में ठीक एक
- VoiceSession (मॉडल)
- फ़ील्ड्स:
token,source(wakeWord|pushToTalk), कमिटेड/वोलेटाइल पाठ, चाइम फ़्लैग्स, टाइमर्स (ऑटो‑सेंड, आइडल),overlayMode(display|editing|sending), कूलडाउन डेडलाइन।
- फ़ील्ड्स:
- ओवरले बाइंडिंग
VoiceSessionPublisher(ObservableObject) सक्रिय सत्र को SwiftUI में मिरर करता है।VoiceWakeOverlayViewकेवल पब्लिशर के माध्यम से रेंडर करता है; यह कभी भी ग्लोबल सिंगलटन को सीधे म्यूटेट नहीं करता।- ओवरले उपयोगकर्ता क्रियाएँ (
sendNow,dismiss,edit) सत्र टोकन के साथ कोऑर्डिनेटर में वापस कॉल करती हैं।
- एकीकृत भेजने का पथ
endCaptureपर: यदि ट्रिम किया हुआ पाठ खाली है → बंद करें; अन्यथाperformSend(session:)(एक बार सेंड चाइम बजाता है, फ़ॉरवर्ड करता है, बंद करता है)।- पुश‑टू‑टॉक: कोई देरी नहीं; वेक‑वर्ड: ऑटो‑सेंड के लिए वैकल्पिक देरी।
- पुश‑टू‑टॉक समाप्त होने के बाद वेक रनटाइम पर एक छोटा कूलडाउन लागू करें ताकि वेक‑वर्ड तुरंत फिर से ट्रिगर न हो।
- लॉगिंग
- कोऑर्डिनेटर
.infoलॉग्स को सबसिस्टमbot.moltमें, श्रेणियोंvoicewake.overlayऔरvoicewake.chimeके अंतर्गत उत्सर्जित करता है। - प्रमुख घटनाएँ:
session_started,adopted_by_push_to_talk,partial,finalized,send,dismiss,cancel,cooldown।
- कोऑर्डिनेटर
डिबगिंग चेकलिस्ट
-
चिपचिपे ओवरले को पुनः उत्पन्न करते समय स्ट्रीम लॉग्स:
- केवल एक सक्रिय सत्र टोकन की पुष्टि करें; बासी कॉलबैक को कोऑर्डिनेटर द्वारा छोड़ा जाना चाहिए।
-
सुनिश्चित करें कि पुश‑टू‑टॉक रिलीज़ हमेशा सक्रिय टोकन के साथ
endCaptureको कॉल करती है; यदि पाठ खाली है, तो बिना चाइम या सेंड केdismissकी अपेक्षा करें।
माइग्रेशन चरण (सुझावित)
VoiceSessionCoordinator,VoiceSession, औरVoiceSessionPublisherजोड़ें।VoiceWakeRuntimeको रिफ़ैक्टर करें ताकिVoiceWakeOverlayControllerको सीधे छूने के बजाय सत्र बनाए/अपडेट/समाप्त किए जाएँ।VoicePushToTalkको रिफ़ैक्टर करें ताकि मौजूदा सत्रों को अपनाया जा सके और रिलीज़ परendCaptureको कॉल किया जा सके; रनटाइम कूलडाउन लागू करें।VoiceWakeOverlayControllerको पब्लिशर से वायर करें; रनटाइम/PTT से सीधे कॉल हटाएँ।- सत्र अपनाने, कूलडाउन, और खाली‑पाठ डिसमिसल के लिए एकीकरण परीक्षण जोड़ें।