🤖 自动格式化代码 [skip ci]

This commit is contained in:
github-actions[bot]
2025-04-26 13:49:24 +00:00
parent d50c2df0f6
commit 3931423e8e
4 changed files with 42 additions and 43 deletions

View File

@@ -255,7 +255,6 @@ class BackgroundTaskManager:
# --- 结束新增 --- # --- 结束新增 ---
# --- 结束新增 --- # --- 结束新增 ---
# --- Specific Task Runners --- # # --- Specific Task Runners --- #
@@ -286,4 +285,3 @@ class BackgroundTaskManager:
interval=self.interest_eval_interval, interval=self.interest_eval_interval,
task_func=self._perform_interest_eval_work, task_func=self._perform_interest_eval_work,
) )

View File

@@ -243,7 +243,7 @@ class SubHeartflow:
self, self,
subheartflow_id, subheartflow_id,
mai_states: MaiStateInfo, mai_states: MaiStateInfo,
hfc_no_reply_callback: Callable[[], Coroutine[None, None, None]] hfc_no_reply_callback: Callable[[], Coroutine[None, None, None]],
): ):
"""子心流初始化函数 """子心流初始化函数
@@ -381,7 +381,7 @@ class SubHeartflow:
chat_id=self.subheartflow_id, chat_id=self.subheartflow_id,
sub_mind=self.sub_mind, sub_mind=self.sub_mind,
observations=self.observations, # 传递所有观察者 observations=self.observations, # 传递所有观察者
on_consecutive_no_reply_callback=self.hfc_no_reply_callback # <-- Use stored callback on_consecutive_no_reply_callback=self.hfc_no_reply_callback, # <-- Use stored callback
) )
# 初始化并启动 HeartFChatting # 初始化并启动 HeartFChatting

View File

@@ -88,7 +88,7 @@ class SubHeartflowManager:
new_subflow = SubHeartflow( new_subflow = SubHeartflow(
subheartflow_id, subheartflow_id,
self.mai_state_info, self.mai_state_info,
hfc_callback # <-- 传递 partial 创建的回调 hfc_callback, # <-- 传递 partial 创建的回调
) )
# 异步初始化 # 异步初始化
@@ -134,7 +134,9 @@ class SubHeartflowManager:
if subflow.chat_state.chat_status == ChatState.ABSENT: if subflow.chat_state.chat_status == ChatState.ABSENT:
return True return True
else: else:
logger.warning(f"{log_prefix} 调用 change_chat_state 后,{stream_name} 状态仍为 {subflow.chat_state.chat_status.value}") logger.warning(
f"{log_prefix} 调用 change_chat_state 后,{stream_name} 状态仍为 {subflow.chat_state.chat_status.value}"
)
return False return False
except Exception as e: except Exception as e:
logger.error(f"{log_prefix} 设置 {stream_name} 状态为 ABSENT 时失败: {e}", exc_info=True) logger.error(f"{log_prefix} 设置 {stream_name} 状态为 ABSENT 时失败: {e}", exc_info=True)
@@ -142,6 +144,7 @@ class SubHeartflowManager:
else: else:
logger.debug(f"{log_prefix} {stream_name} 已是 ABSENT 状态") logger.debug(f"{log_prefix} {stream_name} 已是 ABSENT 状态")
return True # 已经是目标状态,视为成功 return True # 已经是目标状态,视为成功
# --- 结束新增 --- # --- 结束新增 ---
async def sleep_subheartflow(self, subheartflow_id: Any, reason: str) -> bool: async def sleep_subheartflow(self, subheartflow_id: Any, reason: str) -> bool:
@@ -239,8 +242,7 @@ class SubHeartflowManager:
for subflow in flows_to_update: for subflow in flows_to_update:
# 记录原始状态,以便统计实际改变的数量 # 记录原始状态,以便统计实际改变的数量
original_state_was_absent = (subflow.chat_state.chat_status == ChatState.ABSENT) original_state_was_absent = subflow.chat_state.chat_status == ChatState.ABSENT
success = await self._try_set_subflow_absent_internal(subflow, log_prefix) success = await self._try_set_subflow_absent_internal(subflow, log_prefix)
@@ -345,7 +347,6 @@ class SubHeartflowManager:
log_prefix = f"[{stream_name}]" log_prefix = f"[{stream_name}]"
current_subflow_state = sub_hf.chat_state.chat_status current_subflow_state = sub_hf.chat_state.chat_status
_observation_summary = "没有可用的观察信息。" # 默认值 _observation_summary = "没有可用的观察信息。" # 默认值
first_observation = sub_hf.observations[0] first_observation = sub_hf.observations[0]
@@ -357,8 +358,6 @@ class SubHeartflowManager:
else: else:
logger.warning(f"{log_prefix} [{stream_name}] 第一个观察者不是 ChattingObservation 类型。") logger.warning(f"{log_prefix} [{stream_name}] 第一个观察者不是 ChattingObservation 类型。")
# --- 获取麦麦状态 --- # --- 获取麦麦状态 ---
mai_state_description = f"你当前状态: {current_mai_state.value}" mai_state_description = f"你当前状态: {current_mai_state.value}"
@@ -379,7 +378,6 @@ class SubHeartflowManager:
random_detail = random.choice(individuality.identity.identity_detail) random_detail = random.choice(individuality.identity.identity_detail)
prompt_personality += f"{random_detail}" prompt_personality += f"{random_detail}"
# --- 针对 ABSENT 状态 --- # --- 针对 ABSENT 状态 ---
if current_subflow_state == ChatState.ABSENT: if current_subflow_state == ChatState.ABSENT:
# 构建Prompt # 构建Prompt
@@ -393,7 +391,7 @@ class SubHeartflowManager:
f"给出你的判断,和理由,然后以 JSON 格式回答" f"给出你的判断,和理由,然后以 JSON 格式回答"
f"包含键 'decision',如果要开始聊天,值为 true ,否则为 false.\n" f"包含键 'decision',如果要开始聊天,值为 true ,否则为 false.\n"
f"包含键 'reason',其值为你的理由。\n" f"包含键 'reason',其值为你的理由。\n"
f"例如:{{\"decision\": true, \"reason\": \"因为我想聊天\"}}\n" f'例如:{{"decision": true, "reason": "因为我想聊天"}}\n'
f"请只输出有效的 JSON 对象。" f"请只输出有效的 JSON 对象。"
) )
@@ -436,7 +434,7 @@ class SubHeartflowManager:
f"给出你的判断,和理由,然后以 JSON 格式回答" f"给出你的判断,和理由,然后以 JSON 格式回答"
f"包含键 'decision',如果要离开聊天,值为 true ,否则为 false.\n" f"包含键 'decision',如果要离开聊天,值为 true ,否则为 false.\n"
f"包含键 'reason',其值为你的理由。\n" f"包含键 'reason',其值为你的理由。\n"
f"例如:{{\"decision\": true, \"reason\": \"因为我想休息\"}}\n" f'例如:{{"decision": true, "reason": "因为我想休息"}}\n'
f"请只输出有效的 JSON 对象。" f"请只输出有效的 JSON 对象。"
) )
@@ -454,8 +452,6 @@ class SubHeartflowManager:
else: else:
logger.info(f"{log_prefix}LLM建议不进入ABSENT状态。") logger.info(f"{log_prefix}LLM建议不进入ABSENT状态。")
async def _llm_evaluate_state_transition(self, prompt: str) -> Optional[bool]: async def _llm_evaluate_state_transition(self, prompt: str) -> Optional[bool]:
""" """
使用 LLM 评估是否应进行状态转换,期望 LLM 返回 JSON 格式。 使用 LLM 评估是否应进行状态转换,期望 LLM 返回 JSON 格式。
@@ -573,6 +569,7 @@ class SubHeartflowManager:
# 注意:这里不需要再获取锁,因为 request_absent_transition 内部会处理锁 # 注意:这里不需要再获取锁,因为 request_absent_transition 内部会处理锁
logger.debug(f"[管理器 HFC 处理器] 接收到来自 {subheartflow_id} 的 HFC 无回复信号") logger.debug(f"[管理器 HFC 处理器] 接收到来自 {subheartflow_id} 的 HFC 无回复信号")
await self.request_absent_transition(subheartflow_id) await self.request_absent_transition(subheartflow_id)
# --- 结束新增 --- # # --- 结束新增 --- #
# --- 新增:处理来自 HeartFChatting 的状态转换请求 --- # # --- 新增:处理来自 HeartFChatting 的状态转换请求 --- #
@@ -608,4 +605,5 @@ class SubHeartflowManager:
logger.warning( logger.warning(
f"[状态转换请求] 收到对 {stream_name} 的请求,但其状态为 {current_state.value} (非 FOCUSED),不执行转换" f"[状态转换请求] 收到对 {stream_name} 的请求,但其状态为 {current_state.value} (非 FOCUSED),不执行转换"
) )
# --- 结束新增 --- # # --- 结束新增 --- #

View File

@@ -161,7 +161,7 @@ class HeartFChatting:
chat_id: str, chat_id: str,
sub_mind: SubMind, sub_mind: SubMind,
observations: Observation, observations: Observation,
on_consecutive_no_reply_callback: Callable[[], Coroutine[None, None, None]] on_consecutive_no_reply_callback: Callable[[], Coroutine[None, None, None]],
): ):
""" """
HeartFChatting 初始化函数 HeartFChatting 初始化函数
@@ -600,15 +600,18 @@ class HeartFChatting:
if not self._shutting_down: if not self._shutting_down:
self._lian_xu_bu_hui_fu_ci_shu += 1 self._lian_xu_bu_hui_fu_ci_shu += 1
logger.debug(f"{self.log_prefix} 连续不回复计数增加: {self._lian_xu_bu_hui_fu_ci_shu}/{self.CONSECUTIVE_NO_REPLY_THRESHOLD}") logger.debug(
f"{self.log_prefix} 连续不回复计数增加: {self._lian_xu_bu_hui_fu_ci_shu}/{self.CONSECUTIVE_NO_REPLY_THRESHOLD}"
)
# 检查是否达到阈值 # 检查是否达到阈值
if self._lian_xu_bu_hui_fu_ci_shu >= self.CONSECUTIVE_NO_REPLY_THRESHOLD: if self._lian_xu_bu_hui_fu_ci_shu >= self.CONSECUTIVE_NO_REPLY_THRESHOLD:
logger.info(f"{self.log_prefix} 连续不回复达到阈值 ({self._lian_xu_bu_hui_fu_ci_shu}次),调用回调请求状态转换") logger.info(
f"{self.log_prefix} 连续不回复达到阈值 ({self._lian_xu_bu_hui_fu_ci_shu}次),调用回调请求状态转换"
)
# 调用回调。注意:这里不重置计数器,依赖回调函数成功改变状态来隐式重置上下文。 # 调用回调。注意:这里不重置计数器,依赖回调函数成功改变状态来隐式重置上下文。
await self.on_consecutive_no_reply_callback() await self.on_consecutive_no_reply_callback()
return True return True
except asyncio.CancelledError: except asyncio.CancelledError: