Wake-word barge-in, Gitea auto-updater, hard_reset fix
This commit is contained in:
+37
-5
@@ -82,15 +82,26 @@ MIN_UTTERANCE_S = float(os.environ.get("VAD_MIN_UTTERANCE_SECONDS", "0.4"))
|
||||
COMMAND_TIMEOUT_SECONDS = int(os.environ.get("COMMAND_TIMEOUT_SECONDS", "30"))
|
||||
HEARTBEAT_INTERVAL_SECONDS = float(os.environ.get("HEARTBEAT_INTERVAL_SECONDS", "60"))
|
||||
|
||||
# ── barge-in (interrupt playback by talking over it) ────────────────────────
|
||||
# The mic stays live while the pet talks; sustained loud frames cut playback
|
||||
# short. The threshold is deliberately well above VAD_RMS_THRESHOLD because
|
||||
# the mic also hears the pet's own voice through the speakers — raise it
|
||||
# further (or set BARGE_IN=false) if playback keeps interrupting itself.
|
||||
# ── barge-in (interrupt playback while the pet is talking) ──────────────────
|
||||
# The mic stays live while the pet talks. BARGE_IN_MODE decides what counts
|
||||
# as an interruption:
|
||||
# wake — only the wake word cuts playback (default). Immune to coughs,
|
||||
# doors, and the TV, at the cost of ~a word of extra latency.
|
||||
# energy — any sustained noise above BARGE_IN_RMS_THRESHOLD does. Faster,
|
||||
# but interrupts on background noise. That threshold is well above
|
||||
# VAD_RMS_THRESHOLD because the mic also hears the pet's own voice
|
||||
# through the speakers — raise it further if playback keeps
|
||||
# interrupting itself.
|
||||
# Set BARGE_IN=false to make playback uninterruptible either way.
|
||||
|
||||
BARGE_IN = os.environ.get("BARGE_IN", "true").lower() in ("1", "true", "yes", "on")
|
||||
BARGE_IN_MODE = os.environ.get("BARGE_IN_MODE", "wake")
|
||||
BARGE_IN_RMS_THRESHOLD = int(os.environ.get("BARGE_IN_RMS_THRESHOLD", str(RMS_THRESHOLD * 4)))
|
||||
BARGE_IN_FRAMES = int(os.environ.get("BARGE_IN_FRAMES", "4")) # consecutive loud frames (80ms each)
|
||||
# Wake-mode sensitivity. Blank means "track the live WAKE_WORD_THRESHOLD from
|
||||
# the tray tuner"; set a number to make interrupting deliberately harder than
|
||||
# waking the pet from idle (useful if Bolt's own voice trips the model).
|
||||
BARGE_IN_WAKE_THRESHOLD = float(os.environ.get("BARGE_IN_WAKE_THRESHOLD") or 0) or None
|
||||
|
||||
# ── streaming TTS ───────────────────────────────────────────────────────────
|
||||
# ElevenLabs' /stream endpoint + chunked playback: the pet starts talking
|
||||
@@ -140,6 +151,27 @@ PUSH_TO_TALK_HOTKEY = os.environ.get("PUSH_TO_TALK_HOTKEY", "ctrl+alt+space")
|
||||
WAKE_NEAR_MISS_MARGIN = float(os.environ.get("WAKE_NEAR_MISS_MARGIN", "0.2"))
|
||||
WAKE_NEAR_MISS_LIMIT = int(os.environ.get("WAKE_NEAR_MISS_LIMIT", "40"))
|
||||
|
||||
# ── auto-update ─────────────────────────────────────────────────────────────
|
||||
# Watches the Gitea releases API for a tag newer than bolt_pet.__version__,
|
||||
# then `git checkout`s it in place and restarts (see updater.py). The install
|
||||
# has to be a git clone with a clean working tree — a dirty tree is skipped
|
||||
# rather than stashed, so local edits are never thrown away. Any failure
|
||||
# after checkout rolls back to the ref that was checked out before.
|
||||
|
||||
AUTO_UPDATE = os.environ.get("AUTO_UPDATE", "true").lower() in ("1", "true", "yes", "on")
|
||||
UPDATE_REPO_API = os.environ.get(
|
||||
"UPDATE_REPO_API",
|
||||
"https://git.themajesticnetwork.com/api/v1/repos/TheMajesticNetwork/Bolt-Pet",
|
||||
).rstrip("/")
|
||||
UPDATE_CHECK_INTERVAL_SECONDS = float(os.environ.get("UPDATE_CHECK_INTERVAL_SECONDS", "3600"))
|
||||
UPDATE_GIT_REMOTE = os.environ.get("UPDATE_GIT_REMOTE", "origin")
|
||||
# Only needed if the repo is private — releases on a public repo read fine
|
||||
# anonymously. A Gitea access token with read:repository.
|
||||
UPDATE_TOKEN = os.environ.get("UPDATE_TOKEN", "")
|
||||
# Reinstall requirements.txt when an update changes it. Off means a release
|
||||
# that adds a dependency will roll straight back on the import smoke test.
|
||||
UPDATE_INSTALL_DEPS = os.environ.get("UPDATE_INSTALL_DEPS", "true").lower() in ("1", "true", "yes", "on")
|
||||
|
||||
SAMPLE_RATE = 16000 # mic capture / STT rate
|
||||
FRAME_LEN = 1280 # 80ms @ 16kHz — matches bolt_desk.py's chunking
|
||||
|
||||
|
||||
Reference in New Issue
Block a user