Conversation
Satellite.wakeup() already ignores detections while self._pipeline_active
is True ("Ignoring wake word - pipeline already active"), but the
underlying wake word models still run inference on every audio frame
during that window, including throughout TTS playback.
On hardware without working AEC, the device's own TTS output reliably
scores as a near-certain match for its own wake word (residual echo
picked up by the mic) - observed probabilities of 0.9+ throughout entire
responses in real-world testing. wakeup() catches this correctly today,
but only after the fact, and there's a narrow window right after
REFRACTORY_SECONDS elapses (mid-response, before _pipeline_active clears)
where a fresh detection depends entirely on that guard.
This skips wake word scoring for the primary wake words at the source
instead, matching the intent already documented in satellite.py:
"When TTS is playing, keep _pipeline_active = True to block false wake
word detections from speaker audio feedback." Stop word detection is
unaffected (separate code path, needed while a response is in progress).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Satellite.wakeup()already ignores wake word detections whileself._pipeline_activeisTrue(logged as "Ignoring wake word - pipeline already active"), but the wake word models keep running inference on every audio frame during that window regardless, including throughout TTS playback.wakeup()correctly catches this today, but only after the fact. There's also a narrow window right afterREFRACTORY_SECONDSelapses mid-response (before_pipeline_activeclears) where a fresh detection depends entirely on that one guard.satellite.py:Test plan
./script/lint_black,./script/lint_isort,./script/lint_flake8clean on the changed file (couldn't run the full./script/testssuite locally - missinglibmpv-devsystem dependency in my sandbox, not something I could install there)🤖 Filed with the help of Claude Code, reviewed and approved by me before submission.