From 756cc340dc7b440f2c7d2007138cc27bac3ca14c Mon Sep 17 00:00:00 2001 From: future Date: Mon, 16 Feb 2026 19:04:05 +0300 Subject: [PATCH] Keep dialogue active after wake word --- README.md | 1 + app/main.py | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 18a75c4..891ed05 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ ## Возможности - Активация по wake word `Alexandr` (Porcupine). +- Непрерывный follow-up режим после активации (без повторного wake word до команды `Стоп`/`Хватит`). - Распознавание речи через Deepgram (WebSocket, VAD, fast stop). - Озвучка через Silero TTS (RU + EN, с прерыванием по wake word). - AI-диалог через Perplexity API со streaming-ответом и контекстом. diff --git a/app/main.py b/app/main.py index 1800cf1..c4322ae 100644 --- a/app/main.py +++ b/app/main.py @@ -272,6 +272,9 @@ def main(): # (True = режим диалога, слушаем сразу. False = ждем "Alexandr") skip_wakeword = False + # После первой активации по wake word остаемся в диалоге до явной стоп-команды. + continuous_followup_mode = True + # Контекст уточнения "на какое время поставить ...". # Может быть: "timer", "alarm". pending_time_target = None @@ -335,7 +338,10 @@ def main(): continue # Продолжаем цикл else: # Режим диалога (Follow-up): ждем продолжения речи без "Alexandr" - print("👂 Слушаю продолжение диалога (5 сек)...") + if continuous_followup_mode: + print("👂 Непрерывный диалог: слушаю следующий вопрос...") + else: + print("👂 Слушаю продолжение диалога (5 сек)...") # Ждем начала речи 5 сек. Если начали говорить, слушаем до 7 сек. try: user_text = listen( @@ -352,15 +358,15 @@ def main(): skip_wakeword = False continue - if not user_text: + if not user_text and not continuous_followup_mode: # Пользователь промолчал — выходим из режима диалога, засыпаем. skip_wakeword = False continue # --- Шаг 2: Анализ распознанного текста --- if not user_text: - # Пустой ввод: без лишних ответов возвращаемся к ожиданию wake word. - skip_wakeword = False + # В непрерывном режиме не требуем повторный wake word после тишины. + skip_wakeword = continuous_followup_mode continue # Проверка на команду "Стоп" @@ -552,12 +558,12 @@ def main(): except Exception as init_error: print(f"Ошибка переинициализации STT: {init_error}") speak("Произошла ошибка при распознавании речи.") - skip_wakeword = False + skip_wakeword = continuous_followup_mode continue if not text_to_translate: speak("Я не расслышал текст для перевода.") - skip_wakeword = False + skip_wakeword = continuous_followup_mode continue # Выполняем перевод через AI