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, а не у модуля
return jsonify({
"transcription": voice_inst.get_context_by_limit(3000, order='reversed'),
"response1": voice_inst.responses["regular"],
"response2": voice_inst.responses["commands"][:VOICE_COMMANDS_RESPONSE_TO_STORE],
"response1": list(voice_inst.responses["regular"]),
"response2": list(voice_inst.responses["commands"]),
"is_running": voice_inst.is_running,
"obsidian_settings_fetched": obsidian_settings_fetched
})

View File

@ -9,7 +9,7 @@ import time
from typing import Any, Dict, Optional
from llm_client import get_llm
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_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)
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"✅🎤 Регулярный анализ голосового ввода завершен.")
except Exception as e:
print(f"❌🎤 Ошибка регулярного анализа: {e}")
@ -401,14 +407,14 @@ class TitleGenerator:
response = self.voice_llm.invoke(llm_messages)
import app.api as api
# Форматируем для вкладки Response 2
formatted_res = f"<b>Команда:</b> {text}<br><b>Ответ:</b> {response}"
api.voice_inst.responses["commands"].insert(0, formatted_res)
# Ограничиваем историю команд, чтобы не раздувать память
if len(api.voice_inst.responses["commands"]) > VOICE_COMMANDS_RESPONSE_TO_STORE:
api.voice_inst.responses["commands"].pop(0)
# Форматируем как Markdown для рендеринга на фронте
markdown_content = f"**Команда:** {text}\n\n**Ответ:** {response}"
new_entry = {
"id": str(uuid.uuid4()),
"content": markdown_content
}
api.voice_inst.responses["commands"].appendleft(new_entry)
print(f"✅🎤 Голосовая команда обработана.")
except Exception as e:
print(f"❌🎤 Ошибка обработки команды: {e}")
print(f"❌🎤 Ошибка обработки команды: {e}")

View File

@ -6,9 +6,10 @@ import time
import numpy as np
from vosk import Model, KaldiRecognizer
import sounddevice as sd
import uuid
from collections import deque
VOICE_COMMANDS_RESPONSE_TO_STORE = 15
VOICE_COMMANDS_RESPONSE_TO_STORE = 3
class VoiceService:
def __init__(self, model_path, samplerate=48000):
@ -20,7 +21,10 @@ class VoiceService:
self.history = []
self.history_lock = threading.Lock()
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._stop_event = threading.Event()