move:移动action的目录
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode
|
from src.chat.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode
|
||||||
from typing import Tuple, List
|
from typing import Tuple, List
|
||||||
from src.chat.heart_flow.observation.observation import Observation
|
from src.chat.heart_flow.observation.observation import Observation
|
||||||
from src.chat.focus_chat.replyer.default_replyer import DefaultReplyer
|
from src.chat.focus_chat.replyer.default_replyer import DefaultReplyer
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import traceback
|
import traceback
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.actions.base_action import BaseAction, register_action, ChatMode
|
from src.chat.actions.base_action import BaseAction, register_action, ChatMode
|
||||||
from typing import Tuple, List
|
from typing import Tuple, List
|
||||||
from src.chat.heart_flow.observation.observation import Observation
|
from src.chat.heart_flow.observation.observation import Observation
|
||||||
from src.chat.message_receive.chat_stream import ChatStream
|
from src.chat.message_receive.chat_stream import ChatStream
|
||||||
@@ -2,7 +2,7 @@ import asyncio
|
|||||||
import traceback
|
import traceback
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.utils.timer_calculator import Timer
|
from src.chat.utils.timer_calculator import Timer
|
||||||
from src.chat.focus_chat.planners.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode
|
from src.chat.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode
|
||||||
from typing import Tuple, List
|
from typing import Tuple, List
|
||||||
from src.chat.heart_flow.observation.observation import Observation
|
from src.chat.heart_flow.observation.observation import Observation
|
||||||
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
|
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode
|
from src.chat.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode
|
||||||
from typing import Tuple, List
|
from typing import Tuple, List
|
||||||
from src.chat.heart_flow.observation.observation import Observation
|
from src.chat.heart_flow.observation.observation import Observation
|
||||||
from src.chat.focus_chat.replyer.default_replyer import DefaultReplyer
|
from src.chat.focus_chat.replyer.default_replyer import DefaultReplyer
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import traceback
|
import traceback
|
||||||
from typing import Tuple, Dict, List, Any, Optional, Union, Type
|
from typing import Tuple, Dict, List, Any, Optional, Union, Type
|
||||||
from src.chat.focus_chat.planners.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode # noqa F401
|
from src.chat.actions.base_action import BaseAction, register_action, ActionActivationType, ChatMode # noqa F401
|
||||||
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
|
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
|
||||||
from src.chat.focus_chat.hfc_utils import create_empty_anchor_message
|
from src.chat.focus_chat.hfc_utils import create_empty_anchor_message
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from typing import Dict, List, Optional, Type, Any
|
from typing import Dict, List, Optional, Type, Any
|
||||||
from src.chat.focus_chat.planners.actions.base_action import BaseAction, _ACTION_REGISTRY
|
from src.chat.actions.base_action import BaseAction, _ACTION_REGISTRY
|
||||||
from src.chat.heart_flow.observation.observation import Observation
|
from src.chat.heart_flow.observation.observation import Observation
|
||||||
from src.chat.focus_chat.replyer.default_replyer import DefaultReplyer
|
from src.chat.focus_chat.replyer.default_replyer import DefaultReplyer
|
||||||
from src.chat.focus_chat.expressors.default_expressor import DefaultExpressor
|
from src.chat.focus_chat.expressors.default_expressor import DefaultExpressor
|
||||||
@@ -9,8 +9,8 @@ import importlib
|
|||||||
import pkgutil
|
import pkgutil
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# 导入动作类,确保装饰器被执行
|
# 不再需要导入动作类,因为已经在main.py中导入
|
||||||
import src.chat.focus_chat.planners.actions # noqa
|
# import src.chat.actions.default_actions # noqa
|
||||||
|
|
||||||
logger = get_logger("action_manager")
|
logger = get_logger("action_manager")
|
||||||
|
|
||||||
@@ -114,42 +114,13 @@ class ActionManager:
|
|||||||
def _load_plugin_actions(self) -> None:
|
def _load_plugin_actions(self) -> None:
|
||||||
"""
|
"""
|
||||||
加载所有插件目录中的动作
|
加载所有插件目录中的动作
|
||||||
|
|
||||||
|
注意:插件动作的实际导入已经在main.py中完成,这里只需要从_ACTION_REGISTRY获取
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 检查插件目录是否存在
|
# 插件动作已在main.py中加载,这里只需要从_ACTION_REGISTRY获取
|
||||||
plugin_path = "src.plugins"
|
|
||||||
plugin_dir = plugin_path.replace(".", os.path.sep)
|
|
||||||
if not os.path.exists(plugin_dir):
|
|
||||||
logger.info(f"插件目录 {plugin_dir} 不存在,跳过插件动作加载")
|
|
||||||
return
|
|
||||||
|
|
||||||
# 导入插件包
|
|
||||||
try:
|
|
||||||
plugins_package = importlib.import_module(plugin_path)
|
|
||||||
except ImportError as e:
|
|
||||||
logger.error(f"导入插件包失败: {e}")
|
|
||||||
return
|
|
||||||
|
|
||||||
# 遍历插件包中的所有子包
|
|
||||||
for _, plugin_name, is_pkg in pkgutil.iter_modules(
|
|
||||||
plugins_package.__path__, plugins_package.__name__ + "."
|
|
||||||
):
|
|
||||||
if not is_pkg:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 检查插件是否有actions子包
|
|
||||||
plugin_actions_path = f"{plugin_name}.actions"
|
|
||||||
try:
|
|
||||||
# 尝试导入插件的actions包
|
|
||||||
importlib.import_module(plugin_actions_path)
|
|
||||||
logger.info(f"成功加载插件动作模块: {plugin_actions_path}")
|
|
||||||
except ImportError as e:
|
|
||||||
logger.debug(f"插件 {plugin_name} 没有actions子包或导入失败: {e}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 再次从_ACTION_REGISTRY获取所有动作(包括刚刚从插件加载的)
|
|
||||||
self._load_registered_actions()
|
self._load_registered_actions()
|
||||||
|
logger.info(f"从注册表加载插件动作成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"加载插件动作失败: {e}")
|
logger.error(f"加载插件动作失败: {e}")
|
||||||
|
|
||||||
@@ -251,7 +222,7 @@ class ActionManager:
|
|||||||
else:
|
else:
|
||||||
logger.debug(f"动作 {action_name} 在模式 {mode} 下不可用 (mode_enable: {action_mode})")
|
logger.debug(f"动作 {action_name} 在模式 {mode} 下不可用 (mode_enable: {action_mode})")
|
||||||
|
|
||||||
logger.info(f"模式 {mode} 下可用动作: {list(filtered_actions.keys())}")
|
logger.debug(f"模式 {mode} 下可用动作: {list(filtered_actions.keys())}")
|
||||||
return filtered_actions
|
return filtered_actions
|
||||||
|
|
||||||
def add_action_to_using(self, action_name: str) -> bool:
|
def add_action_to_using(self, action_name: str) -> bool:
|
||||||
@@ -291,7 +262,7 @@ class ActionManager:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
del self._using_actions[action_name]
|
del self._using_actions[action_name]
|
||||||
logger.info(f"已从使用集中移除动作 {action_name}")
|
logger.debug(f"已从使用集中移除动作 {action_name}")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def add_action(self, action_name: str, description: str, parameters: Dict = None, require: List = None) -> bool:
|
def add_action(self, action_name: str, description: str, parameters: Dict = None, require: List = None) -> bool:
|
||||||
@@ -358,7 +329,7 @@ class ActionManager:
|
|||||||
for action_name in system_core_actions:
|
for action_name in system_core_actions:
|
||||||
if action_name in self._registered_actions and action_name not in self._using_actions:
|
if action_name in self._registered_actions and action_name not in self._using_actions:
|
||||||
self._using_actions[action_name] = self._registered_actions[action_name]
|
self._using_actions[action_name] = self._registered_actions[action_name]
|
||||||
logger.info(f"添加系统核心动作到使用集: {action_name}")
|
logger.debug(f"添加系统核心动作到使用集: {action_name}")
|
||||||
|
|
||||||
def add_system_action_if_needed(self, action_name: str) -> bool:
|
def add_system_action_if_needed(self, action_name: str) -> bool:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from src.chat.heart_flow.observation.chatting_observation import ChattingObserva
|
|||||||
from src.chat.message_receive.chat_stream import chat_manager
|
from src.chat.message_receive.chat_stream import chat_manager
|
||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
from src.llm_models.utils_model import LLMRequest
|
from src.llm_models.utils_model import LLMRequest
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ActionActivationType, ChatMode
|
from src.chat.actions.base_action import ActionActivationType, ChatMode
|
||||||
import random
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
import hashlib
|
import hashlib
|
||||||
@@ -560,9 +560,9 @@ class ActionModifier:
|
|||||||
reply_sequence.append(action_type == "reply")
|
reply_sequence.append(action_type == "reply")
|
||||||
|
|
||||||
# 检查no_reply比例
|
# 检查no_reply比例
|
||||||
if len(recent_cycles) >= (5 * global_config.chat.exit_focus_threshold) and (
|
if len(recent_cycles) >= (4 * global_config.chat.exit_focus_threshold) and (
|
||||||
no_reply_count / len(recent_cycles)
|
no_reply_count / len(recent_cycles)
|
||||||
) >= (0.8 * global_config.chat.exit_focus_threshold):
|
) >= (0.7 * global_config.chat.exit_focus_threshold):
|
||||||
if global_config.chat.chat_mode == "auto":
|
if global_config.chat.chat_mode == "auto":
|
||||||
result["add"].append("exit_focus_chat")
|
result["add"].append("exit_focus_chat")
|
||||||
result["remove"].append("no_reply")
|
result["remove"].append("no_reply")
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ from src.common.logger_manager import get_logger
|
|||||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||||
from src.individuality.individuality import individuality
|
from src.individuality.individuality import individuality
|
||||||
from src.chat.focus_chat.planners.action_manager import ActionManager
|
from src.chat.focus_chat.planners.action_manager import ActionManager
|
||||||
from src.chat.focus_chat.planners.modify_actions import ActionModifier
|
from src.chat.actions.base_action import ChatMode
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ChatMode
|
|
||||||
from json_repair import repair_json
|
from json_repair import repair_json
|
||||||
from src.chat.focus_chat.planners.base_planner import BasePlanner
|
from src.chat.focus_chat.planners.base_planner import BasePlanner
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|||||||
@@ -139,6 +139,8 @@ class DefaultReplyer:
|
|||||||
# 处理文本部分
|
# 处理文本部分
|
||||||
# text_part = action_data.get("text", [])
|
# text_part = action_data.get("text", [])
|
||||||
# if text_part:
|
# if text_part:
|
||||||
|
sent_msg_list = []
|
||||||
|
|
||||||
with Timer("生成回复", cycle_timers):
|
with Timer("生成回复", cycle_timers):
|
||||||
# 可以保留原有的文本处理逻辑或进行适当调整
|
# 可以保留原有的文本处理逻辑或进行适当调整
|
||||||
reply = await self.reply(
|
reply = await self.reply(
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ class NormalChat:
|
|||||||
logger.warning(f"[{self.stream_name}] 没有设置切换到focus聊天模式的回调函数,无法执行切换")
|
logger.warning(f"[{self.stream_name}] 没有设置切换到focus聊天模式的回调函数,无法执行切换")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
# await self._check_switch_to_focus()
|
await self._check_switch_to_focus()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
with Timer("处理表情包", timing_results):
|
with Timer("处理表情包", timing_results):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from typing import List, Any, Dict
|
from typing import List, Any, Dict
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.action_manager import ActionManager
|
from src.chat.focus_chat.planners.action_manager import ActionManager
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ActionActivationType, ChatMode
|
from src.chat.actions.base_action import ActionActivationType, ChatMode
|
||||||
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
import random
|
import random
|
||||||
@@ -204,7 +204,7 @@ class NormalChatActionModifier:
|
|||||||
should_activate = random.random() < probability
|
should_activate = random.random() < probability
|
||||||
if should_activate:
|
if should_activate:
|
||||||
activated_actions[action_name] = action_info
|
activated_actions[action_name] = action_info
|
||||||
logger.info(f"{self.log_prefix}激活动作: {action_name},原因: RANDOM类型触发(概率{probability})")
|
logger.debug(f"{self.log_prefix}激活动作: {action_name},原因: RANDOM类型触发(概率{probability})")
|
||||||
else:
|
else:
|
||||||
logger.debug(f"{self.log_prefix}未激活动作: {action_name},原因: RANDOM类型未触发(概率{probability})")
|
logger.debug(f"{self.log_prefix}未激活动作: {action_name},原因: RANDOM类型未触发(概率{probability})")
|
||||||
|
|
||||||
@@ -219,10 +219,10 @@ class NormalChatActionModifier:
|
|||||||
if should_activate:
|
if should_activate:
|
||||||
activated_actions[action_name] = action_info
|
activated_actions[action_name] = action_info
|
||||||
keywords = action_info.get("activation_keywords", [])
|
keywords = action_info.get("activation_keywords", [])
|
||||||
logger.info(f"{self.log_prefix}激活动作: {action_name},原因: KEYWORD类型匹配关键词({keywords})")
|
logger.debug(f"{self.log_prefix}激活动作: {action_name},原因: KEYWORD类型匹配关键词({keywords})")
|
||||||
else:
|
else:
|
||||||
keywords = action_info.get("activation_keywords", [])
|
keywords = action_info.get("activation_keywords", [])
|
||||||
logger.info(f"{self.log_prefix}未激活动作: {action_name},原因: KEYWORD类型未匹配关键词({keywords})")
|
logger.debug(f"{self.log_prefix}未激活动作: {action_name},原因: KEYWORD类型未匹配关键词({keywords})")
|
||||||
# print(f"keywords: {keywords}")
|
# print(f"keywords: {keywords}")
|
||||||
# print(f"chat_content: {chat_content}")
|
# print(f"chat_content: {chat_content}")
|
||||||
|
|
||||||
@@ -274,10 +274,10 @@ class NormalChatActionModifier:
|
|||||||
# print(f"activation_keywords: {activation_keywords}")
|
# print(f"activation_keywords: {activation_keywords}")
|
||||||
|
|
||||||
if matched_keywords:
|
if matched_keywords:
|
||||||
logger.info(f"{self.log_prefix}动作 {action_name} 匹配到关键词: {matched_keywords}")
|
logger.debug(f"{self.log_prefix}动作 {action_name} 匹配到关键词: {matched_keywords}")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
logger.info(f"{self.log_prefix}动作 {action_name} 未匹配到任何关键词: {activation_keywords}")
|
logger.debug(f"{self.log_prefix}动作 {action_name} 未匹配到任何关键词: {activation_keywords}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_available_actions_count(self) -> int:
|
def get_available_actions_count(self) -> int:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from src.common.logger_manager import get_logger
|
|||||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||||
from src.individuality.individuality import individuality
|
from src.individuality.individuality import individuality
|
||||||
from src.chat.focus_chat.planners.action_manager import ActionManager
|
from src.chat.focus_chat.planners.action_manager import ActionManager
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ChatMode
|
from src.chat.actions.base_action import ChatMode
|
||||||
from src.chat.message_receive.message import MessageThinking
|
from src.chat.message_receive.message import MessageThinking
|
||||||
from json_repair import repair_json
|
from json_repair import repair_json
|
||||||
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||||
@@ -26,6 +26,11 @@ def init_prompt():
|
|||||||
{self_info_block}
|
{self_info_block}
|
||||||
请记住你的性格,身份和特点。
|
请记住你的性格,身份和特点。
|
||||||
|
|
||||||
|
你是群内的一员,你现在正在参与群内的闲聊,以下是群内的聊天内容:
|
||||||
|
{chat_context}
|
||||||
|
|
||||||
|
基于以上聊天上下文和用户的最新消息,选择最合适的action。
|
||||||
|
|
||||||
注意,除了下面动作选项之外,你在聊天中不能做其他任何事情,这是你能力的边界,现在请你选择合适的action:
|
注意,除了下面动作选项之外,你在聊天中不能做其他任何事情,这是你能力的边界,现在请你选择合适的action:
|
||||||
|
|
||||||
{action_options_text}
|
{action_options_text}
|
||||||
@@ -38,11 +43,6 @@ def init_prompt():
|
|||||||
你必须从上面列出的可用action中选择一个,并说明原因。
|
你必须从上面列出的可用action中选择一个,并说明原因。
|
||||||
{moderation_prompt}
|
{moderation_prompt}
|
||||||
|
|
||||||
你是群内的一员,你现在正在参与群内的闲聊,以下是群内的聊天内容:
|
|
||||||
{chat_context}
|
|
||||||
|
|
||||||
基于以上聊天上下文和用户的最新消息,选择最合适的action。
|
|
||||||
|
|
||||||
请以动作的输出要求,以严格的 JSON 格式输出,且仅包含 JSON 内容。不要有任何其他文字或解释:
|
请以动作的输出要求,以严格的 JSON 格式输出,且仅包含 JSON 内容。不要有任何其他文字或解释:
|
||||||
""",
|
""",
|
||||||
"normal_chat_planner_prompt",
|
"normal_chat_planner_prompt",
|
||||||
|
|||||||
78
src/main.py
78
src/main.py
@@ -20,6 +20,13 @@ from .common.server import global_server, Server
|
|||||||
from rich.traceback import install
|
from rich.traceback import install
|
||||||
from .chat.focus_chat.expressors.exprssion_learner import expression_learner
|
from .chat.focus_chat.expressors.exprssion_learner import expression_learner
|
||||||
from .api.main import start_api_server
|
from .api.main import start_api_server
|
||||||
|
# 导入actions模块,确保装饰器被执行
|
||||||
|
import src.chat.actions.default_actions # noqa
|
||||||
|
|
||||||
|
# 加载插件actions
|
||||||
|
import importlib
|
||||||
|
import pkgutil
|
||||||
|
import os
|
||||||
|
|
||||||
install(extra_lines=3)
|
install(extra_lines=3)
|
||||||
|
|
||||||
@@ -62,6 +69,11 @@ class MainSystem:
|
|||||||
# 启动API服务器
|
# 启动API服务器
|
||||||
start_api_server()
|
start_api_server()
|
||||||
logger.success("API服务器启动成功")
|
logger.success("API服务器启动成功")
|
||||||
|
|
||||||
|
# 加载所有actions,包括默认的和插件的
|
||||||
|
self._load_all_actions()
|
||||||
|
logger.success("动作系统加载成功")
|
||||||
|
|
||||||
# 初始化表情管理器
|
# 初始化表情管理器
|
||||||
emoji_manager.initialize()
|
emoji_manager.initialize()
|
||||||
logger.success("表情包管理器初始化成功")
|
logger.success("表情包管理器初始化成功")
|
||||||
@@ -109,6 +121,72 @@ class MainSystem:
|
|||||||
logger.error(f"启动大脑和外部世界失败: {e}")
|
logger.error(f"启动大脑和外部世界失败: {e}")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
def _load_all_actions(self):
|
||||||
|
"""加载所有actions,包括默认的和插件的"""
|
||||||
|
try:
|
||||||
|
# 导入默认actions以确保装饰器被执行
|
||||||
|
|
||||||
|
# 检查插件目录是否存在
|
||||||
|
plugin_path = "src.plugins"
|
||||||
|
plugin_dir = os.path.join("src", "plugins")
|
||||||
|
if not os.path.exists(plugin_dir):
|
||||||
|
logger.info(f"插件目录 {plugin_dir} 不存在,跳过插件动作加载")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 导入插件包
|
||||||
|
try:
|
||||||
|
plugins_package = importlib.import_module(plugin_path)
|
||||||
|
logger.info(f"成功导入插件包: {plugin_path}")
|
||||||
|
except ImportError as e:
|
||||||
|
logger.error(f"导入插件包失败: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 遍历插件包中的所有子包
|
||||||
|
loaded_plugins = 0
|
||||||
|
for _, plugin_name, is_pkg in pkgutil.iter_modules(
|
||||||
|
plugins_package.__path__, plugins_package.__name__ + "."
|
||||||
|
):
|
||||||
|
if not is_pkg:
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.debug(f"检测到插件: {plugin_name}")
|
||||||
|
|
||||||
|
# 检查插件是否有actions子包
|
||||||
|
plugin_actions_path = f"{plugin_name}.actions"
|
||||||
|
plugin_actions_dir = plugin_name.replace(".", os.path.sep) + os.path.sep + "actions"
|
||||||
|
|
||||||
|
if not os.path.exists(plugin_actions_dir):
|
||||||
|
logger.debug(f"插件 {plugin_name} 没有actions目录: {plugin_actions_dir}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 尝试导入插件的actions包
|
||||||
|
actions_module = importlib.import_module(plugin_actions_path)
|
||||||
|
logger.info(f"成功加载插件动作模块: {plugin_actions_path}")
|
||||||
|
|
||||||
|
# 遍历actions目录中的所有Python文件
|
||||||
|
actions_dir = os.path.dirname(actions_module.__file__)
|
||||||
|
for file in os.listdir(actions_dir):
|
||||||
|
if file.endswith('.py') and file != '__init__.py':
|
||||||
|
action_module_name = f"{plugin_actions_path}.{file[:-3]}"
|
||||||
|
try:
|
||||||
|
importlib.import_module(action_module_name)
|
||||||
|
logger.info(f"成功加载动作: {action_module_name}")
|
||||||
|
loaded_plugins += 1
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"加载动作失败: {action_module_name}, 错误: {e}")
|
||||||
|
|
||||||
|
except ImportError as e:
|
||||||
|
logger.debug(f"插件 {plugin_name} 的actions子包导入失败: {e}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.success(f"成功加载 {loaded_plugins} 个插件动作")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"加载actions失败: {e}")
|
||||||
|
import traceback
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
|
||||||
async def schedule_tasks(self):
|
async def schedule_tasks(self):
|
||||||
"""调度定时任务"""
|
"""调度定时任务"""
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import urllib.error
|
|||||||
import base64 # 新增:用于Base64编码
|
import base64 # 新增:用于Base64编码
|
||||||
import traceback # 新增:用于打印堆栈跟踪
|
import traceback # 新增:用于打印堆栈跟踪
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from src.chat.focus_chat.planners.actions.plugin_action import PluginAction, register_action
|
from src.chat.actions.plugin_action import PluginAction, register_action
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ActionActivationType, ChatMode
|
from src.chat.actions.base_action import ActionActivationType, ChatMode
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from .generate_pic_config import generate_config
|
from .generate_pic_config import generate_config
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.actions.plugin_action import PluginAction, register_action, ActionActivationType
|
from src.chat.actions.plugin_action import PluginAction, register_action, ActionActivationType
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ChatMode
|
from src.chat.actions.base_action import ChatMode
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
logger = get_logger("mute_action")
|
logger = get_logger("mute_action")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.actions.base_action import ActionActivationType
|
from src.chat.actions.base_action import ActionActivationType
|
||||||
from src.chat.focus_chat.planners.actions.plugin_action import PluginAction, register_action
|
from src.chat.actions.plugin_action import PluginAction, register_action
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
logger = get_logger("tts_action")
|
logger = get_logger("tts_action")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.focus_chat.planners.actions.plugin_action import PluginAction, register_action, ActionActivationType
|
from src.chat.actions.plugin_action import PluginAction, register_action, ActionActivationType
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
logger = get_logger("vtb_action")
|
logger = get_logger("vtb_action")
|
||||||
|
|||||||
Reference in New Issue
Block a user