Fix storing of response - now deque both

This commit is contained in:
dimitrievgs 2026-05-03 19:17:03 +03:00
parent b30ca3cc14
commit a6053b3be6
3 changed files with 25 additions and 15 deletions

View File

@ -383,8 +383,8 @@ def get_voice_status():
# 2. Вызываем метод у экземпляра voice_inst, а не у модуля # 2. Вызываем метод у экземпляра voice_inst, а не у модуля
return jsonify({ return jsonify({
"transcription": voice_inst.get_context_by_limit(3000, order='reversed'), "transcription": voice_inst.get_context_by_limit(3000, order='reversed'),
"response1": voice_inst.responses["regular"], "response1": list(voice_inst.responses["regular"]),
"response2": voice_inst.responses["commands"][:VOICE_COMMANDS_RESPONSE_TO_STORE], "response2": list(voice_inst.responses["commands"]),
"is_running": voice_inst.is_running, "is_running": voice_inst.is_running,
"obsidian_settings_fetched": obsidian_settings_fetched "obsidian_settings_fetched": obsidian_settings_fetched
}) })

View File

@ -9,7 +9,7 @@ import time
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
from llm_client import get_llm from llm_client import get_llm
from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.messages import SystemMessage, HumanMessage
import os import uuid
DEFAULT_SUMMARIZATION_LLM_NAME = "gemini-2.0-flash-lite" # "mistral-small-latest" # "mistral-small-latest" #"gemini-2.0-flash-r" DEFAULT_SUMMARIZATION_LLM_NAME = "gemini-2.0-flash-lite" # "mistral-small-latest" # "mistral-small-latest" #"gemini-2.0-flash-r"
DEFAULT_VOICE_LLM_NAME = "gemini-2.0-flash-lite" # "gemini-3.0-flash-openrouter" DEFAULT_VOICE_LLM_NAME = "gemini-2.0-flash-lite" # "gemini-3.0-flash-openrouter"
@ -385,7 +385,13 @@ class TitleGenerator:
response = self.voice_llm.invoke(llm_messages) response = self.voice_llm.invoke(llm_messages)
import app.api as api import app.api as api
api.voice_inst.responses["regular"] = response # Записываем в Response 1 new_entry = {
"id": str(uuid.uuid4()),
"content": response
}
# Используем appendleft для автоматического управления размером deque
api.voice_inst.responses["regular"].appendleft(new_entry)
print(f"✅🎤 Регулярный анализ голосового ввода завершен.") print(f"✅🎤 Регулярный анализ голосового ввода завершен.")
except Exception as e: except Exception as e:
print(f"❌🎤 Ошибка регулярного анализа: {e}") print(f"❌🎤 Ошибка регулярного анализа: {e}")
@ -401,13 +407,13 @@ class TitleGenerator:
response = self.voice_llm.invoke(llm_messages) response = self.voice_llm.invoke(llm_messages)
import app.api as api import app.api as api
# Форматируем для вкладки Response 2 # Форматируем как Markdown для рендеринга на фронте
formatted_res = f"<b>Команда:</b> {text}<br><b>Ответ:</b> {response}" markdown_content = f"**Команда:** {text}\n\n**Ответ:** {response}"
api.voice_inst.responses["commands"].insert(0, formatted_res) new_entry = {
"id": str(uuid.uuid4()),
# Ограничиваем историю команд, чтобы не раздувать память "content": markdown_content
if len(api.voice_inst.responses["commands"]) > VOICE_COMMANDS_RESPONSE_TO_STORE: }
api.voice_inst.responses["commands"].pop(0) api.voice_inst.responses["commands"].appendleft(new_entry)
print(f"✅🎤 Голосовая команда обработана.") print(f"✅🎤 Голосовая команда обработана.")
except Exception as e: except Exception as e:

View File

@ -6,9 +6,10 @@ import time
import numpy as np import numpy as np
from vosk import Model, KaldiRecognizer from vosk import Model, KaldiRecognizer
import sounddevice as sd import sounddevice as sd
import uuid
from collections import deque from collections import deque
VOICE_COMMANDS_RESPONSE_TO_STORE = 15 VOICE_COMMANDS_RESPONSE_TO_STORE = 3
class VoiceService: class VoiceService:
def __init__(self, model_path, samplerate=48000): def __init__(self, model_path, samplerate=48000):
@ -20,7 +21,10 @@ class VoiceService:
self.history = [] self.history = []
self.history_lock = threading.Lock() self.history_lock = threading.Lock()
self.last_processed_timestamp = 0.0 self.last_processed_timestamp = 0.0
self.responses = {"regular": "", "commands": []} self.responses = {
"regular": deque(maxlen=VOICE_COMMANDS_RESPONSE_TO_STORE),
"commands": deque(maxlen=VOICE_COMMANDS_RESPONSE_TO_STORE)
}
self.lock = threading.Lock() self.lock = threading.Lock()
self._stop_event = threading.Event() self._stop_event = threading.Event()