Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev
This commit is contained in:
@@ -74,7 +74,7 @@ dependencies = [
|
|||||||
"websockets>=15.0.1",
|
"websockets>=15.0.1",
|
||||||
"aiomysql>=0.2.0",
|
"aiomysql>=0.2.0",
|
||||||
"aiosqlite>=0.21.0",
|
"aiosqlite>=0.21.0",
|
||||||
"inkfox>=0.1.0",
|
"inkfox>=0.1.1",
|
||||||
"rrjieba>=0.1.13",
|
"rrjieba>=0.1.13",
|
||||||
"mcp>=0.9.0",
|
"mcp>=0.9.0",
|
||||||
"sse-starlette>=2.2.1",
|
"sse-starlette>=2.2.1",
|
||||||
|
|||||||
@@ -10,17 +10,7 @@ from src.common.logger import get_logger
|
|||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
# 仅允许规范导入路径:from inkfox.memory import PyMetadataIndex
|
from inkfox.memory import PyMetadataIndex as _RustIndex # type: ignore
|
||||||
try: # pragma: no cover
|
|
||||||
from inkfox.memory import PyMetadataIndex as _RustIndex # type: ignore
|
|
||||||
logger.debug("已从 inkfox.memory 成功导入 PyMetadataIndex")
|
|
||||||
except Exception as ex: # noqa: BLE001
|
|
||||||
# 不再做任何回退;强制要求正确的 Rust 模块子模块注册
|
|
||||||
raise RuntimeError(
|
|
||||||
"无法导入 inkfox.memory.PyMetadataIndex: %s\n"
|
|
||||||
"请确认: 1) 已在当前虚拟环境下执行 'maturin develop --release' 安装扩展; "
|
|
||||||
"2) 运行进程使用同一个 venv; 3) 没有旧的 'inkfox' 目录遮蔽 so/pyd; 4) Python 版本与编译匹配" % ex
|
|
||||||
) from ex
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MemoryMetadataIndexEntry:
|
class MemoryMetadataIndexEntry:
|
||||||
|
|||||||
@@ -1111,7 +1111,6 @@ class MemorySystem:
|
|||||||
from src.chat.message_receive.chat_stream import get_chat_manager
|
from src.chat.message_receive.chat_stream import get_chat_manager
|
||||||
|
|
||||||
chat_manager = get_chat_manager()
|
chat_manager = get_chat_manager()
|
||||||
# ChatManager.get_stream 是异步方法,需要 await,否则会产生 "coroutine was never awaited" 警告
|
|
||||||
chat_stream = await chat_manager.get_stream(stream_id)
|
chat_stream = await chat_manager.get_stream(stream_id)
|
||||||
if chat_stream and hasattr(chat_stream, "context_manager"):
|
if chat_stream and hasattr(chat_stream, "context_manager"):
|
||||||
history_limit = self._determine_history_limit(context)
|
history_limit = self._determine_history_limit(context)
|
||||||
|
|||||||
@@ -615,6 +615,7 @@ class ChatterActionManager:
|
|||||||
"""禁用批量存储模式"""
|
"""禁用批量存储模式"""
|
||||||
self._batch_storage_enabled = False
|
self._batch_storage_enabled = False
|
||||||
self._current_chat_id = None
|
self._current_chat_id = None
|
||||||
|
self._pending_actions = [] # 清空队列
|
||||||
logger.debug("已禁用批量存储模式")
|
logger.debug("已禁用批量存储模式")
|
||||||
|
|
||||||
def add_action_to_batch(self, action_name: str, action_data: dict, thinking_id: str = "",
|
def add_action_to_batch(self, action_name: str, action_data: dict, thinking_id: str = "",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class ReplyerManager:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._repliers: dict[str, DefaultReplyer] = {}
|
self._repliers: dict[str, DefaultReplyer] = {}
|
||||||
|
|
||||||
|
async def get_replyer(
|
||||||
async def get_replyer(
|
async def get_replyer(
|
||||||
self,
|
self,
|
||||||
chat_stream: ChatStream | None = None,
|
chat_stream: ChatStream | None = None,
|
||||||
@@ -37,7 +38,6 @@ class ReplyerManager:
|
|||||||
target_stream = chat_stream
|
target_stream = chat_stream
|
||||||
if not target_stream:
|
if not target_stream:
|
||||||
if chat_manager := get_chat_manager():
|
if chat_manager := get_chat_manager():
|
||||||
# get_stream 为异步,需要等待
|
|
||||||
target_stream = await chat_manager.get_stream(stream_id)
|
target_stream = await chat_manager.get_stream(stream_id)
|
||||||
|
|
||||||
if not target_stream:
|
if not target_stream:
|
||||||
|
|||||||
@@ -9,17 +9,18 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
from typing import Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
from rich.traceback import install
|
from rich.traceback import install
|
||||||
|
|
||||||
from src.chat.message_receive.chat_stream import ChatStream
|
from src.chat.message_receive.chat_stream import ChatStream
|
||||||
from src.chat.replyer.default_generator import DefaultReplyer
|
|
||||||
from src.chat.replyer.replyer_manager import replyer_manager
|
|
||||||
from src.chat.utils.utils import process_llm_response
|
from src.chat.utils.utils import process_llm_response
|
||||||
from src.common.logger import get_logger
|
from src.common.logger import get_logger
|
||||||
from src.plugin_system.base.component_types import ActionInfo
|
from src.plugin_system.base.component_types import ActionInfo
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from src.chat.replyer.default_generator import DefaultReplyer
|
||||||
|
|
||||||
install(extra_lines=3)
|
install(extra_lines=3)
|
||||||
|
|
||||||
# 日志记录器
|
# 日志记录器
|
||||||
@@ -31,11 +32,12 @@ logger = get_logger("generator_api")
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
async def get_replyer(
|
||||||
async def get_replyer(
|
async def get_replyer(
|
||||||
chat_stream: ChatStream | None = None,
|
chat_stream: ChatStream | None = None,
|
||||||
chat_id: str | None = None,
|
chat_id: str | None = None,
|
||||||
request_type: str = "replyer",
|
request_type: str = "replyer",
|
||||||
) -> DefaultReplyer | None:
|
) -> Any | None:
|
||||||
"""获取回复器对象
|
"""获取回复器对象
|
||||||
|
|
||||||
优先使用chat_stream,如果没有则使用chat_id直接查找。
|
优先使用chat_stream,如果没有则使用chat_id直接查找。
|
||||||
@@ -56,6 +58,8 @@ async def get_replyer(
|
|||||||
raise ValueError("chat_stream 和 chat_id 不可均为空")
|
raise ValueError("chat_stream 和 chat_id 不可均为空")
|
||||||
try:
|
try:
|
||||||
logger.debug(f"[GeneratorAPI] 正在获取回复器,chat_id: {chat_id}, chat_stream: {'有' if chat_stream else '无'}")
|
logger.debug(f"[GeneratorAPI] 正在获取回复器,chat_id: {chat_id}, chat_stream: {'有' if chat_stream else '无'}")
|
||||||
|
# 动态导入避免循环依赖
|
||||||
|
from src.chat.replyer.replyer_manager import replyer_manager
|
||||||
return await replyer_manager.get_replyer(
|
return await replyer_manager.get_replyer(
|
||||||
chat_stream=chat_stream,
|
chat_stream=chat_stream,
|
||||||
chat_id=chat_id,
|
chat_id=chat_id,
|
||||||
|
|||||||
@@ -441,7 +441,7 @@ class ChatterPlanExecutor:
|
|||||||
# 通过 chat_id 获取真实的 chat_stream 对象
|
# 通过 chat_id 获取真实的 chat_stream 对象
|
||||||
from src.plugin_system.apis.chat_api import get_chat_manager
|
from src.plugin_system.apis.chat_api import get_chat_manager
|
||||||
chat_manager = get_chat_manager()
|
chat_manager = get_chat_manager()
|
||||||
chat_stream = chat_manager.get_stream(plan.chat_id)
|
chat_stream = await chat_manager.get_stream(plan.chat_id)
|
||||||
|
|
||||||
if chat_stream:
|
if chat_stream:
|
||||||
# 调用 action_manager 的批量存储
|
# 调用 action_manager 的批量存储
|
||||||
|
|||||||
Reference in New Issue
Block a user