From 2989d062f585d5bd38786f479d418af7ac4f89f8 Mon Sep 17 00:00:00 2001 From: soulgod001 <3047964704@qq.com> Date: Fri, 22 Aug 2025 09:34:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=88=9D=E5=A7=8B=E5=8C=96=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=B7=BB=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/utils/modules_initialize.py | 118 ++++++++++++------ 1 file changed, 79 insertions(+), 39 deletions(-) diff --git a/main/xiaozhi-server/core/utils/modules_initialize.py b/main/xiaozhi-server/core/utils/modules_initialize.py index afe0410987..30d1edcea9 100644 --- a/main/xiaozhi-server/core/utils/modules_initialize.py +++ b/main/xiaozhi-server/core/utils/modules_initialize.py @@ -1,6 +1,9 @@ from typing import Dict, Any from config.logger import setup_logging from core.utils import tts, llm, intent, memory, vad, asr +from core.utils.cache.manager import cache_manager +from core.utils.cache.config import CacheType + TAG = __name__ logger = setup_logging() @@ -30,70 +33,107 @@ def initialize_modules( # 初始化TTS模块 if init_tts: select_tts_module = config["selected_module"]["TTS"] - modules["tts"] = initialize_tts(config) + cached_config=cache_manager.get(CacheType.CONFIG,key=f"config:{select_tts_module}",namespace="TTS") + if cached_config==config["TTS"][select_tts_module]: + modules["tts"] = cache_manager.get(CacheType.CONFIG,key=f"module:{select_tts_module}",namespace="TTS") + else: + modules["tts"] = initialize_tts(config) + cache_manager.set(CacheType.CONFIG,key=f"config:{select_tts_module}",value=config["TTS"][select_tts_module],namespace="TTS") + cache_manager.set(CacheType.CONFIG,key=f"module:{select_tts_module}",value=modules["tts"],namespace="TTS") logger.bind(tag=TAG).info(f"初始化组件: tts成功 {select_tts_module}") + # 初始化LLM模块 if init_llm: select_llm_module = config["selected_module"]["LLM"] - llm_type = ( - select_llm_module - if "type" not in config["LLM"][select_llm_module] - else config["LLM"][select_llm_module]["type"] - ) - modules["llm"] = llm.create_instance( - llm_type, - config["LLM"][select_llm_module], - ) + cached_config = cache_manager.get(CacheType.CONFIG, key=f"config:{select_llm_module}", namespace="LLM") + if cached_config == config["LLM"][select_llm_module]: + modules["llm"] = cache_manager.get(CacheType.CONFIG, key=f"module:{select_llm_module}", namespace="LLM") + else: + llm_type = ( + select_llm_module + if "type" not in config["LLM"][select_llm_module] + else config["LLM"][select_llm_module]["type"] + ) + modules["llm"] = llm.create_instance( + llm_type, + config["LLM"][select_llm_module], + ) + cache_manager.set(CacheType.CONFIG, key=f"config:{select_llm_module}", value=config["LLM"][select_llm_module], namespace="LLM") + cache_manager.set(CacheType.CONFIG, key=f"module:{select_llm_module}", value=modules["llm"], namespace="LLM") logger.bind(tag=TAG).info(f"初始化组件: llm成功 {select_llm_module}") # 初始化Intent模块 if init_intent: select_intent_module = config["selected_module"]["Intent"] - intent_type = ( - select_intent_module - if "type" not in config["Intent"][select_intent_module] - else config["Intent"][select_intent_module]["type"] - ) - modules["intent"] = intent.create_instance( - intent_type, - config["Intent"][select_intent_module], - ) + cached_config = cache_manager.get(CacheType.CONFIG, key=f"config:{select_intent_module}", namespace="Intent") + if cached_config == config["Intent"][select_intent_module]: + modules["intent"] = cache_manager.get(CacheType.CONFIG, key=f"module:{select_intent_module}", namespace="Intent") + else: + intent_type = ( + select_intent_module + if "type" not in config["Intent"][select_intent_module] + else config["Intent"][select_intent_module]["type"] + ) + modules["intent"] = intent.create_instance( + intent_type, + config["Intent"][select_intent_module], + ) + cache_manager.set(CacheType.CONFIG, key=f"config:{select_intent_module}", value=config["Intent"][select_intent_module], namespace="Intent") + cache_manager.set(CacheType.CONFIG, key=f"module:{select_intent_module}", value=modules["intent"], namespace="Intent") logger.bind(tag=TAG).info(f"初始化组件: intent成功 {select_intent_module}") # 初始化Memory模块 if init_memory: select_memory_module = config["selected_module"]["Memory"] - memory_type = ( - select_memory_module - if "type" not in config["Memory"][select_memory_module] - else config["Memory"][select_memory_module]["type"] - ) - modules["memory"] = memory.create_instance( - memory_type, - config["Memory"][select_memory_module], - config.get("summaryMemory", None), - ) + cached_config = cache_manager.get(CacheType.CONFIG, key=f"config:{select_memory_module}", namespace="Memory") + if cached_config == config["Memory"][select_memory_module]: + modules["memory"] = cache_manager.get(CacheType.CONFIG, key=f"module:{select_memory_module}", namespace="Memory") + else: + memory_type = ( + select_memory_module + if "type" not in config["Memory"][select_memory_module] + else config["Memory"][select_memory_module]["type"] + ) + modules["memory"] = memory.create_instance( + memory_type, + config["Memory"][select_memory_module], + config.get("summaryMemory", None), + ) + cache_manager.set(CacheType.CONFIG, key=f"config:{select_memory_module}", value=config["Memory"][select_memory_module], namespace="Memory") + cache_manager.set(CacheType.CONFIG, key=f"module:{select_memory_module}", value=modules["memory"], namespace="Memory") logger.bind(tag=TAG).info(f"初始化组件: memory成功 {select_memory_module}") # 初始化VAD模块 if init_vad: select_vad_module = config["selected_module"]["VAD"] - vad_type = ( - select_vad_module - if "type" not in config["VAD"][select_vad_module] - else config["VAD"][select_vad_module]["type"] - ) - modules["vad"] = vad.create_instance( - vad_type, - config["VAD"][select_vad_module], - ) + cached_config = cache_manager.get(CacheType.CONFIG, key=f"config:{select_vad_module}", namespace="VAD") + if cached_config == config["VAD"][select_vad_module]: + modules["vad"] = cache_manager.get(CacheType.CONFIG, key=f"module:{select_vad_module}", namespace="VAD") + else: + vad_type = ( + select_vad_module + if "type" not in config["VAD"][select_vad_module] + else config["VAD"][select_vad_module]["type"] + ) + modules["vad"] = vad.create_instance( + vad_type, + config["VAD"][select_vad_module], + ) + cache_manager.set(CacheType.CONFIG, key=f"config:{select_vad_module}", value=config["VAD"][select_vad_module], namespace="VAD") + cache_manager.set(CacheType.CONFIG, key=f"module:{select_vad_module}", value=modules["vad"], namespace="VAD") logger.bind(tag=TAG).info(f"初始化组件: vad成功 {select_vad_module}") # 初始化ASR模块 if init_asr: select_asr_module = config["selected_module"]["ASR"] - modules["asr"] = initialize_asr(config) + cached_config = cache_manager.get(CacheType.CONFIG, key=f"config:{select_asr_module}", namespace="ASR") + if cached_config == config["ASR"][select_asr_module]: + modules["asr"] = cache_manager.get(CacheType.CONFIG, key=f"module:{select_asr_module}", namespace="ASR") + else: + modules["asr"] = initialize_asr(config) + cache_manager.set(CacheType.CONFIG, key=f"config:{select_asr_module}", value=config["ASR"][select_asr_module], namespace="ASR") + cache_manager.set(CacheType.CONFIG, key=f"module:{select_asr_module}", value=modules["asr"], namespace="ASR") logger.bind(tag=TAG).info(f"初始化组件: asr成功 {select_asr_module}") return modules