Update assistant features and docs
This commit is contained in:
@@ -10,6 +10,7 @@ from datetime import datetime, timedelta
|
||||
from ..core.config import BASE_DIR
|
||||
from ..audio.stt import listen
|
||||
from ..core.commands import is_stop_command
|
||||
from ..core.roman import replace_roman_numerals
|
||||
|
||||
# Morphological analysis for better recognition of number words.
|
||||
try:
|
||||
@@ -22,6 +23,7 @@ except Exception:
|
||||
# Звуковой файл сигнала (используем тот же, что и для будильника)
|
||||
ALARM_SOUND = BASE_DIR / "assets" / "sounds" / "Apex-1.mp3"
|
||||
TIMER_FILE = BASE_DIR / "data" / "timers.json"
|
||||
ASK_TIMER_TIME_PROMPT = "На какое время мне поставить таймер?"
|
||||
|
||||
# --- Number words parsing helpers (ru) ---
|
||||
_NUMBER_UNITS = {
|
||||
@@ -162,11 +164,13 @@ def _parse_number_lemmas(lemmas):
|
||||
|
||||
def _normalize_timer_text(text: str) -> str:
|
||||
# Split "полчаса/полминуты/полсекунды" into "пол часа" for easier parsing.
|
||||
return re.sub(
|
||||
text = re.sub(
|
||||
r"(?i)\bпол(?=(?:час|часа|минут|минуты|минуту|секунд|секунды|секунду|мин|сек)\b)",
|
||||
"пол ",
|
||||
text,
|
||||
)
|
||||
# Support commands like "таймер на X минут".
|
||||
return replace_roman_numerals(text)
|
||||
|
||||
|
||||
def _find_word_number_before_unit(tokens, unit_index):
|
||||
@@ -371,7 +375,7 @@ class TimerManager:
|
||||
try:
|
||||
# Цикл ожидания стоп-команды
|
||||
while True:
|
||||
text = listen(timeout_seconds=3.0, detection_timeout=3.0)
|
||||
text = listen(timeout_seconds=3.0, detection_timeout=3.0, fast_stop=True)
|
||||
if text:
|
||||
if is_stop_command(text, mode="lenient"):
|
||||
print(f"🛑 Таймер остановлен по команде: '{text}'")
|
||||
@@ -477,7 +481,14 @@ class TimerManager:
|
||||
self.add_timer(total_seconds, label)
|
||||
return f"Поставил таймер на {label}."
|
||||
|
||||
# Если сказали "таймер", но не нашли время
|
||||
# Если попросили поставить таймер, но не назвали время — задаем уточняющий вопрос.
|
||||
if re.search(r"(постав|установ|запусти|включи|засеки)", text) or text.strip() in {
|
||||
"таймер",
|
||||
"поставь таймер",
|
||||
}:
|
||||
return ASK_TIMER_TIME_PROMPT
|
||||
|
||||
# Если сказали "таймер", но не нашли время.
|
||||
return "Я не понял, на сколько поставить таймер. Скажите, например, 'таймер на 5 минут'."
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user