use structlog instead of loguru

This commit is contained in:
春河晴
2025-06-11 15:17:08 +09:00
parent 0cb595218e
commit 7b4e7b94f8
132 changed files with 283 additions and 1804 deletions

12
bot.py
View File

@@ -7,7 +7,7 @@ import time
import platform import platform
import traceback import traceback
from dotenv import load_dotenv from dotenv import load_dotenv
from src.common.logger_manager import get_logger from src.common.logger import get_logger
# from src.common.logger import LogConfig, CONFIRM_STYLE_CONFIG # from src.common.logger import LogConfig, CONFIRM_STYLE_CONFIG
from src.common.crash_logger import install_crash_handler from src.common.crash_logger import install_crash_handler
@@ -69,10 +69,9 @@ def load_env():
# 直接加载生产环境变量配置 # 直接加载生产环境变量配置
if os.path.exists(".env"): if os.path.exists(".env"):
load_dotenv(".env", override=True) load_dotenv(".env", override=True)
logger.success("成功加载环境变量配置") logger.info("成功加载环境变量配置")
else: else:
logger.error("未找到.env文件请确保文件存在") logger.warn("未找到.env文件请确保程序所需的环境变量被正确设置")
raise FileNotFoundError("未找到.env文件请确保文件存在")
def scan_provider(env_config: dict): def scan_provider(env_config: dict):
@@ -199,6 +198,7 @@ def check_eula():
def raw_main(): def raw_main():
load_env()
# 利用 TZ 环境变量设定程序工作的时区 # 利用 TZ 环境变量设定程序工作的时区
if platform.system().lower() != "windows": if platform.system().lower() != "windows":
time.tzset() time.tzset()
@@ -211,8 +211,6 @@ def raw_main():
easter_egg() easter_egg()
load_env()
env_config = {key: os.getenv(key) for key in os.environ} env_config = {key: os.getenv(key) for key in os.environ}
scan_provider(env_config) scan_provider(env_config)
@@ -235,7 +233,7 @@ if __name__ == "__main__":
loop.run_until_complete(main_system.initialize()) loop.run_until_complete(main_system.initialize())
loop.run_until_complete(main_system.schedule_tasks()) loop.run_until_complete(main_system.schedule_tasks())
except KeyboardInterrupt: except KeyboardInterrupt:
# loop.run_until_complete(global_api.stop()) # loop.run_until_complete(get_global_api().stop())
logger.warning("收到中断信号,正在优雅关闭...") logger.warning("收到中断信号,正在优雅关闭...")
if loop and not loop.is_closed(): if loop and not loop.is_closed():
try: try:

View File

@@ -39,7 +39,7 @@ from src.plugin_system import (
BasePlugin, register_plugin, BaseAction, BaseCommand, BasePlugin, register_plugin, BaseAction, BaseCommand,
ComponentInfo, ActionInfo, CommandInfo, ActionActivationType, ChatMode ComponentInfo, ActionInfo, CommandInfo, ActionActivationType, ChatMode
) )
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("my_first_plugin") logger = get_logger("my_first_plugin")

Binary file not shown.

View File

@@ -15,7 +15,7 @@ from src.chat.knowledge.embedding_store import EmbeddingManager
from src.chat.knowledge.llm_client import LLMClient from src.chat.knowledge.llm_client import LLMClient
from src.chat.knowledge.open_ie import OpenIE from src.chat.knowledge.open_ie import OpenIE
from src.chat.knowledge.kg_manager import KGManager from src.chat.knowledge.kg_manager import KGManager
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.chat.knowledge.utils.hash import get_sha256 from src.chat.knowledge.utils.hash import get_sha256
@@ -23,7 +23,7 @@ from src.chat.knowledge.utils.hash import get_sha256
ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
OPENIE_DIR = global_config["persistence"]["openie_data_path"] or os.path.join(ROOT_PATH, "data/openie") OPENIE_DIR = global_config["persistence"]["openie_data_path"] or os.path.join(ROOT_PATH, "data/openie")
logger = get_module_logger("OpenIE导入") logger = get_logger("OpenIE导入")
def hash_deduplicate( def hash_deduplicate(

View File

@@ -12,7 +12,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from rich.progress import Progress # 替换为 rich 进度条 from rich.progress import Progress # 替换为 rich 进度条
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.chat.knowledge.lpmmconfig import global_config from src.chat.knowledge.lpmmconfig import global_config
from src.chat.knowledge.ie_process import info_extract_from_str from src.chat.knowledge.ie_process import info_extract_from_str
from src.chat.knowledge.llm_client import LLMClient from src.chat.knowledge.llm_client import LLMClient
@@ -28,7 +28,7 @@ from rich.progress import (
TextColumn, TextColumn,
) )
logger = get_module_logger("LPMM知识库-信息提取") logger = get_logger("LPMM知识库-信息提取")
ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))

View File

@@ -32,7 +32,7 @@ sys.path.insert(0, str(project_root))
from src.chat.utils.chat_message_builder import build_readable_messages from src.chat.utils.chat_message_builder import build_readable_messages
from src.common.database.database_model import Messages from src.common.database.database_model import Messages
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.common.database.database import db from src.common.database.database import db
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

View File

@@ -42,7 +42,7 @@ from src.common.database.database_model import (
GraphNodes, GraphNodes,
GraphEdges, GraphEdges,
) )
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("mongodb_to_sqlite") logger = get_logger("mongodb_to_sqlite")

View File

@@ -5,7 +5,7 @@ import sys # 新增系统模块导入
import datetime # 新增导入 import datetime # 新增导入
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.knowledge.lpmmconfig import global_config from src.chat.knowledge.lpmmconfig import global_config
logger = get_logger("lpmm") logger = get_logger("lpmm")

View File

@@ -1,6 +1,6 @@
from src.chat.heart_flow.heartflow import heartflow from src.chat.heart_flow.heartflow import heartflow
from src.chat.heart_flow.sub_heartflow import ChatState from src.chat.heart_flow.sub_heartflow import ChatState
from src.common.logger_manager import get_logger from src.common.logger import get_logger
import time import time
logger = get_logger("api") logger = get_logger("api")

View File

@@ -3,7 +3,7 @@ import strawberry
from fastapi import FastAPI from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter from strawberry.fastapi import GraphQLRouter
from src.common.server import global_server from src.common.server import get_global_server
@strawberry.type @strawberry.type
@@ -17,6 +17,6 @@ schema = strawberry.Schema(Query)
graphql_app = GraphQLRouter(schema) graphql_app = GraphQLRouter(schema)
fast_api_app: FastAPI = global_server.get_app() fast_api_app: FastAPI = get_global_server().get_app()
fast_api_app.include_router(graphql_app, prefix="/graphql") fast_api_app.include_router(graphql_app, prefix="/graphql")

View File

@@ -6,9 +6,9 @@ import sys
# from src.chat.heart_flow.heartflow import heartflow # from src.chat.heart_flow.heartflow import heartflow
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
# from src.config.config import BotConfig # from src.config.config import BotConfig
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.api.reload_config import reload_config as reload_config_func from src.api.reload_config import reload_config as reload_config_func
from src.common.server import global_server from src.common.server import get_global_server
from src.api.apiforgui import ( from src.api.apiforgui import (
get_all_subheartflow_ids, get_all_subheartflow_ids,
forced_change_subheartflow_status, forced_change_subheartflow_status,
@@ -108,4 +108,4 @@ async def get_system_basic_info():
def start_api_server(): def start_api_server():
"""启动API服务器""" """启动API服务器"""
global_server.register_router(router, prefix="/api/v1") get_global_server().register_router(router, prefix="/api/v1")

View File

@@ -1,7 +1,7 @@
from fastapi import HTTPException from fastapi import HTTPException
from rich.traceback import install from rich.traceback import install
from src.config.config import get_config_dir, load_config from src.config.config import get_config_dir, load_config
from src.common.logger_manager import get_logger from src.common.logger import get_logger
import os import os
install(extra_lines=3) install(extra_lines=3)

View File

@@ -1,6 +1,6 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Tuple, Dict, Type from typing import Tuple, Dict, Type
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("base_action") logger = get_logger("base_action")

View File

@@ -1,6 +1,6 @@
from typing import Tuple, Dict, Any, Optional from typing import Tuple, Dict, Any, Optional
from src.chat.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.common.logger_manager import get_logger from src.common.logger import get_logger
import os import os
import inspect import inspect
import toml # 导入 toml 库 import toml # 导入 toml 库

View File

@@ -1,7 +1,7 @@
import re import re
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Dict, List, Type, Optional, Tuple, Pattern from typing import Dict, List, Type, Optional, Tuple, Pattern
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.message_receive.message import MessageRecv from src.chat.message_receive.message import MessageRecv
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.chat.focus_chat.expressors.default_expressor import DefaultExpressor from src.chat.focus_chat.expressors.default_expressor import DefaultExpressor

View File

@@ -17,7 +17,7 @@ from src.common.database.database import db as peewee_db
from src.config.config import global_config from src.config.config import global_config
from src.chat.utils.utils_image import image_path_to_base64, image_manager from src.chat.utils.utils_image import image_path_to_base64, image_manager
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from rich.traceback import install from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
@@ -163,7 +163,7 @@ class MaiEmoji:
last_used_time=self.last_used_time, last_used_time=self.last_used_time,
) )
logger.success(f"[注册] 表情包信息保存到数据库: {self.filename} ({self.emotion})") logger.info(f"[注册] 表情包信息保存到数据库: {self.filename} ({self.emotion})")
return True return True
@@ -317,7 +317,7 @@ async def clear_temp_emoji() -> None:
os.remove(file_path) os.remove(file_path)
logger.debug(f"[清理] 删除: {filename}") logger.debug(f"[清理] 删除: {filename}")
logger.success("[清理] 完成") logger.info("[清理] 完成")
async def clean_unused_emojis(emoji_dir: str, emoji_objects: List["MaiEmoji"]) -> None: async def clean_unused_emojis(emoji_dir: str, emoji_objects: List["MaiEmoji"]) -> None:
@@ -349,7 +349,7 @@ async def clean_unused_emojis(emoji_dir: str, emoji_objects: List["MaiEmoji"]) -
logger.error(f"[错误] 删除文件时出错 ({file_full_path}): {str(e)}") logger.error(f"[错误] 删除文件时出错 ({file_full_path}): {str(e)}")
if cleaned_count > 0: if cleaned_count > 0:
logger.success(f"[清理] 在目录 {emoji_dir} 中清理了 {cleaned_count} 个破损表情包。") logger.info(f"[清理] 在目录 {emoji_dir} 中清理了 {cleaned_count} 个破损表情包。")
else: else:
logger.info(f"[清理] 目录 {emoji_dir} 中没有需要清理的。") logger.info(f"[清理] 目录 {emoji_dir} 中没有需要清理的。")
@@ -568,7 +568,7 @@ class EmojiManager:
# 输出清理结果 # 输出清理结果
if removed_count > 0: if removed_count > 0:
logger.success(f"[清理] 已清理 {removed_count} 个失效/文件丢失的表情包记录") logger.info(f"[清理] 已清理 {removed_count} 个失效/文件丢失的表情包记录")
logger.info(f"[统计] 清理前记录数: {total_count} | 清理后有效记录数: {len(self.emoji_objects)}") logger.info(f"[统计] 清理前记录数: {total_count} | 清理后有效记录数: {len(self.emoji_objects)}")
else: else:
logger.info(f"[检查] 已检查 {total_count} 个表情包记录,全部完好") logger.info(f"[检查] 已检查 {total_count} 个表情包记录,全部完好")
@@ -645,7 +645,7 @@ class EmojiManager:
self.emoji_objects = emoji_objects self.emoji_objects = emoji_objects
self.emoji_num = len(emoji_objects) self.emoji_num = len(emoji_objects)
logger.success(f"[数据库] 加载完成: 共加载 {self.emoji_num} 个表情包记录。") logger.info(f"[数据库] 加载完成: 共加载 {self.emoji_num} 个表情包记录。")
if load_errors > 0: if load_errors > 0:
logger.warning(f"[数据库] 加载过程中出现 {load_errors} 个错误。") logger.warning(f"[数据库] 加载过程中出现 {load_errors} 个错误。")
@@ -808,7 +808,7 @@ class EmojiManager:
if register_success: if register_success:
self.emoji_objects.append(new_emoji) self.emoji_objects.append(new_emoji)
self.emoji_num += 1 self.emoji_num += 1
logger.success(f"[成功] 注册: {new_emoji.filename}") logger.info(f"[成功] 注册: {new_emoji.filename}")
return True return True
else: else:
logger.error(f"[错误] 注册表情包到数据库失败: {new_emoji.filename}") logger.error(f"[错误] 注册表情包到数据库失败: {new_emoji.filename}")
@@ -973,7 +973,7 @@ class EmojiManager:
# 注册成功后,添加到内存列表 # 注册成功后,添加到内存列表
self.emoji_objects.append(new_emoji) self.emoji_objects.append(new_emoji)
self.emoji_num += 1 self.emoji_num += 1
logger.success(f"[成功] 注册新表情包: {filename} (当前: {self.emoji_num}/{self.emoji_num_max})") logger.info(f"[成功] 注册新表情包: {filename} (当前: {self.emoji_num}/{self.emoji_num_max})")
return True return True
else: else:
logger.error(f"[注册失败] 保存表情包到数据库/移动文件失败: {filename}") logger.error(f"[注册失败] 保存表情包到数据库/移动文件失败: {filename}")

View File

@@ -4,7 +4,7 @@ from src.chat.message_receive.message import MessageRecv, MessageThinking, Messa
from src.chat.message_receive.message import Seg # Local import needed after move from src.chat.message_receive.message import Seg # Local import needed after move
from src.chat.message_receive.message import UserInfo from src.chat.message_receive.message import UserInfo
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.chat.utils.utils_image import image_path_to_base64 # Local import needed after move from src.chat.utils.utils_image import image_path_to_base64 # Local import needed after move

View File

@@ -1,7 +1,7 @@
import time import time
import random import random
from typing import List, Dict, Optional, Any, Tuple from typing import List, Dict, Optional, Any, Tuple
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_anonymous_messages from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_anonymous_messages

View File

@@ -1,7 +1,7 @@
import time import time
import os import os
from typing import Optional, Dict, Any from typing import Optional, Dict, Any
from src.common.logger_manager import get_logger from src.common.logger import get_logger
import json import json
logger = get_logger("hfc") # Logger Name Changed logger = get_logger("hfc") # Logger Name Changed

View File

@@ -7,7 +7,7 @@ from typing import List, Optional, Dict, Any, Deque, Callable, Awaitable
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from rich.traceback import install from rich.traceback import install
from src.chat.utils.prompt_builder import global_prompt_manager from src.chat.utils.prompt_builder import global_prompt_manager
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.utils.timer_calculator import Timer from src.chat.utils.timer_calculator import Timer
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.chat.focus_chat.heartFC_Cycleinfo import CycleDetail from src.chat.focus_chat.heartFC_Cycleinfo import CycleDetail

View File

@@ -1,10 +1,10 @@
import asyncio import asyncio
from typing import Dict, Optional # 重新导入类型 from typing import Dict, Optional # 重新导入类型
from src.chat.message_receive.message import MessageSending, MessageThinking from src.chat.message_receive.message import MessageSending, MessageThinking
from src.common.message.api import global_api from src.common.message.api import get_global_api
from src.chat.message_receive.storage import MessageStorage from src.chat.message_receive.storage import MessageStorage
from src.chat.utils.utils import truncate_message from src.chat.utils.utils import truncate_message
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.utils.utils import calculate_typing_time from src.chat.utils.utils import calculate_typing_time
from rich.traceback import install from rich.traceback import install
import traceback import traceback
@@ -21,8 +21,8 @@ async def send_message(message: MessageSending) -> str:
try: try:
# 直接调用API发送消息 # 直接调用API发送消息
await global_api.send_message(message) await get_global_api().send_message(message)
logger.success(f"已将消息 '{message_preview}' 发往平台'{message.message_info.platform}'") logger.info(f"已将消息 '{message_preview}' 发往平台'{message.message_info.platform}'")
return message.processed_plain_text return message.processed_plain_text
except Exception as e: except Exception as e:

View File

@@ -6,7 +6,7 @@ from src.chat.heart_flow.heartflow import heartflow
from src.chat.message_receive.chat_stream import chat_manager, ChatStream from src.chat.message_receive.chat_stream import chat_manager, ChatStream
from src.chat.utils.utils import is_mentioned_bot_in_message from src.chat.utils.utils import is_mentioned_bot_in_message
from src.chat.utils.timer_calculator import Timer from src.chat.utils.timer_calculator import Timer
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.person_info.relationship_manager import relationship_manager from src.person_info.relationship_manager import relationship_manager
import math import math

View File

@@ -3,7 +3,7 @@ from typing import Optional
from src.chat.message_receive.message import MessageRecv, BaseMessageInfo from src.chat.message_receive.message import MessageRecv, BaseMessageInfo
from src.chat.message_receive.chat_stream import ChatStream from src.chat.message_receive.chat_stream import ChatStream
from src.chat.message_receive.message import UserInfo from src.chat.message_receive.message import UserInfo
from src.common.logger_manager import get_logger from src.common.logger import get_logger
import json import json
logger = get_logger(__name__) logger = get_logger(__name__)

View File

@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
from typing import List, Any, Optional, Dict from typing import List, Any, Optional, Dict
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("base_processor") logger = get_logger("base_processor")

View File

@@ -3,7 +3,7 @@ from src.chat.focus_chat.info.obs_info import ObsInfo
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
from .base_processor import BaseProcessor from .base_processor import BaseProcessor
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from src.chat.focus_chat.info.cycle_info import CycleInfo from src.chat.focus_chat.info.cycle_info import CycleInfo

View File

@@ -4,7 +4,7 @@ from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import time import time
import traceback import traceback
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.individuality.individuality import individuality from src.individuality.individuality import individuality
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.chat.utils.json_utils import safe_json_dumps from src.chat.utils.json_utils import safe_json_dumps

View File

@@ -4,7 +4,7 @@ from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import time import time
import traceback import traceback
from src.common.logger_manager import get_logger from src.common.logger 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.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.person_info.relationship_manager import relationship_manager from src.person_info.relationship_manager import relationship_manager

View File

@@ -4,7 +4,7 @@ from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import time import time
import traceback import traceback
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.individuality.individuality import individuality from src.individuality.individuality import individuality
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager

View File

@@ -2,7 +2,7 @@ from src.chat.heart_flow.observation.chatting_observation import ChattingObserva
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import time import time
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.individuality.individuality import individuality from src.individuality.individuality import individuality
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.tools.tool_use import ToolUser from src.tools.tool_use import ToolUser

View File

@@ -4,7 +4,7 @@ from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
import time import time
import traceback import traceback
from src.common.logger_manager import get_logger from src.common.logger 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.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from .base_processor import BaseProcessor from .base_processor import BaseProcessor

View File

@@ -3,7 +3,7 @@ from src.chat.heart_flow.observation.structure_observation import StructureObser
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.common.logger_manager import get_logger from src.common.logger 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 datetime import datetime from datetime import datetime
from src.chat.memory_system.Hippocampus import hippocampus_manager from src.chat.memory_system.Hippocampus import hippocampus_manager

View File

@@ -4,7 +4,7 @@ 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
from src.chat.message_receive.chat_stream import ChatStream from src.chat.message_receive.chat_stream import ChatStream
from src.common.logger_manager import get_logger from src.common.logger import get_logger
# 不再需要导入动作类因为已经在main.py中导入 # 不再需要导入动作类因为已经在main.py中导入
# import src.chat.actions.default_actions # noqa # import src.chat.actions.default_actions # noqa

View File

@@ -1,6 +1,6 @@
from typing import List, Optional, Any, Dict from typing import List, Optional, Any, Dict
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager

View File

@@ -3,7 +3,7 @@ from src.chat.focus_chat.planners.base_planner import BasePlanner
from src.chat.focus_chat.planners.planner_simple import ActionPlanner as SimpleActionPlanner from src.chat.focus_chat.planners.planner_simple import ActionPlanner as SimpleActionPlanner
from src.chat.focus_chat.planners.action_manager import ActionManager from src.chat.focus_chat.planners.action_manager import ActionManager
from src.config.config import global_config from src.config.config import global_config
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("planner_factory") logger = get_logger("planner_factory")

View File

@@ -11,7 +11,7 @@ from src.chat.focus_chat.info.action_info import ActionInfo
from src.chat.focus_chat.info.structured_info import StructuredInfo from src.chat.focus_chat.info.structured_info import StructuredInfo
from src.chat.focus_chat.info.self_info import SelfInfo from src.chat.focus_chat.info.self_info import SelfInfo
from src.chat.focus_chat.info.relation_info import RelationInfo from src.chat.focus_chat.info.relation_info import RelationInfo
from src.common.logger_manager import get_logger from src.common.logger 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

View File

@@ -4,7 +4,7 @@ from src.chat.message_receive.message import MessageRecv, MessageThinking, Messa
from src.chat.message_receive.message import Seg # Local import needed after move from src.chat.message_receive.message import Seg # Local import needed after move
from src.chat.message_receive.message import UserInfo from src.chat.message_receive.message import UserInfo
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.chat.utils.utils_image import image_path_to_base64 # Local import needed after move from src.chat.utils.utils_image import image_path_to_base64 # Local import needed after move

View File

@@ -2,7 +2,7 @@ from typing import Dict, Any, Type, TypeVar, List, Optional
import traceback import traceback
from json_repair import repair_json from json_repair import repair_json
from rich.traceback import install from rich.traceback import install
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.chat.focus_chat.working_memory.memory_item import MemoryItem from src.chat.focus_chat.working_memory.memory_item import MemoryItem

View File

@@ -1,6 +1,6 @@
from typing import List, Any, Optional from typing import List, Any, Optional
import asyncio import asyncio
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.focus_chat.working_memory.memory_manager import MemoryManager, MemoryItem from src.chat.focus_chat.working_memory.memory_manager import MemoryManager, MemoryItem
from src.config.config import global_config from src.config.config import global_config

View File

@@ -1,7 +1,7 @@
import asyncio import asyncio
import traceback import traceback
from typing import Optional, Coroutine, Callable, Any, List from typing import Optional, Coroutine, Callable, Any, List
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.heart_flow.subheartflow_manager import SubHeartflowManager from src.chat.heart_flow.subheartflow_manager import SubHeartflowManager
from src.config.config import global_config from src.config.config import global_config

View File

@@ -1,5 +1,5 @@
from src.chat.heart_flow.sub_heartflow import SubHeartflow, ChatState from src.chat.heart_flow.sub_heartflow import SubHeartflow, ChatState
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from typing import Any, Optional, List from typing import Any, Optional, List
from src.chat.heart_flow.subheartflow_manager import SubHeartflowManager from src.chat.heart_flow.subheartflow_manager import SubHeartflowManager
from src.chat.heart_flow.background_tasks import BackgroundTaskManager # Import BackgroundTaskManager from src.chat.heart_flow.background_tasks import BackgroundTaskManager # Import BackgroundTaskManager

View File

@@ -1,7 +1,7 @@
# 定义了来自外部世界的信息 # 定义了来自外部世界的信息
# 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体 # 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体
from datetime import datetime from datetime import datetime
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.focus_chat.planners.action_manager import ActionManager from src.chat.focus_chat.planners.action_manager import ActionManager
logger = get_logger("observation") logger = get_logger("observation")

View File

@@ -14,7 +14,7 @@ import difflib
from src.chat.message_receive.message import MessageRecv # 添加 MessageRecv 导入 from src.chat.message_receive.message import MessageRecv # 添加 MessageRecv 导入
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.heart_flow.utils_chat import get_chat_type_and_target_info from src.chat.heart_flow.utils_chat import get_chat_type_and_target_info
from src.chat.utils.prompt_builder import Prompt from src.chat.utils.prompt_builder import Prompt

View File

@@ -1,7 +1,7 @@
# 定义了来自外部世界的信息 # 定义了来自外部世界的信息
# 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体 # 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体
from datetime import datetime from datetime import datetime
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.focus_chat.heartFC_Cycleinfo import CycleDetail from src.chat.focus_chat.heartFC_Cycleinfo import CycleDetail
from typing import List from typing import List
# Import the new utility function # Import the new utility function

View File

@@ -1,7 +1,7 @@
# 定义了来自外部世界的信息 # 定义了来自外部世界的信息
# 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体 # 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体
from datetime import datetime from datetime import datetime
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("observation") logger = get_logger("observation")

View File

@@ -1,5 +1,5 @@
from datetime import datetime from datetime import datetime
from src.common.logger_manager import get_logger from src.common.logger import get_logger
# Import the new utility function # Import the new utility function

View File

@@ -1,7 +1,7 @@
# 定义了来自外部世界的信息 # 定义了来自外部世界的信息
# 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体 # 外部世界可以是某个聊天 不同平台的聊天 也可以是任意媒体
from datetime import datetime from datetime import datetime
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.focus_chat.working_memory.working_memory import WorkingMemory from src.chat.focus_chat.working_memory.working_memory import WorkingMemory
from src.chat.focus_chat.working_memory.memory_item import MemoryItem from src.chat.focus_chat.working_memory.memory_item import MemoryItem
from typing import List from typing import List

View File

@@ -4,7 +4,7 @@ import asyncio
import time import time
from typing import Optional, List, Dict, Tuple from typing import Optional, List, Dict, Tuple
import traceback import traceback
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.message_receive.message import MessageRecv from src.chat.message_receive.message import MessageRecv
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.chat.focus_chat.heartFC_chat import HeartFChatting from src.chat.focus_chat.heartFC_chat import HeartFChatting

View File

@@ -1,7 +1,7 @@
import asyncio import asyncio
import time import time
from typing import Dict, Any, Optional, List from typing import Dict, Any, Optional, List
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.chat.heart_flow.sub_heartflow import SubHeartflow, ChatState from src.chat.heart_flow.sub_heartflow import SubHeartflow, ChatState

View File

@@ -1,5 +1,5 @@
from typing import Optional, Tuple, Dict from typing import Optional, Tuple, Dict
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.person_info.person_info import person_info_manager, PersonInfoManager from src.person_info.person_info import person_info_manager, PersonInfoManager

View File

@@ -1,5 +1,5 @@
# Configure logger # Configure logger
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("lpmm") logger = get_logger("lpmm")

View File

@@ -12,7 +12,7 @@ import networkx as nx
import numpy as np import numpy as np
from collections import Counter from collections import Counter
from ...llm_models.utils_model import LLMRequest from ...llm_models.utils_model import LLMRequest
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.memory_system.sample_distribution import MemoryBuildScheduler # 分布生成器 from src.chat.memory_system.sample_distribution import MemoryBuildScheduler # 分布生成器
from ..utils.chat_message_builder import ( from ..utils.chat_message_builder import (
get_raw_msg_by_timestamp, get_raw_msg_by_timestamp,
@@ -829,7 +829,7 @@ class EntorhinalCortex:
) )
if messages: if messages:
time_diff = (datetime.datetime.now().timestamp() - timestamp) / 3600 time_diff = (datetime.datetime.now().timestamp() - timestamp) / 3600
logger.success(f"成功抽取 {time_diff:.1f} 小时前的消息样本,共{len(messages)}") logger.info(f"成功抽取 {time_diff:.1f} 小时前的消息样本,共{len(messages)}")
chat_samples.append(messages) chat_samples.append(messages)
else: else:
logger.debug(f"时间戳 {timestamp} 的消息无需记忆") logger.debug(f"时间戳 {timestamp} 的消息无需记忆")
@@ -1046,8 +1046,8 @@ class EntorhinalCortex:
GraphEdges.delete().where((GraphEdges.source == source) & (GraphEdges.target == target)).execute() GraphEdges.delete().where((GraphEdges.source == source) & (GraphEdges.target == target)).execute()
end_time = time.time() end_time = time.time()
logger.success(f"[同步] 总耗时: {end_time - start_time:.2f}") logger.info(f"[同步] 总耗时: {end_time - start_time:.2f}")
logger.success(f"[同步] 同步了 {len(memory_nodes)} 个节点和 {len(memory_edges)} 条边") logger.info(f"[同步] 同步了 {len(memory_nodes)} 个节点和 {len(memory_edges)} 条边")
async def resync_memory_to_db(self): async def resync_memory_to_db(self):
"""清空数据库并重新同步所有记忆数据""" """清空数据库并重新同步所有记忆数据"""
@@ -1133,8 +1133,8 @@ class EntorhinalCortex:
logger.info(f"[数据库] 写入 {len(edges_data)} 条边耗时: {edge_end - edge_start:.2f}") logger.info(f"[数据库] 写入 {len(edges_data)} 条边耗时: {edge_end - edge_start:.2f}")
end_time = time.time() end_time = time.time()
logger.success(f"[数据库] 重新同步完成,总耗时: {end_time - start_time:.2f}") logger.info(f"[数据库] 重新同步完成,总耗时: {end_time - start_time:.2f}")
logger.success(f"[数据库] 同步了 {len(nodes_data)} 个节点和 {len(edges_data)} 条边") logger.info(f"[数据库] 同步了 {len(nodes_data)} 个节点和 {len(edges_data)} 条边")
def sync_memory_from_db(self): def sync_memory_from_db(self):
"""从数据库同步数据到内存中的图结构""" """从数据库同步数据到内存中的图结构"""
@@ -1209,7 +1209,7 @@ class EntorhinalCortex:
) )
if need_update: if need_update:
logger.success("[数据库] 已为缺失的时间字段进行补充") logger.info("[数据库] 已为缺失的时间字段进行补充")
# 负责整合,遗忘,合并记忆 # 负责整合,遗忘,合并记忆
@@ -1387,7 +1387,7 @@ class ParahippocampalGyrus:
logger.debug(f"进度: [{bar}] {progress:.1f}% ({i}/{len(memory_samples)})") logger.debug(f"进度: [{bar}] {progress:.1f}% ({i}/{len(memory_samples)})")
if all_added_nodes: if all_added_nodes:
logger.success(f"更新记忆: {', '.join(all_added_nodes)}") logger.info(f"更新记忆: {', '.join(all_added_nodes)}")
if all_added_edges: if all_added_edges:
logger.debug(f"强化连接: {', '.join(all_added_edges)}") logger.debug(f"强化连接: {', '.join(all_added_edges)}")
if all_connected_nodes: if all_connected_nodes:
@@ -1396,7 +1396,7 @@ class ParahippocampalGyrus:
await self.hippocampus.entorhinal_cortex.sync_memory_to_db() await self.hippocampus.entorhinal_cortex.sync_memory_to_db()
end_time = time.time() end_time = time.time()
logger.success(f"---------------------记忆构建耗时: {end_time - start_time:.2f} 秒---------------------") logger.info(f"---------------------记忆构建耗时: {end_time - start_time:.2f} 秒---------------------")
async def operation_forget_topic(self, percentage=0.005): async def operation_forget_topic(self, percentage=0.005):
start_time = time.time() start_time = time.time()
@@ -1686,7 +1686,7 @@ class HippocampusManager:
node_count = len(memory_graph.nodes()) node_count = len(memory_graph.nodes())
edge_count = len(memory_graph.edges()) edge_count = len(memory_graph.edges())
logger.success(f"""-------------------------------- logger.info(f"""--------------------------------
记忆系统参数配置: 记忆系统参数配置:
构建间隔: {global_config.memory.memory_build_interval}秒|样本数: {global_config.memory.memory_build_sample_num},长度: {global_config.memory.memory_build_sample_length}|压缩率: {global_config.memory.memory_compress_rate} 构建间隔: {global_config.memory.memory_build_interval}秒|样本数: {global_config.memory.memory_build_sample_num},长度: {global_config.memory.memory_build_sample_length}|压缩率: {global_config.memory.memory_compress_rate}
记忆构建分布: {global_config.memory.memory_build_distribution} 记忆构建分布: {global_config.memory.memory_build_distribution}

View File

@@ -1,7 +1,7 @@
import traceback import traceback
from typing import Dict, Any from typing import Dict, Any
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.manager.mood_manager import mood_manager # 导入情绪管理器 from src.manager.mood_manager import mood_manager # 导入情绪管理器
from src.chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.chat.message_receive.message import MessageRecv from src.chat.message_receive.message import MessageRecv

View File

@@ -13,7 +13,7 @@ from maim_message import GroupInfo, UserInfo
if TYPE_CHECKING: if TYPE_CHECKING:
from .message import MessageRecv from .message import MessageRecv
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from rich.traceback import install from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
@@ -135,7 +135,7 @@ class ChatManager:
"""异步初始化""" """异步初始化"""
try: try:
await self.load_all_streams() await self.load_all_streams()
logger.success(f"聊天管理器已启动,已加载 {len(self.streams)} 个聊天流") logger.info(f"聊天管理器已启动,已加载 {len(self.streams)} 个聊天流")
except Exception as e: except Exception as e:
logger.error(f"聊天管理器启动失败: {str(e)}") logger.error(f"聊天管理器启动失败: {str(e)}")

View File

@@ -5,7 +5,7 @@ from typing import Optional, Any, TYPE_CHECKING
import urllib3 import urllib3
from src.common.logger_manager import get_logger from src.common.logger import get_logger
if TYPE_CHECKING: if TYPE_CHECKING:
from .chat_stream import ChatStream from .chat_stream import ChatStream

View File

@@ -3,7 +3,7 @@ import asyncio
import time import time
from asyncio import Task from asyncio import Task
from typing import Union from typing import Union
from src.common.message.api import global_api from src.common.message.api import get_global_api
# from ...common.database import db # 数据库依赖似乎不需要了,注释掉 # from ...common.database import db # 数据库依赖似乎不需要了,注释掉
from .message import MessageSending, MessageThinking, MessageSet from .message import MessageSending, MessageThinking, MessageSet
@@ -12,7 +12,7 @@ from .storage import MessageStorage
from ...config.config import global_config from ...config.config import global_config
from ..utils.utils import truncate_message, calculate_typing_time, count_messages_between from ..utils.utils import truncate_message, calculate_typing_time, count_messages_between
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from rich.traceback import install from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
@@ -24,7 +24,7 @@ logger = get_logger("sender")
async def send_via_ws(message: MessageSending) -> None: async def send_via_ws(message: MessageSending) -> None:
"""通过 WebSocket 发送消息""" """通过 WebSocket 发送消息"""
try: try:
await global_api.send_message(message) await get_global_api().send_message(message)
except Exception as e: except Exception as e:
logger.error(f"WS发送失败: {e}") logger.error(f"WS发送失败: {e}")
raise ValueError(f"未找到平台:{message.message_info.platform} 的url配置请检查配置文件") from e raise ValueError(f"未找到平台:{message.message_info.platform} 的url配置请检查配置文件") from e
@@ -50,7 +50,7 @@ async def send_message(
try: try:
await send_via_ws(message) await send_via_ws(message)
logger.success(f"发送消息 '{message_preview}' 成功") # 调整日志格式 logger.info(f"发送消息 '{message_preview}' 成功") # 调整日志格式
except Exception as e: except Exception as e:
logger.error(f"发送消息 '{message_preview}' 失败: {str(e)}") logger.error(f"发送消息 '{message_preview}' 失败: {str(e)}")

View File

@@ -5,9 +5,9 @@ from typing import Union
from .message import MessageSending, MessageRecv from .message import MessageSending, MessageRecv
from .chat_stream import ChatStream from .chat_stream import ChatStream
from ...common.database.database_model import Messages, RecalledMessages # Import Peewee models from ...common.database.database_model import Messages, RecalledMessages # Import Peewee models
from src.common.logger import get_module_logger from src.common.logger import get_logger
logger = get_module_logger("message_storage") logger = get_logger("message_storage")
class MessageStorage: class MessageStorage:

View File

@@ -4,7 +4,7 @@ import traceback
from random import random from random import random
from typing import List, Optional # 导入 Optional from typing import List, Optional # 导入 Optional
from maim_message import UserInfo, Seg from maim_message import UserInfo, Seg
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.heart_flow.utils_chat import get_chat_type_and_target_info from src.chat.heart_flow.utils_chat import get_chat_type_and_target_info
from src.manager.mood_manager import mood_manager from src.manager.mood_manager import mood_manager
from src.chat.message_receive.chat_stream import ChatStream, chat_manager from src.chat.message_receive.chat_stream import ChatStream, chat_manager

View File

@@ -1,5 +1,5 @@
from typing import List, Any, Dict from typing import List, Any, Dict
from src.common.logger_manager import get_logger from src.common.logger 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.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

View File

@@ -12,7 +12,7 @@ from src.chat.message_receive.message import UserInfo
from src.chat.message_receive.chat_stream import ChatStream, chat_manager from src.chat.message_receive.chat_stream import ChatStream, chat_manager
from src.chat.message_receive.message_sender import message_manager from src.chat.message_receive.message_sender import message_manager
from src.config.config import global_config from src.config.config import global_config
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("normal_chat_expressor") logger = get_logger("normal_chat_expressor")

View File

@@ -5,7 +5,7 @@ from src.config.config import global_config
from src.chat.message_receive.message import MessageThinking from src.chat.message_receive.message import MessageThinking
from src.chat.normal_chat.normal_prompt import prompt_builder from src.chat.normal_chat.normal_prompt import prompt_builder
from src.chat.utils.timer_calculator import Timer from src.chat.utils.timer_calculator import Timer
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.person_info.person_info import person_info_manager, PersonInfoManager from src.person_info.person_info import person_info_manager, PersonInfoManager
from src.chat.utils.utils import process_llm_response from src.chat.utils.utils import process_llm_response

View File

@@ -3,7 +3,7 @@ from typing import Dict, Any
from rich.traceback import install from rich.traceback import install
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.common.logger_manager import get_logger from src.common.logger 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

View File

@@ -1,5 +1,5 @@
from src.config.config import global_config from src.config.config import global_config
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.individuality.individuality import individuality from src.individuality.individuality import individuality
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
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

View File

@@ -1,4 +1,4 @@
from src.common.logger import LogConfig, WILLING_STYLE_CONFIG, LoguruLogger, get_module_logger from src.common.logger import get_logger
from dataclasses import dataclass from dataclasses import dataclass
from src.config.config import global_config from src.config.config import global_config
from src.chat.message_receive.chat_stream import ChatStream, GroupInfo from src.chat.message_receive.chat_stream import ChatStream, GroupInfo
@@ -33,12 +33,7 @@ set_willing 设置某聊天流意愿
示例: 在 `mode_aggressive.py` 中,类名应为 `AggressiveWillingManager` 示例: 在 `mode_aggressive.py` 中,类名应为 `AggressiveWillingManager`
""" """
willing_config = LogConfig( logger = get_logger("willing")
# 使用消息发送专用样式
console_format=WILLING_STYLE_CONFIG["console_format"],
file_format=WILLING_STYLE_CONFIG["file_format"],
)
logger = get_module_logger("willing", config=willing_config)
@dataclass @dataclass
@@ -93,7 +88,7 @@ class BaseWillingManager(ABC):
self.chat_reply_willing: Dict[str, float] = {} # 存储每个聊天流的回复意愿(chat_id) self.chat_reply_willing: Dict[str, float] = {} # 存储每个聊天流的回复意愿(chat_id)
self.ongoing_messages: Dict[str, WillingInfo] = {} # 当前正在进行的消息(message_id) self.ongoing_messages: Dict[str, WillingInfo] = {} # 当前正在进行的消息(message_id)
self.lock = asyncio.Lock() self.lock = asyncio.Lock()
self.logger: LoguruLogger = logger self.logger = logger
def setup(self, message: MessageRecv, chat: ChatStream, is_mentioned_bot: bool, interested_rate: float): def setup(self, message: MessageRecv, chat: ChatStream, is_mentioned_bot: bool, interested_rate: float):
person_id = PersonInfoManager.get_person_id(chat.platform, chat.user_info.user_id) person_id = PersonInfoManager.get_person_id(chat.platform, chat.user_info.user_id)

View File

@@ -1,88 +0,0 @@
import sys
import loguru
from enum import Enum
class LogClassification(Enum):
BASE = "base"
MEMORY = "memory"
EMOJI = "emoji"
CHAT = "chat"
PBUILDER = "promptbuilder"
class LogModule:
logger = loguru.logger.opt()
def __init__(self):
pass
def setup_logger(self, log_type: LogClassification):
"""配置日志格式
Args:
log_type: 日志类型可选值BASE(基础日志)、MEMORY(记忆系统日志)、EMOJI(表情包系统日志)
"""
# 移除默认日志处理器
self.logger.remove()
# 基础日志格式
base_format = (
"<green>{time:HH:mm:ss}</green> | <level>{level: <8}</level> | "
" d<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
)
chat_format = (
"<green>{time:HH:mm:ss}</green> | <level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
)
# 记忆系统日志格式
memory_format = (
"<green>{time:HH:mm}</green> | <level>{level: <8}</level> | "
"<light-magenta>海马体</light-magenta> | <level>{message}</level>"
)
# 表情包系统日志格式
emoji_format = (
"<green>{time:HH:mm}</green> | <level>{level: <8}</level> | <yellow>表情包</yellow> | "
"<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
)
promptbuilder_format = (
"<green>{time:HH:mm}</green> | <level>{level: <8}</level> | <yellow>Prompt</yellow> | "
"<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
)
# 根据日志类型选择日志格式和输出
if log_type == LogClassification.CHAT:
self.logger.add(
sys.stderr,
format=chat_format,
# level="INFO"
)
elif log_type == LogClassification.PBUILDER:
self.logger.add(
sys.stderr,
format=promptbuilder_format,
# level="INFO"
)
elif log_type == LogClassification.MEMORY:
# 同时输出到控制台和文件
self.logger.add(
sys.stderr,
format=memory_format,
# level="INFO"
)
self.logger.add("logs/memory.log", format=memory_format, level="INFO", rotation="1 day", retention="7 days")
elif log_type == LogClassification.EMOJI:
self.logger.add(
sys.stderr,
format=emoji_format,
# level="INFO"
)
self.logger.add("logs/emoji.log", format=emoji_format, level="INFO", rotation="1 day", retention="7 days")
else: # BASE
self.logger.add(sys.stderr, format=base_format, level="INFO")
return self.logger

View File

@@ -3,14 +3,14 @@ import re
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
import asyncio import asyncio
import contextvars import contextvars
from src.common.logger import get_module_logger from src.common.logger import get_logger
# import traceback # import traceback
from rich.traceback import install from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
logger = get_module_logger("prompt_build") logger = get_logger("prompt_build")
class PromptContext: class PromptContext:

View File

@@ -3,14 +3,14 @@ from datetime import datetime, timedelta
from typing import Any, Dict, Tuple, List from typing import Any, Dict, Tuple, List
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.manager.async_task_manager import AsyncTask from src.manager.async_task_manager import AsyncTask
from ...common.database.database import db # This db is the Peewee database instance from ...common.database.database import db # This db is the Peewee database instance
from ...common.database.database_model import OnlineTime, LLMUsage, Messages # Import the Peewee model from ...common.database.database_model import OnlineTime, LLMUsage, Messages # Import the Peewee model
from src.manager.local_store_manager import local_storage from src.manager.local_store_manager import local_storage
logger = get_module_logger("maibot_statistic") logger = get_logger("maibot_statistic")
# 统计数据的键 # 统计数据的键
TOTAL_REQ_CNT = "total_requests" TOTAL_REQ_CNT = "total_requests"

View File

@@ -13,9 +13,9 @@ from pathlib import Path
import jieba import jieba
from pypinyin import Style, pinyin from pypinyin import Style, pinyin
from src.common.logger import get_module_logger from src.common.logger import get_logger
logger = get_module_logger("typo_gen") logger = get_logger("typo_gen")
class ChineseTypoGenerator: class ChineseTypoGenerator:

View File

@@ -7,7 +7,7 @@ import jieba
import numpy as np import numpy as np
from maim_message import UserInfo from maim_message import UserInfo
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.manager.mood_manager import mood_manager from src.manager.mood_manager import mood_manager
from ..message_receive.message import MessageRecv from ..message_receive.message import MessageRecv
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
@@ -15,7 +15,7 @@ from .typo_generator import ChineseTypoGenerator
from ...config.config import global_config from ...config.config import global_config
from ...common.message_repository import find_messages, count_messages from ...common.message_repository import find_messages, count_messages
logger = get_module_logger("chat_utils") logger = get_logger("chat_utils")
def is_english_letter(char: str) -> bool: def is_english_letter(char: str) -> bool:

View File

@@ -13,7 +13,7 @@ from src.common.database.database_model import Images, ImageDescriptions
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.common.logger_manager import get_logger from src.common.logger import get_logger
from rich.traceback import install from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)

View File

@@ -1,7 +1,7 @@
from peewee import Model, DoubleField, IntegerField, BooleanField, TextField, FloatField, DateTimeField from peewee import Model, DoubleField, IntegerField, BooleanField, TextField, FloatField, DateTimeField
from .database import db from .database import db
import datetime import datetime
from ..logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("database_model") logger = get_logger("database_model")
# 请在此处定义您的数据库实例。 # 请在此处定义您的数据库实例。

View File

@@ -1,110 +0,0 @@
import functools
import inspect
from typing import Callable, Any
from .logger import logger, add_custom_style_handler
from rich.traceback import install
install(extra_lines=3)
def use_log_style(
style_name: str,
console_format: str,
console_level: str = "INFO",
# file_format: Optional[str] = None, # 暂未支持文件输出
# file_level: str = "DEBUG",
) -> Callable:
"""装饰器:为函数内的日志启用特定的自定义样式。
Args:
style_name (str): 自定义样式的唯一名称。
console_format (str): 控制台输出的格式字符串。
console_level (str, optional): 控制台日志级别. Defaults to "INFO".
# file_format (Optional[str], optional): 文件输出格式 (暂未支持). Defaults to None.
# file_level (str, optional): 文件日志级别 (暂未支持). Defaults to "DEBUG".
Returns:
Callable: 返回装饰器本身。
"""
def decorator(func: Callable) -> Callable:
# 获取被装饰函数所在的模块名
module = inspect.getmodule(func)
if module is None:
# 如果无法获取模块(例如,在交互式解释器中定义函数),则使用默认名称
module_name = "unknown_module"
logger.warning(f"无法确定函数 {func.__name__} 的模块,将使用 '{module_name}'")
else:
module_name = module.__name__
# 在函数首次被调用(或模块加载时)确保自定义处理器已添加
# 注意:这会在模块加载时执行,而不是每次函数调用时
# print(f"Setting up custom style '{style_name}' for module '{module_name}' in decorator definition")
add_custom_style_handler(
module_name=module_name,
style_name=style_name,
console_format=console_format,
console_level=console_level,
# file_format=file_format,
# file_level=file_level,
)
@functools.wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> Any:
# 创建绑定了模块名和自定义样式标记的 logger 实例
custom_logger = logger.bind(module=module_name, custom_style=style_name)
# print(f"Executing {func.__name__} with custom logger for style '{style_name}'")
# 将自定义 logger 作为第一个参数传递给原函数
# 注意:这要求被装饰的函数第一个参数用于接收 logger
try:
return func(custom_logger, *args, **kwargs)
except TypeError as e:
# 捕获可能的类型错误,比如原函数不接受 logger 参数
logger.error(
f"调用 {func.__name__} 时出错:请确保该函数接受一个 logger 实例作为其第一个参数。错误:{e}"
)
# 可以选择重新抛出异常或返回特定值
raise e
return wrapper
return decorator
# --- 示例用法 (可以在其他模块中这样使用) ---
# # 假设这是你的模块 my_module.py
# from src.common.log_decorators import use_log_style
# from src.common.logger import get_module_logger, LoguruLogger
# # 获取模块的标准 logger
# standard_logger = get_module_logger(__name__)
# # 定义一个自定义样式
# MY_SPECIAL_STYLE = "special"
# MY_SPECIAL_FORMAT = "<bg yellow><black> SPECIAL [{time:HH:mm:ss}] </black></bg yellow> | <level>{message}</level>"
# @use_log_style(style_name=MY_SPECIAL_STYLE, console_format=MY_SPECIAL_FORMAT)
# def my_function_with_special_logs(custom_logger: LoguruLogger, x: int, y: int):
# standard_logger.info("这是一条使用标准格式的日志")
# custom_logger.info(f"开始执行特殊操作,参数: x={x}, y={y}")
# result = x + y
# custom_logger.success(f"特殊操作完成,结果: {result}")
# standard_logger.info("标准格式日志:函数即将结束")
# return result
# @use_log_style(style_name="another_style", console_format="<cyan>任务:</cyan> {message}")
# def another_task(task_logger: LoguruLogger, task_name: str):
# standard_logger.debug("准备执行另一个任务")
# task_logger.info(f"正在处理任务 '{task_name}'")
# # ... 执行任务 ...
# task_logger.warning("任务处理中遇到一个警告")
# standard_logger.info("另一个任务的标准日志")
# if __name__ == "__main__":
# print("\n--- 调用 my_function_with_special_logs ---")
# my_function_with_special_logs(10, 5)
# print("\n--- 调用 another_task ---")
# another_task("数据清理")
# print("\n--- 单独使用标准 logger ---")
# standard_logger.info("这是一条完全独立的标准日志")

File diff suppressed because it is too large Load Diff

View File

@@ -1,118 +0,0 @@
from src.common.logger import get_module_logger, LogConfig
from src.common.logger import (
BACKGROUND_TASKS_STYLE_CONFIG,
MAIN_STYLE_CONFIG,
MEMORY_STYLE_CONFIG,
PFC_STYLE_CONFIG,
MOOD_STYLE_CONFIG,
TOOL_USE_STYLE_CONFIG,
RELATION_STYLE_CONFIG,
CONFIG_STYLE_CONFIG,
HEARTFLOW_STYLE_CONFIG,
CHAT_STYLE_CONFIG,
EMOJI_STYLE_CONFIG,
SUB_HEARTFLOW_STYLE_CONFIG,
SUB_HEARTFLOW_MIND_STYLE_CONFIG,
SUBHEARTFLOW_MANAGER_STYLE_CONFIG,
BASE_TOOL_STYLE_CONFIG,
CHAT_STREAM_STYLE_CONFIG,
PERSON_INFO_STYLE_CONFIG,
WILLING_STYLE_CONFIG,
PFC_ACTION_PLANNER_STYLE_CONFIG,
STATISTIC_STYLE_CONFIG,
NORMAL_CHAT_STYLE_CONFIG,
FOCUS_CHAT_STYLE_CONFIG,
LPMM_STYLE_CONFIG,
HFC_STYLE_CONFIG,
OBSERVATION_STYLE_CONFIG,
PLANNER_STYLE_CONFIG,
PROCESSOR_STYLE_CONFIG,
ACTION_TAKEN_STYLE_CONFIG,
TIANYI_STYLE_CONFIG,
REMOTE_STYLE_CONFIG,
TOPIC_STYLE_CONFIG,
SENDER_STYLE_CONFIG,
CONFIRM_STYLE_CONFIG,
MODEL_UTILS_STYLE_CONFIG,
PROMPT_STYLE_CONFIG,
CHANGE_MOOD_TOOL_STYLE_CONFIG,
CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG,
GET_KNOWLEDGE_TOOL_STYLE_CONFIG,
GET_TIME_DATE_TOOL_STYLE_CONFIG,
LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG,
MESSAGE_BUFFER_STYLE_CONFIG,
CHAT_MESSAGE_STYLE_CONFIG,
CHAT_IMAGE_STYLE_CONFIG,
INIT_STYLE_CONFIG,
INTEREST_CHAT_STYLE_CONFIG,
API_SERVER_STYLE_CONFIG,
NORMAL_CHAT_RESPONSE_STYLE_CONFIG,
EXPRESS_STYLE_CONFIG,
ACTION_MANAGER_STYLE_CONFIG,
)
# 可根据实际需要补充更多模块配置
MODULE_LOGGER_CONFIGS = {
"background_tasks": BACKGROUND_TASKS_STYLE_CONFIG, # 后台任务
"main": MAIN_STYLE_CONFIG, # 主程序
"memory": MEMORY_STYLE_CONFIG, # 海马体
"pfc": PFC_STYLE_CONFIG, # PFC
"mood": MOOD_STYLE_CONFIG, # 心情
"tool_use": TOOL_USE_STYLE_CONFIG, # 工具使用
"relation": RELATION_STYLE_CONFIG, # 关系
"config": CONFIG_STYLE_CONFIG, # 配置
"heartflow": HEARTFLOW_STYLE_CONFIG, # 麦麦大脑袋
"normal_chat_response": NORMAL_CHAT_RESPONSE_STYLE_CONFIG, # 麦麦组织语言
"chat": CHAT_STYLE_CONFIG, # 见闻
"emoji": EMOJI_STYLE_CONFIG, # 表情包
"sub_heartflow": SUB_HEARTFLOW_STYLE_CONFIG, # 麦麦水群
"sub_heartflow_mind": SUB_HEARTFLOW_MIND_STYLE_CONFIG, # 麦麦小脑袋
"subheartflow_manager": SUBHEARTFLOW_MANAGER_STYLE_CONFIG, # 麦麦水群[管理]
"base_tool": BASE_TOOL_STYLE_CONFIG, # 工具使用
"chat_stream": CHAT_STREAM_STYLE_CONFIG, # 聊天流
"person_info": PERSON_INFO_STYLE_CONFIG, # 人物信息
"willing": WILLING_STYLE_CONFIG, # 意愿
"pfc_action_planner": PFC_ACTION_PLANNER_STYLE_CONFIG, # PFC私聊规划
"statistic": STATISTIC_STYLE_CONFIG, # 麦麦统计
"lpmm": LPMM_STYLE_CONFIG, # LPMM
"hfc": HFC_STYLE_CONFIG, # HFC
"observation": OBSERVATION_STYLE_CONFIG, # 聊天观察
"planner": PLANNER_STYLE_CONFIG, # 规划器
"processor": PROCESSOR_STYLE_CONFIG, # 处理器
"action_taken": ACTION_TAKEN_STYLE_CONFIG, # 动作
"tianyi": TIANYI_STYLE_CONFIG, # 天依
"remote": REMOTE_STYLE_CONFIG, # 远程
"topic": TOPIC_STYLE_CONFIG, # 话题
"sender": SENDER_STYLE_CONFIG, # 消息发送
"confirm": CONFIRM_STYLE_CONFIG, # EULA与PRIVACY确认
"model_utils": MODEL_UTILS_STYLE_CONFIG, # 模型工具
"prompt": PROMPT_STYLE_CONFIG, # 提示词
"change_mood_tool": CHANGE_MOOD_TOOL_STYLE_CONFIG, # 改变心情工具
"change_relationship": CHANGE_RELATIONSHIP_TOOL_STYLE_CONFIG, # 改变关系工具
"get_knowledge_tool": GET_KNOWLEDGE_TOOL_STYLE_CONFIG, # 获取知识工具
"get_time_date": GET_TIME_DATE_TOOL_STYLE_CONFIG, # 获取时间日期工具
"lpm_get_knowledge_tool": LPMM_GET_KNOWLEDGE_TOOL_STYLE_CONFIG, # LPMM获取知识工具
"message_buffer": MESSAGE_BUFFER_STYLE_CONFIG, # 消息缓冲
"chat_message": CHAT_MESSAGE_STYLE_CONFIG, # 聊天消息
"chat_image": CHAT_IMAGE_STYLE_CONFIG, # 聊天图片
"init": INIT_STYLE_CONFIG, # 初始化
"interest_chat": INTEREST_CHAT_STYLE_CONFIG, # 兴趣
"api": API_SERVER_STYLE_CONFIG, # API服务器
"normal_chat": NORMAL_CHAT_STYLE_CONFIG, # 一般水群
"focus_chat": FOCUS_CHAT_STYLE_CONFIG, # 专注水群
"expressor": EXPRESS_STYLE_CONFIG, # 麦麦表达
"action_manager": ACTION_MANAGER_STYLE_CONFIG, # 动作选择
# ...如有更多模块,继续添加...
}
def get_logger(module_name: str):
style_config = MODULE_LOGGER_CONFIGS.get(module_name)
if style_config:
log_config = LogConfig(
console_format=style_config["console_format"],
file_format=style_config["file_format"],
)
return get_module_logger(module_name, config=log_config)
# 若无特殊样式,使用默认
return get_module_logger(module_name)

View File

@@ -2,9 +2,9 @@
__version__ = "0.1.0" __version__ = "0.1.0"
from .api import global_api from .api import get_global_api
__all__ = [ __all__ = [
"global_api", "get_global_api",
] ]

View File

@@ -1,11 +1,16 @@
from src.common.server import global_server from src.common.server import get_global_server
import os import os
import importlib.metadata import importlib.metadata
from maim_message import MessageServer from maim_message import MessageServer
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.config.config import global_config from src.config.config import global_config
global_api = None
def get_global_api() -> MessageServer:
"""获取全局MessageServer实例"""
global global_api
if global_api is None:
# 检查maim_message版本 # 检查maim_message版本
try: try:
maim_message_version = importlib.metadata.version("maim_message") maim_message_version = importlib.metadata.version("maim_message")
@@ -20,7 +25,7 @@ maim_message_config = global_config.maim_message
kwargs = { kwargs = {
"host": os.environ["HOST"], "host": os.environ["HOST"],
"port": int(os.environ["PORT"]), "port": int(os.environ["PORT"]),
"app": global_server.get_app(), "app": get_global_server().get_app(),
} }
# 只有在版本 >= 0.3.0 时才使用高级特性 # 只有在版本 >= 0.3.0 时才使用高级特性
@@ -47,9 +52,8 @@ if version_compatible:
kwargs["ssl_keyfile"] = maim_message_config.key_file kwargs["ssl_keyfile"] = maim_message_config.key_file
kwargs["enable_custom_uvicorn_logger"] = False kwargs["enable_custom_uvicorn_logger"] = False
global_api = MessageServer(**kwargs) global_api = MessageServer(**kwargs)
if version_compatible and maim_message_config.auth_token: if version_compatible and maim_message_config.auth_token:
for token in maim_message_config.auth_token: for token in maim_message_config.auth_token:
global_api.add_valid_token(token) global_api.add_valid_token(token)
return global_api

View File

@@ -1,10 +1,10 @@
from src.common.database.database_model import Messages # 更改导入 from src.common.database.database_model import Messages # 更改导入
from src.common.logger import get_module_logger from src.common.logger import get_logger
import traceback import traceback
from typing import List, Any, Optional from typing import List, Any, Optional
from peewee import Model # 添加 Peewee Model 导入 from peewee import Model # 添加 Peewee Model 导入
logger = get_module_logger(__name__) logger = get_logger(__name__)
def _model_to_dict(model_instance: Model) -> dict[str, Any]: def _model_to_dict(model_instance: Model) -> dict[str, Any]:

View File

@@ -3,8 +3,7 @@ import asyncio
import requests import requests
import platform import platform
# from loguru import logger from src.common.logger import get_logger
from src.common.logger_manager import get_logger
from src.config.config import global_config from src.config.config import global_config
from src.manager.async_task_manager import AsyncTask from src.manager.async_task_manager import AsyncTask
from src.manager.local_store_manager import local_storage from src.manager.local_store_manager import local_storage

View File

@@ -90,4 +90,11 @@ class Server:
return self.app return self.app
global_server = None
def get_global_server() -> Server:
"""获取全局服务器实例"""
global global_server
if global_server is None:
global_server = Server(host=os.environ["HOST"], port=int(os.environ["PORT"])) global_server = Server(host=os.environ["HOST"], port=int(os.environ["PORT"]))
return global_server

View File

@@ -8,7 +8,7 @@ from datetime import datetime
from tomlkit import TOMLDocument from tomlkit import TOMLDocument
from tomlkit.items import Table from tomlkit.items import Table
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from rich.traceback import install from rich.traceback import install
from src.config.config_base import ConfigBase from src.config.config_base import ConfigBase

View File

@@ -1,6 +1,6 @@
import time import time
from typing import Tuple, Optional # 增加了 Optional from typing import Tuple, Optional # 增加了 Optional
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.experimental.PFC.chat_observer import ChatObserver from src.experimental.PFC.chat_observer import ChatObserver

View File

@@ -2,7 +2,7 @@ import time
import asyncio import asyncio
import traceback import traceback
from typing import Optional, Dict, Any, List from typing import Optional, Dict, Any, List
from src.common.logger import get_module_logger from src.common.logger import get_logger
from maim_message import UserInfo from maim_message import UserInfo
from src.config.config import global_config from src.config.config import global_config
from src.experimental.PFC.chat_states import ( from src.experimental.PFC.chat_states import (
@@ -15,7 +15,7 @@ from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
logger = get_module_logger("chat_observer") logger = get_logger("chat_observer")
class ChatObserver: class ChatObserver:

View File

@@ -11,7 +11,7 @@ from src.chat.message_receive.message import Message
from .pfc_types import ConversationState from .pfc_types import ConversationState
from .pfc import ChatObserver, GoalAnalyzer from .pfc import ChatObserver, GoalAnalyzer
from .message_sender import DirectMessageSender from .message_sender import DirectMessageSender
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from .action_planner import ActionPlanner from .action_planner import ActionPlanner
from .observation_info import ObservationInfo from .observation_info import ObservationInfo
from .conversation_info import ConversationInfo # 确保导入 ConversationInfo from .conversation_info import ConversationInfo # 确保导入 ConversationInfo

View File

@@ -1,6 +1,6 @@
import time import time
from typing import Optional from typing import Optional
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.chat.message_receive.chat_stream import ChatStream from src.chat.message_receive.chat_stream import ChatStream
from src.chat.message_receive.message import Message from src.chat.message_receive.message import Message
from maim_message import UserInfo, Seg from maim_message import UserInfo, Seg
@@ -13,7 +13,7 @@ from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
logger = get_module_logger("message_sender") logger = get_logger("message_sender")
class DirectMessageSender: class DirectMessageSender:

View File

@@ -1,13 +1,13 @@
from typing import List, Optional, Dict, Any, Set from typing import List, Optional, Dict, Any, Set
from maim_message import UserInfo from maim_message import UserInfo
import time import time
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.experimental.PFC.chat_observer import ChatObserver from src.experimental.PFC.chat_observer import ChatObserver
from src.experimental.PFC.chat_states import NotificationHandler, NotificationType, Notification from src.experimental.PFC.chat_states import NotificationHandler, NotificationType, Notification
from src.chat.utils.chat_message_builder import build_readable_messages from src.chat.utils.chat_message_builder import build_readable_messages
import traceback # 导入 traceback 用于调试 import traceback # 导入 traceback 用于调试
logger = get_module_logger("observation_info") logger = get_logger("observation_info")
class ObservationInfoHandler(NotificationHandler): class ObservationInfoHandler(NotificationHandler):

View File

@@ -1,5 +1,5 @@
from typing import List, Tuple, TYPE_CHECKING from typing import List, Tuple, TYPE_CHECKING
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.experimental.PFC.chat_observer import ChatObserver from src.experimental.PFC.chat_observer import ChatObserver
@@ -15,7 +15,7 @@ install(extra_lines=3)
if TYPE_CHECKING: if TYPE_CHECKING:
pass pass
logger = get_module_logger("pfc") logger = get_logger("pfc")
def _calculate_similarity(goal1: str, goal2: str) -> float: def _calculate_similarity(goal1: str, goal2: str) -> float:
@@ -289,13 +289,13 @@ class GoalAnalyzer:
# """直接发送消息到平台的发送器""" # """直接发送消息到平台的发送器"""
# def __init__(self, private_name: str): # def __init__(self, private_name: str):
# self.logger = get_module_logger("direct_sender") # self.logger = get_logger("direct_sender")
# self.storage = MessageStorage() # self.storage = MessageStorage()
# self.private_name = private_name # self.private_name = private_name
# async def send_via_ws(self, message: MessageSending) -> None: # async def send_via_ws(self, message: MessageSending) -> None:
# try: # try:
# await global_api.send_message(message) # await get_global_api().send_message(message)
# except Exception as e: # except Exception as e:
# raise ValueError(f"未找到平台:{message.message_info.platform} 的url配置请检查配置文件") from e # raise ValueError(f"未找到平台:{message.message_info.platform} 的url配置请检查配置文件") from e
@@ -341,6 +341,6 @@ class GoalAnalyzer:
# try: # try:
# await self.send_via_ws(message) # await self.send_via_ws(message)
# await self.storage.store_message(message, chat_stream) # await self.storage.store_message(message, chat_stream)
# logger.success(f"[私聊][{self.private_name}]PFC消息已发送: {content}") # logger.info(f"[私聊][{self.private_name}]PFC消息已发送: {content}")
# except Exception as e: # except Exception as e:
# logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}") # logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")

View File

@@ -1,5 +1,5 @@
from typing import List, Tuple from typing import List, Tuple
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.chat.memory_system.Hippocampus import hippocampus_manager from src.chat.memory_system.Hippocampus import hippocampus_manager
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
@@ -7,7 +7,7 @@ from src.chat.message_receive.message import Message
from src.chat.knowledge.knowledge_lib import qa_manager from src.chat.knowledge.knowledge_lib import qa_manager
from src.chat.utils.chat_message_builder import build_readable_messages from src.chat.utils.chat_message_builder import build_readable_messages
logger = get_module_logger("knowledge_fetcher") logger = get_logger("knowledge_fetcher")
class KnowledgeFetcher: class KnowledgeFetcher:

View File

@@ -1,10 +1,10 @@
import time import time
from typing import Dict, Optional from typing import Dict, Optional
from src.common.logger import get_module_logger from src.common.logger import get_logger
from .conversation import Conversation from .conversation import Conversation
import traceback import traceback
logger = get_module_logger("pfc_manager") logger = get_logger("pfc_manager")
class PFCManager: class PFCManager:

View File

@@ -1,9 +1,9 @@
import json import json
import re import re
from typing import Dict, Any, Optional, Tuple, List, Union from typing import Dict, Any, Optional, Tuple, List, Union
from src.common.logger import get_module_logger from src.common.logger import get_logger
logger = get_module_logger("pfc_utils") logger = get_logger("pfc_utils")
def get_items_from_json( def get_items_from_json(

View File

@@ -1,12 +1,12 @@
import json import json
from typing import Tuple, List, Dict, Any from typing import Tuple, List, Dict, Any
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.experimental.PFC.chat_observer import ChatObserver from src.experimental.PFC.chat_observer import ChatObserver
from maim_message import UserInfo from maim_message import UserInfo
logger = get_module_logger("reply_checker") logger = get_logger("reply_checker")
class ReplyChecker: class ReplyChecker:

View File

@@ -1,5 +1,5 @@
from typing import Tuple, List, Dict, Any from typing import Tuple, List, Dict, Any
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.experimental.PFC.chat_observer import ChatObserver from src.experimental.PFC.chat_observer import ChatObserver
@@ -9,7 +9,7 @@ from .observation_info import ObservationInfo
from .conversation_info import ConversationInfo from .conversation_info import ConversationInfo
from src.chat.utils.chat_message_builder import build_readable_messages from src.chat.utils.chat_message_builder import build_readable_messages
logger = get_module_logger("reply_generator") logger = get_logger("reply_generator")
# --- 定义 Prompt 模板 --- # --- 定义 Prompt 模板 ---

View File

@@ -1,4 +1,4 @@
from src.common.logger import get_module_logger from src.common.logger import get_logger
from .chat_observer import ChatObserver from .chat_observer import ChatObserver
from .conversation_info import ConversationInfo from .conversation_info import ConversationInfo
@@ -7,7 +7,7 @@ from src.config.config import global_config
import time import time
import asyncio import asyncio
logger = get_module_logger("waiter") logger = get_logger("waiter")
# --- 在这里设定你想要的超时时间(秒) --- # --- 在这里设定你想要的超时时间(秒) ---
# 例如: 120 秒 = 2 分钟 # 例如: 120 秒 = 2 分钟

View File

@@ -1,4 +1,4 @@
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.chat.message_receive.message import MessageRecv from src.chat.message_receive.message import MessageRecv
from src.chat.message_receive.storage import MessageStorage from src.chat.message_receive.storage import MessageStorage
from src.config.config import global_config from src.config.config import global_config

View File

@@ -1,6 +1,6 @@
import random import random
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.prompt_builder import Prompt, global_prompt_manager

View File

@@ -5,13 +5,13 @@ from typing import Tuple, Union
import aiohttp import aiohttp
import requests import requests
from src.common.logger import get_module_logger from src.common.logger import get_logger
from src.common.tcp_connector import get_tcp_connector from src.common.tcp_connector import get_tcp_connector
from rich.traceback import install from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
logger = get_module_logger("offline_llm") logger = get_logger("offline_llm")
class LLMRequestOff: class LLMRequestOff:

View File

@@ -1,11 +1,12 @@
import asyncio import asyncio
import json import json
import re import re
import sys
from datetime import datetime from datetime import datetime
from typing import Tuple, Union, Dict, Any from typing import Tuple, Union, Dict, Any
import aiohttp import aiohttp
from aiohttp.client import ClientResponse from aiohttp.client import ClientResponse
from src.common.logger import get_module_logger from src.common.logger import get_logger
import base64 import base64
from PIL import Image from PIL import Image
import io import io
@@ -18,7 +19,7 @@ from rich.traceback import install
install(extra_lines=3) install(extra_lines=3)
logger = get_module_logger("model_utils") logger = get_logger("model_utils")
class PayLoadTooLargeError(Exception): class PayLoadTooLargeError(Exception):
@@ -115,6 +116,8 @@ class LLMRequest:
logger.error(f"原始 model dict 信息:{model}") logger.error(f"原始 model dict 信息:{model}")
logger.error(f"配置错误:找不到对应的配置项 - {str(e)}") logger.error(f"配置错误:找不到对应的配置项 - {str(e)}")
raise ValueError(f"配置错误:找不到对应的配置项 - {str(e)}") from e raise ValueError(f"配置错误:找不到对应的配置项 - {str(e)}") from e
except KeyError as e:
logger.warn(f"找不到{model['provider']}_KEY或{model['provider']}_BASE_URL环境变量请检查配置文件或环境变量设置。")
self.model_name: str = model["name"] self.model_name: str = model["name"]
self.params = kwargs self.params = kwargs
@@ -885,7 +888,7 @@ def compress_base64_image_by_scale(base64_data: str, target_size: int = 0.8 * 10
# 获取压缩后的数据并转换为base64 # 获取压缩后的数据并转换为base64
compressed_data = output_buffer.getvalue() compressed_data = output_buffer.getvalue()
logger.success(f"压缩图片: {original_width}x{original_height} -> {new_width}x{new_height}") logger.info(f"压缩图片: {original_width}x{original_height} -> {new_width}x{new_height}")
logger.info(f"压缩前大小: {len(image_data) / 1024:.1f}KB, 压缩后大小: {len(compressed_data) / 1024:.1f}KB") logger.info(f"压缩前大小: {len(image_data) / 1024:.1f}KB, 压缩后大小: {len(compressed_data) / 1024:.1f}KB")
return base64.b64encode(compressed_data).decode("utf-8") return base64.b64encode(compressed_data).decode("utf-8")

View File

@@ -1,34 +1,34 @@
import asyncio import asyncio
import time import time
from maim_message import MessageServer from maim_message import MessageServer
from .common.remote import TelemetryHeartBeatTask from src.common.remote import TelemetryHeartBeatTask
from .manager.async_task_manager import async_task_manager from src.manager.async_task_manager import async_task_manager
from .chat.utils.statistic import OnlineTimeRecordTask, StatisticOutputTask from src.chat.utils.statistic import OnlineTimeRecordTask, StatisticOutputTask
from .manager.mood_manager import MoodPrintTask, MoodUpdateTask from src.manager.mood_manager import MoodPrintTask, MoodUpdateTask
from .chat.emoji_system.emoji_manager import emoji_manager from src.chat.emoji_system.emoji_manager import emoji_manager
from .chat.normal_chat.willing.willing_manager import willing_manager from src.chat.normal_chat.willing.willing_manager import willing_manager
from .chat.message_receive.chat_stream import chat_manager from src.chat.message_receive.chat_stream import chat_manager
from src.chat.heart_flow.heartflow import heartflow from src.chat.heart_flow.heartflow import heartflow
from .chat.message_receive.message_sender import message_manager from src.chat.message_receive.message_sender import message_manager
from .chat.message_receive.storage import MessageStorage from src.chat.message_receive.storage import MessageStorage
from .config.config import global_config from src.config.config import global_config
from .chat.message_receive.bot import chat_bot from src.chat.message_receive.bot import chat_bot
from .common.logger_manager import get_logger from src.common.logger import get_logger
from .individuality.individuality import individuality, Individuality from src.individuality.individuality import individuality, Individuality
from .common.server import global_server, Server from src.common.server import get_global_server, Server
from rich.traceback import install from rich.traceback import install
from .chat.focus_chat.expressors.exprssion_learner import expression_learner from src.chat.focus_chat.expressors.exprssion_learner import expression_learner
from .api.main import start_api_server from src.api.main import start_api_server
# 导入新的插件管理器 # 导入新的插件管理器
from src.plugin_system.core.plugin_manager import plugin_manager from src.plugin_system.core.plugin_manager import plugin_manager
# 导入消息API和traceback模块 # 导入消息API和traceback模块
from src.common.message import global_api from src.common.message import get_global_api
# 条件导入记忆系统 # 条件导入记忆系统
if global_config.memory.enable_memory: if global_config.memory.enable_memory:
from .chat.memory_system.Hippocampus import hippocampus_manager from src.chat.memory_system.Hippocampus import hippocampus_manager
# 插件系统现在使用统一的插件加载器 # 插件系统现在使用统一的插件加载器
@@ -48,8 +48,8 @@ class MainSystem:
self.individuality: Individuality = individuality self.individuality: Individuality = individuality
# 使用消息API替代直接的FastAPI实例 # 使用消息API替代直接的FastAPI实例
self.app: MessageServer = global_api self.app: MessageServer = get_global_api()
self.server: Server = global_server self.server: Server = get_global_server()
async def initialize(self): async def initialize(self):
"""初始化系统组件""" """初始化系统组件"""
@@ -75,15 +75,15 @@ class MainSystem:
# 启动API服务器 # 启动API服务器
start_api_server() start_api_server()
logger.success("API服务器启动成功") logger.info("API服务器启动成功")
# 加载所有actions包括默认的和插件的 # 加载所有actions包括默认的和插件的
plugin_count, component_count = plugin_manager.load_all_plugins() plugin_count, component_count = plugin_manager.load_all_plugins()
logger.success(f"插件系统加载成功: {plugin_count} 个插件,{component_count} 个组件") logger.info(f"插件系统加载成功: {plugin_count} 个插件,{component_count} 个组件")
# 初始化表情管理器 # 初始化表情管理器
emoji_manager.initialize() emoji_manager.initialize()
logger.success("表情包管理器初始化成功") logger.info("表情包管理器初始化成功")
# 添加情绪衰减任务 # 添加情绪衰减任务
await async_task_manager.add_task(MoodUpdateTask()) await async_task_manager.add_task(MoodUpdateTask())
@@ -101,7 +101,7 @@ class MainSystem:
if global_config.memory.enable_memory: if global_config.memory.enable_memory:
if self.hippocampus_manager: if self.hippocampus_manager:
self.hippocampus_manager.initialize() self.hippocampus_manager.initialize()
logger.success("记忆系统初始化成功") logger.info("记忆系统初始化成功")
else: else:
logger.info("记忆系统已禁用,跳过初始化") logger.info("记忆系统已禁用,跳过初始化")
@@ -117,19 +117,19 @@ class MainSystem:
personality_sides=global_config.personality.personality_sides, personality_sides=global_config.personality.personality_sides,
identity_detail=global_config.identity.identity_detail, identity_detail=global_config.identity.identity_detail,
) )
logger.success("个体特征初始化成功") logger.info("个体特征初始化成功")
try: try:
# 启动全局消息管理器 (负责消息发送/排队) # 启动全局消息管理器 (负责消息发送/排队)
await message_manager.start() await message_manager.start()
logger.success("全局消息管理器启动成功") logger.info("全局消息管理器启动成功")
# 启动心流系统主循环 # 启动心流系统主循环
asyncio.create_task(heartflow.heartflow_start_working()) asyncio.create_task(heartflow.heartflow_start_working())
logger.success("心流系统启动成功") logger.info("心流系统启动成功")
init_time = int(1000 * (time.time() - init_start_time)) init_time = int(1000 * (time.time() - init_start_time))
logger.success(f"初始化完成,神经元放电{init_time}") logger.info(f"初始化完成,神经元放电{init_time}")
except Exception as e: except Exception as e:
logger.error(f"启动大脑和外部世界失败: {e}") logger.error(f"启动大脑和外部世界失败: {e}")
raise raise

View File

@@ -4,7 +4,7 @@ import asyncio
from asyncio import Task, Event, Lock from asyncio import Task, Event, Lock
from typing import Callable, Dict from typing import Callable, Dict
from src.common.logger_manager import get_logger from src.common.logger import get_logger
logger = get_logger("async_task_manager") logger = get_logger("async_task_manager")

View File

@@ -1,7 +1,7 @@
import json import json
import os import os
from src.common.logger_manager import get_logger from src.common.logger import get_logger
LOCAL_STORE_FILE_PATH = "data/local_store.json" LOCAL_STORE_FILE_PATH = "data/local_store.json"
@@ -50,20 +50,20 @@ class LocalStoreManager:
try: try:
with open(self.file_path, "r", encoding="utf-8") as f: with open(self.file_path, "r", encoding="utf-8") as f:
self.store = json.load(f) self.store = json.load(f)
logger.success("全都记起来了!") logger.info("全都记起来了!")
except json.JSONDecodeError: except json.JSONDecodeError:
logger.warning("啊咧?记事本被弄脏了,正在重建记事本......") logger.warning("啊咧?记事本被弄脏了,正在重建记事本......")
self.store = {} self.store = {}
with open(self.file_path, "w", encoding="utf-8") as f: with open(self.file_path, "w", encoding="utf-8") as f:
json.dump({}, f, ensure_ascii=False, indent=4) json.dump({}, f, ensure_ascii=False, indent=4)
logger.success("记事本重建成功!") logger.info("记事本重建成功!")
else: else:
# 不存在本地存储文件,创建新的目录和文件 # 不存在本地存储文件,创建新的目录和文件
logger.warning("啊咧?记事本不存在,正在创建新的记事本......") logger.warning("啊咧?记事本不存在,正在创建新的记事本......")
os.makedirs(os.path.dirname(self.file_path), exist_ok=True) os.makedirs(os.path.dirname(self.file_path), exist_ok=True)
with open(self.file_path, "w", encoding="utf-8") as f: with open(self.file_path, "w", encoding="utf-8") as f:
json.dump({}, f, ensure_ascii=False, indent=4) json.dump({}, f, ensure_ascii=False, indent=4)
logger.success("记事本创建成功!") logger.info("记事本创建成功!")
def save_local_store(self): def save_local_store(self):
"""保存本地存储数据""" """保存本地存储数据"""

View File

@@ -5,7 +5,7 @@ from dataclasses import dataclass
from typing import Dict, Tuple from typing import Dict, Tuple
from ..config.config import global_config from ..config.config import global_config
from ..common.logger_manager import get_logger from ..common.logger import get_logger
from ..manager.async_task_manager import AsyncTask from ..manager.async_task_manager import AsyncTask
from ..individuality.individuality import individuality from ..individuality.individuality import individuality

View File

@@ -1,5 +1,5 @@
from src.manager.async_task_manager import AsyncTask from src.manager.async_task_manager import AsyncTask
from src.common.logger_manager import get_logger from src.common.logger import get_logger
from src.person_info.person_info import PersonInfoManager from src.person_info.person_info import PersonInfoManager
from src.person_info.relationship_manager import relationship_manager from src.person_info.relationship_manager import relationship_manager
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp

Some files were not shown because too many files have changed in this diff Show More