mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-27 17:43:55 +08:00
update:优化唤醒词响应时间,修复初始化函数异步bug (#482)
This commit is contained in:
@@ -9,7 +9,7 @@ import traceback
|
|||||||
import threading
|
import threading
|
||||||
import websockets
|
import websockets
|
||||||
from typing import Dict, Any
|
from typing import Dict, Any
|
||||||
import plugins_func.loadplugins
|
from plugins_func.loadplugins import auto_import_modules
|
||||||
from config.logger import setup_logging
|
from config.logger import setup_logging
|
||||||
from core.utils.dialogue import Message, Dialogue
|
from core.utils.dialogue import Message, Dialogue
|
||||||
from core.handle.textHandle import handleTextMessage
|
from core.handle.textHandle import handleTextMessage
|
||||||
@@ -25,6 +25,8 @@ from core.utils.auth_code_gen import AuthCodeGenerator
|
|||||||
|
|
||||||
TAG = __name__
|
TAG = __name__
|
||||||
|
|
||||||
|
auto_import_modules('plugins_func.functions')
|
||||||
|
|
||||||
|
|
||||||
class TTSException(RuntimeError):
|
class TTSException(RuntimeError):
|
||||||
pass
|
pass
|
||||||
@@ -109,11 +111,15 @@ class ConnectionHandler:
|
|||||||
|
|
||||||
# 进行认证
|
# 进行认证
|
||||||
await self.auth.authenticate(self.headers)
|
await self.auth.authenticate(self.headers)
|
||||||
|
|
||||||
device_id = self.headers.get("device-id", None)
|
device_id = self.headers.get("device-id", None)
|
||||||
self.memory.init_memory(device_id, self.llm)
|
|
||||||
self.intent.set_llm(self.llm)
|
|
||||||
|
|
||||||
|
# 认证通过,继续处理
|
||||||
|
self.websocket = ws
|
||||||
|
self.session_id = str(uuid.uuid4())
|
||||||
|
|
||||||
|
self.welcome_msg = self.config["xiaozhi"]
|
||||||
|
self.welcome_msg["session_id"] = self.session_id
|
||||||
|
await self.websocket.send(json.dumps(self.welcome_msg))
|
||||||
# Load private configuration if device_id is provided
|
# Load private configuration if device_id is provided
|
||||||
bUsePrivateConfig = self.config.get("use_private_config", False)
|
bUsePrivateConfig = self.config.get("use_private_config", False)
|
||||||
self.logger.bind(tag=TAG).info(f"bUsePrivateConfig: {bUsePrivateConfig}, device_id: {device_id}")
|
self.logger.bind(tag=TAG).info(f"bUsePrivateConfig: {bUsePrivateConfig}, device_id: {device_id}")
|
||||||
@@ -141,17 +147,8 @@ class ConnectionHandler:
|
|||||||
self.private_config = None
|
self.private_config = None
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# 认证通过,继续处理
|
|
||||||
self.websocket = ws
|
|
||||||
self.session_id = str(uuid.uuid4())
|
|
||||||
|
|
||||||
self.welcome_msg = self.config["xiaozhi"]
|
|
||||||
self.welcome_msg["session_id"] = self.session_id
|
|
||||||
await self.websocket.send(json.dumps(self.welcome_msg))
|
|
||||||
|
|
||||||
# 异步初始化
|
# 异步初始化
|
||||||
await self.loop.run_in_executor(None, self._initialize_components)
|
self.executor.submit(self._initialize_components)
|
||||||
|
|
||||||
# tts 消化线程
|
# tts 消化线程
|
||||||
tts_priority = threading.Thread(target=self._tts_priority_thread, daemon=True)
|
tts_priority = threading.Thread(target=self._tts_priority_thread, daemon=True)
|
||||||
tts_priority.start()
|
tts_priority.start()
|
||||||
@@ -187,16 +184,26 @@ class ConnectionHandler:
|
|||||||
await handleAudioMessage(self, message)
|
await handleAudioMessage(self, message)
|
||||||
|
|
||||||
def _initialize_components(self):
|
def _initialize_components(self):
|
||||||
|
"""加载插件"""
|
||||||
|
self.func_handler = FunctionHandler(self)
|
||||||
|
|
||||||
|
"""加载提示词"""
|
||||||
self.prompt = self.config["prompt"]
|
self.prompt = self.config["prompt"]
|
||||||
if self.private_config:
|
if self.private_config:
|
||||||
self.prompt = self.private_config.private_config.get("prompt", self.prompt)
|
self.prompt = self.private_config.private_config.get("prompt", self.prompt)
|
||||||
|
|
||||||
self.client_ip_info = get_ip_info(self.client_ip)
|
|
||||||
self.logger.bind(tag=TAG).info(f"Client ip info: {self.client_ip_info}")
|
|
||||||
self.prompt = self.prompt + f"\n我在:{self.client_ip_info}"
|
|
||||||
self.dialogue.put(Message(role="system", content=self.prompt))
|
self.dialogue.put(Message(role="system", content=self.prompt))
|
||||||
|
|
||||||
self.func_handler = FunctionHandler(self)
|
"""加载记忆"""
|
||||||
|
device_id = self.headers.get("device-id", None)
|
||||||
|
self.memory.init_memory(device_id, self.llm)
|
||||||
|
self.intent.set_llm(self.llm)
|
||||||
|
|
||||||
|
"""加载位置信息"""
|
||||||
|
self.client_ip_info = get_ip_info(self.client_ip)
|
||||||
|
if self.client_ip_info is not None and "city" in self.client_ip_info:
|
||||||
|
self.logger.bind(tag=TAG).info(f"Client ip info: {self.client_ip_info}")
|
||||||
|
self.prompt = self.prompt + f"\n我在:{self.client_ip_info}"
|
||||||
|
self.dialogue.update_system_message(self.prompt)
|
||||||
|
|
||||||
def change_system_prompt(self, prompt):
|
def change_system_prompt(self, prompt):
|
||||||
self.prompt = prompt
|
self.prompt = prompt
|
||||||
|
|||||||
@@ -23,5 +23,3 @@ def auto_import_modules(package_name):
|
|||||||
full_module_name = f"{package_name}.{module_name}"
|
full_module_name = f"{package_name}.{module_name}"
|
||||||
importlib.import_module(full_module_name)
|
importlib.import_module(full_module_name)
|
||||||
#logger.bind(tag=TAG).info(f"模块 '{full_module_name}' 已加载")
|
#logger.bind(tag=TAG).info(f"模块 '{full_module_name}' 已加载")
|
||||||
|
|
||||||
auto_import_modules('plugins_func.functions')
|
|
||||||
Reference in New Issue
Block a user