feat: Enhance emoji and image management with asynchronous background processing

- Added support for scheduling background tasks to build emoji and image descriptions when not found in cache.
- Improved error handling and logging for emoji and image processing.
- Updated `SessionMessage` processing to allow for optional heavy media analysis and voice transcription.
- Refactored logging messages for better clarity and consistency across various modules.
- Introduced a new function to build outbound log previews for messages, enhancing logging capabilities.
This commit is contained in:
DrSmoothl
2026-03-26 23:03:47 +08:00
parent 777d4cb0d2
commit 0a08973c41
17 changed files with 488 additions and 167 deletions

View File

@@ -2,39 +2,39 @@ from typing import Dict
import traceback
from src.chat.heart_flow.heartFC_chat import HeartFChatting
from src.chat.message_receive.chat_manager import chat_manager
from src.common.logger import get_logger
from src.config.config import global_config
from src.maisaka.runtime import MaisakaHeartFlowChatting
# from src.chat.brain_chat.brain_chat import BrainChatting
logger = get_logger("heartflow")
# TODO: 恢复PFC现在暂时禁用
class HeartflowManager:
"""主心流协调器,负责初始化并协调聊天,控制聊天属性"""
"""主心流协调器
def __init__(self):
# self.heartflow_chat_list: Dict[str, HeartFChatting | BrainChatting] = {}
self.heartflow_chat_list: Dict[str, HeartFChatting | MaisakaHeartFlowChatting] = {}
当前群聊统一使用 Maisaka runtime 作为消息核心循环实现。
"""
async def get_or_create_heartflow_chat(self, session_id: str): # -> Optional[HeartFChatting | BrainChatting]:
"""获取或创建一个新的HeartFChatting实例"""
def __init__(self) -> None:
"""初始化心流聊天实例缓存。"""
self.heartflow_chat_list: Dict[str, MaisakaHeartFlowChatting] = {}
async def get_or_create_heartflow_chat(self, session_id: str) -> MaisakaHeartFlowChatting:
"""获取或创建群聊心流实例。
Args:
session_id: 聊天会话 ID。
Returns:
MaisakaHeartFlowChatting: 当前会话绑定的 Maisaka runtime。
"""
try:
if chat := self.heartflow_chat_list.get(session_id):
return chat
chat_session = chat_manager.get_session_by_session_id(session_id)
if not chat_session:
raise ValueError(f"未找到 session_id={session_id} 的聊天流")
# new_chat = (
# HeartFChatting(session_id=session_id) if chat_session.group_id else BrainChatting(session_id=session_id)
# )
if global_config.maisaka.take_over_hfc:
new_chat = MaisakaHeartFlowChatting(session_id=session_id)
else:
new_chat = HeartFChatting(session_id=session_id)
new_chat = MaisakaHeartFlowChatting(session_id=session_id)
await new_chat.start()
self.heartflow_chat_list[session_id] = new_chat
return new_chat
@@ -43,10 +43,15 @@ class HeartflowManager:
traceback.print_exc()
raise e
def adjust_talk_frequency(self, session_id: str, frequency: float):
"""调整指定聊天流的说话频率"""
def adjust_talk_frequency(self, session_id: str, frequency: float) -> None:
"""调整指定聊天流的说话频率
Args:
session_id: 聊天会话 ID。
frequency: 目标频率系数。
"""
chat = self.heartflow_chat_list.get(session_id)
if chat and hasattr(chat, "adjust_talk_frequency"):
if chat:
chat.adjust_talk_frequency(frequency)
logger.info(f"已调整聊天 {session_id} 的说话频率为 {frequency}")
else: