refactor(chat): 统一异步调用模式并修复循环依赖

- 将 chat_manager.get_stream() 调用改为异步
- 将 replyer_manager.get_replyer() 方法改为异步
- 在 generator_api 中使用动态导入避免循环依赖
- 在 action_manager 中添加待处理动作队列清理
- 更新所有相关调用点以支持异步模式
This commit is contained in:
Windpicker-owo
2025-10-05 18:30:16 +08:00
parent 4cdc5fc89d
commit 3e37b7cef5
6 changed files with 18 additions and 14 deletions

View File

@@ -9,17 +9,18 @@
"""
import traceback
from typing import Any
from typing import TYPE_CHECKING, Any
from rich.traceback import install
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.common.logger import get_logger
from src.plugin_system.base.component_types import ActionInfo
if TYPE_CHECKING:
from src.chat.replyer.default_generator import DefaultReplyer
install(extra_lines=3)
# 日志记录器
@@ -31,11 +32,11 @@ logger = get_logger("generator_api")
# =============================================================================
def get_replyer(
async def get_replyer(
chat_stream: ChatStream | None = None,
chat_id: str | None = None,
request_type: str = "replyer",
) -> DefaultReplyer | None:
) -> Any | None:
"""获取回复器对象
优先使用chat_stream如果没有则使用chat_id直接查找。
@@ -56,7 +57,9 @@ def get_replyer(
raise ValueError("chat_stream 和 chat_id 不可均为空")
try:
logger.debug(f"[GeneratorAPI] 正在获取回复器chat_id: {chat_id}, chat_stream: {'' if chat_stream else ''}")
return replyer_manager.get_replyer(
# 动态导入避免循环依赖
from src.chat.replyer.replyer_manager import replyer_manager
return await replyer_manager.get_replyer(
chat_stream=chat_stream,
chat_id=chat_id,
request_type=request_type,
@@ -110,7 +113,7 @@ async def generate_reply(
"""
try:
# 获取回复器
replyer = get_replyer(chat_stream, chat_id, request_type=request_type)
replyer = await get_replyer(chat_stream, chat_id, request_type=request_type)
if not replyer:
logger.error("[GeneratorAPI] 无法获取回复器")
return False, [], None
@@ -199,7 +202,7 @@ async def rewrite_reply(
"""
try:
# 获取回复器
replyer = get_replyer(chat_stream, chat_id, request_type=request_type)
replyer = await get_replyer(chat_stream, chat_id, request_type=request_type)
if not replyer:
logger.error("[GeneratorAPI] 无法获取回复器")
return False, [], None
@@ -285,7 +288,7 @@ async def generate_response_custom(
Returns:
Optional[str]: 生成的回复内容
"""
replyer = get_replyer(chat_stream, chat_id, request_type=request_type)
replyer = await get_replyer(chat_stream, chat_id, request_type=request_type)
if not replyer:
logger.error("[GeneratorAPI] 无法获取回复器")
return None