mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-31 19:16:29 +00:00
chore(voice): log wake-word lifecycle at INFO for diagnosability
The detector logged listen/detect/close at debug, invisible at the default level. Promote listen-start, phrase-detected, stream-closed, and the wake.start outcome (disabled / unavailable / listening) to INFO, and log wake.detected emission, so a non-triggering setup is diagnosable from gateway/gui.log without flipping global log levels.
This commit is contained in:
parent
8a4d58287e
commit
d2fab75ffb
2 changed files with 12 additions and 3 deletions
|
|
@ -356,13 +356,13 @@ class WakeWordDetector:
|
|||
logger.error("wake word: failed to open microphone: %s", e)
|
||||
return
|
||||
|
||||
logger.debug("wake word: listening (frame=%d)", frame_length)
|
||||
logger.info("wake word: listening (frame=%d, rate=%d)", frame_length, SAMPLE_RATE)
|
||||
try:
|
||||
while not self._stop.is_set():
|
||||
try:
|
||||
data, _overflow = stream.read(frame_length)
|
||||
except Exception as e:
|
||||
logger.debug("wake word: stream read error: %s", e)
|
||||
logger.warning("wake word: stream read error: %s", e)
|
||||
break
|
||||
frame = data[:, 0] if getattr(data, "ndim", 1) == 2 else data
|
||||
try:
|
||||
|
|
@ -374,17 +374,20 @@ class WakeWordDetector:
|
|||
now = time.monotonic()
|
||||
if now - self._last_fire >= self.cooldown:
|
||||
self._last_fire = now
|
||||
logger.info("wake word: phrase detected — firing callback")
|
||||
try:
|
||||
self.on_wake()
|
||||
except Exception as e:
|
||||
logger.warning("wake word callback failed: %s", e)
|
||||
else:
|
||||
logger.debug("wake word: detection within cooldown — ignored")
|
||||
finally:
|
||||
try:
|
||||
stream.stop()
|
||||
stream.close()
|
||||
except Exception:
|
||||
pass
|
||||
logger.debug("wake word: stream closed")
|
||||
logger.info("wake word: stream closed")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -17628,6 +17628,7 @@ def _wake_on_detect() -> None:
|
|||
phrase = wake_phrase()
|
||||
except Exception:
|
||||
phrase = ""
|
||||
logger.info("wake.detected: emitting to sid=%r", sid)
|
||||
_emit("wake.detected", sid, {"phrase": phrase})
|
||||
|
||||
|
||||
|
|
@ -17652,9 +17653,12 @@ def _(rid, params: dict) -> dict:
|
|||
|
||||
cfg = load_wake_word_config()
|
||||
if not wake_surface_enabled(surface, cfg):
|
||||
logger.info("wake.start(%s): disabled for surface (enabled=%s, surface=%s)",
|
||||
surface, cfg.get("enabled"), cfg.get("surface"))
|
||||
return _ok(rid, {"started": False, "reason": "disabled_for_surface"})
|
||||
reqs = check_wake_word_requirements(cfg)
|
||||
if not reqs["available"]:
|
||||
logger.warning("wake.start(%s): not available — %s", surface, reqs.get("hint"))
|
||||
return _ok(rid, {"started": False, "reason": reqs.get("hint") or "unavailable"})
|
||||
|
||||
with _wake_lock:
|
||||
|
|
@ -17662,9 +17666,11 @@ def _(rid, params: dict) -> dict:
|
|||
try:
|
||||
start_listening(_wake_on_detect, config=cfg)
|
||||
except Exception as e:
|
||||
logger.warning("wake.start(%s): failed to start listener: %s", surface, e)
|
||||
return _err(rid, 5026, str(e))
|
||||
with _wake_lock:
|
||||
_wake_active = True
|
||||
logger.info("wake.start(%s): listening for %r (%s)", surface, reqs["phrase"], reqs["provider"])
|
||||
return _ok(rid, {"started": True, "phrase": reqs["phrase"], "provider": reqs["provider"]})
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue