From 5822ba3a899b6c78f5e83ff4fe19a58073edf4a4 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sat, 26 Jul 2025 21:34:29 +0800 Subject: [PATCH] 1 fix ruff --- scripts/log_viewer_optimized.py | 1 + src/chat/chat_loop/heartFC_chat.py | 69 +++++++++++++-------- src/plugins/built_in/core_actions/plugin.py | 3 +- 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/scripts/log_viewer_optimized.py b/scripts/log_viewer_optimized.py index 8f19fb6cf..d93f50166 100644 --- a/scripts/log_viewer_optimized.py +++ b/scripts/log_viewer_optimized.py @@ -1425,3 +1425,4 @@ def main(): if __name__ == "__main__": main() + diff --git a/src/chat/chat_loop/heartFC_chat.py b/src/chat/chat_loop/heartFC_chat.py index 4b6141a50..dafb1ecc0 100644 --- a/src/chat/chat_loop/heartFC_chat.py +++ b/src/chat/chat_loop/heartFC_chat.py @@ -261,6 +261,9 @@ class HeartFChatting: message_data = {} action_type = "no_action" reply_text = "" # 初始化reply_text变量,避免UnboundLocalError + gen_task = None # 初始化gen_task变量,避免UnboundLocalError + reply_to_str = "" # 初始化reply_to_str变量 + # 创建新的循环信息 cycle_timers, thinking_id = self.start_cycle() @@ -312,10 +315,9 @@ class HeartFChatting: "action_prompt": "", } target_message = message_data - # 如果normal,开始一个回复生成进程,先准备好回复(其实是和planer同时进行的) - gen_task = None - reply_to_str = "" - if self.loop_mode == ChatMode.NORMAL: + + # 如果normal模式且不跳过规划器,开始一个回复生成进程,先准备好回复(其实是和planer同时进行的) + if not skip_planner: reply_to_str = await self.build_reply_to_str(message_data) gen_task = asyncio.create_task(self._generate_response(message_data, available_actions, reply_to_str, "chat.replyer.normal")) @@ -341,35 +343,50 @@ class HeartFChatting: f"{self.log_prefix}{global_config.bot.nickname} 决定进行回复, 同时执行{action_type}动作" ) else: - if not gen_task.done(): - gen_task.cancel() - logger.debug(f"{self.log_prefix} 已取消预生成的回复任务") - logger.info( - f"{self.log_prefix}{global_config.bot.nickname} 原本想要回复,但选择执行{action_type},不发表回复" - ) - else: - content = " ".join([item[1] for item in gen_task.result() if item[0] == "text"]) - logger.debug(f"{self.log_prefix} 预生成的回复任务已完成") - logger.info( - f"{self.log_prefix}{global_config.bot.nickname} 原本想要回复:{content},但选择执行{action_type},不发表回复" - ) + # 只有在gen_task存在时才进行相关操作 + if gen_task is not None: + if not gen_task.done(): + gen_task.cancel() + logger.debug(f"{self.log_prefix} 已取消预生成的回复任务") + logger.info( + f"{self.log_prefix}{global_config.bot.nickname} 原本想要回复,但选择执行{action_type},不发表回复" + ) + else: + content = " ".join([item[1] for item in gen_task.result() if item[0] == "text"]) + logger.debug(f"{self.log_prefix} 预生成的回复任务已完成") + logger.info( + f"{self.log_prefix}{global_config.bot.nickname} 原本想要回复:{content},但选择执行{action_type},不发表回复" + ) action_message: Dict[str, Any] = message_data or target_message # type: ignore if action_type == "reply" or is_parallel: # 等待回复生成完毕 if self.loop_mode == ChatMode.NORMAL: - gather_timeout = global_config.chat.thinking_timeout - try: - response_set = await asyncio.wait_for(gen_task, timeout=gather_timeout) - except asyncio.TimeoutError: - logger.warning(f"{self.log_prefix} 回复生成超时>{global_config.chat.thinking_timeout}s,已跳过") - response_set = None + # 只有在gen_task存在时才等待 + if gen_task is not None: + gather_timeout = global_config.chat.thinking_timeout + try: + response_set = await asyncio.wait_for(gen_task, timeout=gather_timeout) + except asyncio.TimeoutError: + logger.warning(f"{self.log_prefix} 回复生成超时>{global_config.chat.thinking_timeout}s,已跳过") + response_set = None - # 模型炸了或超时,没有回复内容生成 - if not response_set: - logger.warning(f"{self.log_prefix}模型未生成回复内容") - return False + # 模型炸了或超时,没有回复内容生成 + if not response_set: + logger.warning(f"{self.log_prefix}模型未生成回复内容") + return False + else: + # 如果没有预生成任务,直接生成回复 + if not reply_to_str: + reply_to_str = await self.build_reply_to_str(action_message) + + with Timer("回复生成", cycle_timers): + response_set = await self._generate_response(action_message, available_actions, reply_to_str, "chat.replyer.normal") + + if not response_set: + logger.warning(f"{self.log_prefix}模型未生成回复内容") + return False else: logger.info(f"{self.log_prefix}{global_config.bot.nickname} 决定进行回复 (focus模式)") diff --git a/src/plugins/built_in/core_actions/plugin.py b/src/plugins/built_in/core_actions/plugin.py index 952be0a13..9323153d5 100644 --- a/src/plugins/built_in/core_actions/plugin.py +++ b/src/plugins/built_in/core_actions/plugin.py @@ -8,9 +8,8 @@ from typing import List, Tuple, Type # 导入新插件系统 -from src.plugin_system import BasePlugin, register_plugin, ComponentInfo, ActionActivationType +from src.plugin_system import BasePlugin, register_plugin, ComponentInfo from src.plugin_system.base.config_types import ConfigField -from src.config.config import global_config # 导入依赖的系统组件 from src.common.logger import get_logger