diff --git a/src/chat/heart_flow/frequency_control.py b/src/chat/heart_flow/frequency_control.py deleted file mode 100644 index d3be7801..00000000 --- a/src/chat/heart_flow/frequency_control.py +++ /dev/null @@ -1,50 +0,0 @@ -from typing import Dict - -from src.common.logger import get_logger - -logger = get_logger("frequency_control") - - -class FrequencyControl: - """简化的频率控制类,仅管理不同chat_id的频率值""" - - def __init__(self, chat_id: str): - self.chat_id = chat_id - # 发言频率调整值 - self.talk_frequency_adjust: float = 1.0 - - def get_talk_frequency_adjust(self) -> float: - """获取发言频率调整值""" - return self.talk_frequency_adjust - - def set_talk_frequency_adjust(self, value: float) -> None: - """设置发言频率调整值""" - self.talk_frequency_adjust = max(0.1, min(5.0, value)) - - -class FrequencyControlManager: - """频率控制管理器,管理多个聊天流的频率控制实例""" - - def __init__(self): - self.frequency_control_dict: Dict[str, FrequencyControl] = {} - - def get_or_create_frequency_control(self, chat_id: str) -> FrequencyControl: - """获取或创建指定聊天流的频率控制实例""" - if chat_id not in self.frequency_control_dict: - self.frequency_control_dict[chat_id] = FrequencyControl(chat_id) - return self.frequency_control_dict[chat_id] - - def remove_frequency_control(self, chat_id: str) -> bool: - """移除指定聊天流的频率控制实例""" - if chat_id in self.frequency_control_dict: - del self.frequency_control_dict[chat_id] - return True - return False - - def get_all_chat_ids(self) -> list[str]: - """获取所有有频率控制的聊天ID""" - return list(self.frequency_control_dict.keys()) - - -# 创建全局实例 -frequency_control_manager = FrequencyControlManager() diff --git a/src/chat/heart_flow/heartFC_chat.py b/src/chat/heart_flow/heartFC_chat.py index db61a8d8..40f2d91d 100644 --- a/src/chat/heart_flow/heartFC_chat.py +++ b/src/chat/heart_flow/heartFC_chat.py @@ -119,7 +119,7 @@ class HeartFChatting: logger.info(f"{self.log_prefix} HeartFChatting 已停止") - async def adjust_talk_frequency(self, new_value: float): + def adjust_talk_frequency(self, new_value: float): """调整发言频率的调整值 Args: diff --git a/src/chat/heart_flow/heartflow.py b/src/chat/heart_flow/heartflow_manager.py similarity index 68% rename from src/chat/heart_flow/heartflow.py rename to src/chat/heart_flow/heartflow_manager.py index d6c62f94..3224755c 100644 --- a/src/chat/heart_flow/heartflow.py +++ b/src/chat/heart_flow/heartflow_manager.py @@ -10,8 +10,8 @@ from src.chat.brain_chat.brain_chat import BrainChatting logger = get_logger("heartflow") -class Heartflow: - """主心流协调器,负责初始化并协调聊天""" +class HeartflowManager: + """主心流协调器,负责初始化并协调聊天,控制聊天属性""" def __init__(self): self.heartflow_chat_list: Dict[str, HeartFChatting | BrainChatting] = {} @@ -35,5 +35,14 @@ class Heartflow: traceback.print_exc() return None + def adjust_talk_frequency(self, session_id: str, frequency: float): + """调整指定聊天流的说话频率""" + chat = self.heartflow_chat_list.get(session_id) + if chat and isinstance(chat, HeartFChatting): + chat.adjust_talk_frequency(frequency) + logger.info(f"已调整聊天 {session_id} 的说话频率为 {frequency}") + else: + logger.warning(f"无法调整频率,未找到 session_id={session_id} 的聊天流") -heartflow = Heartflow() + +heartflow_manager = HeartflowManager() diff --git a/src/chat/heart_flow/heartflow_message_processor.py b/src/chat/heart_flow/heartflow_message_processor.py index 753049d1..d4424d7c 100644 --- a/src/chat/heart_flow/heartflow_message_processor.py +++ b/src/chat/heart_flow/heartflow_message_processor.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING import traceback -from src.chat.heart_flow.heartflow import heartflow +from src.chat.heart_flow.heartflow_manager import heartflow_manager # from src.chat.utils.chat_message_builder import replace_user_references from src.common.utils.utils_message import MessageUtils @@ -58,7 +58,7 @@ class HeartFCMessageReceiver: MessageUtils.store_message_to_db(message) # 存储消息到数据库 - await heartflow.get_or_create_heartflow_chat(message.session_id) + await heartflow_manager.get_or_create_heartflow_chat(message.session_id) # 3. 日志记录 mes_name = group_info.group_name if group_info else "私聊" diff --git a/src/chat/heart_flow/hfc_utils_old.py b/src/chat/heart_flow/hfc_utils_old.py deleted file mode 100644 index 43db6a5d..00000000 --- a/src/chat/heart_flow/hfc_utils_old.py +++ /dev/null @@ -1,89 +0,0 @@ -from dataclasses import dataclass -from typing import Optional, Dict, Any - -import time - -from src.config.config import global_config -from src.common.logger import get_logger -from src.chat.message_receive.chat_manager import chat_manager as _chat_manager -from src.services import send_service as send_api - -from src.common.message_repository import count_messages - -logger = get_logger(__name__) - - -@dataclass -class CyclePlanInfo: ... - - -@dataclass -class CycleActionInfo: ... - - -class CycleDetail: - """循环信息记录类""" - - def __init__(self, cycle_id: int): - self.cycle_id = cycle_id - self.thinking_id = "" - self.start_time = time.time() - self.end_time: Optional[float] = None - self.timers: Dict[str, float] = {} - - - def set_loop_info(self, loop_info: Dict[str, Any]): - """设置循环信息""" - self.loop_plan_info = loop_info["loop_plan_info"] - self.loop_action_info = loop_info["loop_action_info"] - - -def get_recent_message_stats(minutes: float = 30, chat_id: Optional[str] = None) -> dict: - """ - Args: - minutes (float): 检索的分钟数,默认30分钟 - chat_id (str, optional): 指定的chat_id,仅统计该chat下的消息。为None时统计全部。 - Returns: - dict: {"bot_reply_count": int, "total_message_count": int} - """ - - now = time.time() - start_time = now - minutes * 60 - bot_id = global_config.bot.qq_account - - filter_base: Dict[str, Any] = {"time": {"$gte": start_time}} - if chat_id is not None: - filter_base["chat_id"] = chat_id - - # 总消息数 - total_message_count = count_messages(filter_base) - # bot自身回复数 - bot_filter = filter_base.copy() - bot_filter["user_id"] = bot_id - bot_reply_count = count_messages(bot_filter) - - return {"bot_reply_count": bot_reply_count, "total_message_count": total_message_count} - - -async def send_typing(): - chat = await _chat_manager.get_or_create_session( - platform="amaidesu_default", - user_id="114514", - group_id="114514", - ) - - await send_api.custom_to_stream( - message_type="state", content="typing", stream_id=chat.session_id, storage_message=False - ) - - -async def stop_typing(): - chat = await _chat_manager.get_or_create_session( - platform="amaidesu_default", - user_id="114514", - group_id="114514", - ) - - await send_api.custom_to_stream( - message_type="state", content="stop_typing", stream_id=chat.session_id, storage_message=False - )