feat: switch wake word to waltron

This commit is contained in:
2026-03-15 02:59:13 +03:00
parent 6c2702d5e3
commit e1a94c68db
11 changed files with 58 additions and 29 deletions

View File

@@ -13,7 +13,7 @@ import time
import pyaudio
import logging
from datetime import datetime, timedelta
from ..core.config import DEEPGRAM_API_KEY, SAMPLE_RATE
from ..core.config import DEEPGRAM_API_KEY, SAMPLE_RATE, WAKE_WORD_ALIASES
from deepgram import (
DeepgramClient,
DeepgramClientOptions,
@@ -50,13 +50,13 @@ logging.getLogger("deepgram").setLevel(logging.WARNING)
# Базовые пороги для остановки STT
INITIAL_SILENCE_TIMEOUT_SECONDS = 5.0
POST_SPEECH_SILENCE_TIMEOUT_SECONDS = 3.5
POST_SPEECH_SILENCE_TIMEOUT_SECONDS = 2.0
# Длинный защитный предел, чтобы не обрывать обычную длинную фразу.
# Фактическое завершение происходит примерно после 3.5 сек тишины после речи.
# Фактическое завершение происходит примерно после 2.0 сек тишины после речи.
MAX_ACTIVE_SPEECH_SECONDS = 300.0
_FAST_STOP_UTTERANCE_RE = re.compile(
r"^(?:(?:александр|алесандр|alexander|alexandr)\s+)?"
r"^(?:(?:" + "|".join(re.escape(alias) for alias in WAKE_WORD_ALIASES) + r")\s+)?"
r"(?:стоп|хватит|перестань|прекрати|замолчи|тихо|пауза)"
r"(?:\s+(?:пожалуйста|please))?$",
flags=re.IGNORECASE,

View File

@@ -6,7 +6,7 @@ Supports interruption via wake word detection using threading.
# Модуль синтеза речи (TTS - Text-to-Speech).
# Использует нейросеть Silero TTS для качественной русской речи.
# Также поддерживает прерывание речи, если пользователь скажет "Alexandr".
# Также поддерживает прерывание речи по wake word.
import re
import threading

View File

@@ -1,10 +1,10 @@
"""
Wake word detection module using Porcupine.
Listens for the "Alexandr" wake word.
Listens for the configured wake word.
"""
# Этот модуль отвечает за "уши" ассистента в режиме ожидания.
# Он использует библиотеку Porcupine для эффективного (мало CPU) обнаружения ключевой фразы "Alexandr".
# Он использует библиотеку Porcupine для эффективного (мало CPU) обнаружения ключевой фразы.
import pvporcupine
import pyaudio
@@ -14,6 +14,7 @@ from ..core.config import (
PORCUPINE_ACCESS_KEY,
PORCUPINE_KEYWORD_PATH,
PORCUPINE_SENSITIVITY,
WAKE_WORD,
)
from ..core.audio_manager import get_audio_manager
@@ -47,7 +48,7 @@ class WakeWordDetector:
self.pa = self._audio_manager.get_pyaudio()
self._open_stream()
print(
"🎤 Ожидание wake word 'Alexandr' "
f"🎤 Ожидание wake word '{WAKE_WORD}' "
f"(sens={PORCUPINE_SENSITIVITY:.2f}, mic_rate={self._capture_sample_rate})..."
)
@@ -133,7 +134,7 @@ class WakeWordDetector:
def wait_for_wakeword(self, timeout: float = None) -> bool:
"""
Блокирующая функция: ждет, пока не будет услышана фраза "Alexandr"
Блокирующая функция: ждет, пока не будет услышана wake word
или пока не истечет timeout.
Args: