refactor(sleep): 解耦ScheduleManager与SleepManager,引入桥接模式
为了降低模块间的耦合度并提升代码的可维护性,对睡眠管理系统进行了重构。 引入了`schedule_sleep_bridge`作为`ScheduleManager`和`SleepManager`之间的桥梁。`ScheduleManager`不再直接持有`SleepManager`的实例,而是通过桥接器更新其日程数据。`SleepManager`则通过桥接器获取所需的日程信息,实现了二者的解耦。 - **`ScheduleManager`**: 移除了所有与`SleepManager`直接交互的代码,现在只负责生成日程并通过桥接器发布。 - **`SleepManager`**: 构造函数和内部逻辑修改为依赖桥接器接口,而不是`ScheduleManager`实例。 - **`HeartFChatting`**: 更新了所有对睡眠状态管理的调用,使其通过新的`schedule_sleep_bridge`进行。 - **`DefaultReplyer`**: 采用了延迟导入的方式获取`schedule_manager`,减少了不必要的模块加载。
This commit is contained in:
@@ -15,7 +15,7 @@ from src.llm_models.utils_model import LLMRequest
|
||||
from src.common.logger import get_logger
|
||||
from json_repair import repair_json
|
||||
from src.manager.async_task_manager import AsyncTask, async_task_manager
|
||||
from ..chat.chat_loop.sleep_manager.sleep_manager import SleepManager, SleepState
|
||||
from ..chat.chat_loop.sleep_manager.schedule_bridge import schedule_sleep_bridge
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from src.chat.chat_loop.sleep_manager.wakeup_manager import WakeUpManager
|
||||
@@ -134,7 +134,6 @@ class ScheduleManager:
|
||||
self.max_retries = -1 # 无限重试,直到成功生成标准日程表
|
||||
self.daily_task_started = False
|
||||
self.schedule_generation_running = False # 防止重复生成任务
|
||||
self.sleep_manager = SleepManager(self)
|
||||
|
||||
async def start_daily_schedule_generation(self):
|
||||
"""启动每日零点自动生成新日程的任务"""
|
||||
@@ -162,6 +161,7 @@ class ScheduleManager:
|
||||
schedule_data = orjson.loads(str(schedule_record.schedule_data))
|
||||
if self._validate_schedule_with_pydantic(schedule_data):
|
||||
self.today_schedule = schedule_data
|
||||
schedule_sleep_bridge.update_today_schedule(self.today_schedule) # 更新桥接器中的日程
|
||||
schedule_str = f"已成功加载今天的日程 ({today_str}):\n"
|
||||
if self.today_schedule:
|
||||
for item in self.today_schedule:
|
||||
@@ -338,6 +338,7 @@ class ScheduleManager:
|
||||
logger.info(schedule_str)
|
||||
|
||||
self.today_schedule = schedule_data
|
||||
schedule_sleep_bridge.update_today_schedule(self.today_schedule)
|
||||
|
||||
# 成功生成日程后,更新使用过的月度计划的统计信息
|
||||
if used_plan_ids and global_config.monthly_plan_system:
|
||||
@@ -395,22 +396,6 @@ class ScheduleManager:
|
||||
continue
|
||||
return None
|
||||
|
||||
def get_current_sleep_state(self) -> SleepState:
|
||||
"""获取当前的睡眠状态"""
|
||||
return self.sleep_manager.get_current_sleep_state()
|
||||
|
||||
def is_sleeping(self) -> bool:
|
||||
"""检查当前是否处于正式休眠状态"""
|
||||
return self.sleep_manager.is_sleeping()
|
||||
|
||||
async def update_sleep_state(self, wakeup_manager: Optional["WakeUpManager"] = None):
|
||||
"""更新睡眠状态"""
|
||||
await self.sleep_manager.update_sleep_state(wakeup_manager)
|
||||
|
||||
def reset_sleep_state_after_wakeup(self):
|
||||
"""被唤醒后,将状态切换到 WOKEN_UP"""
|
||||
self.sleep_manager.reset_sleep_state_after_wakeup()
|
||||
|
||||
def _validate_schedule_with_pydantic(self, schedule_data) -> bool:
|
||||
"""使用Pydantic验证日程数据格式和完整性"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user