179 lines
5.1 KiB
Python
179 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
统一的插件API聚合模块
|
||
|
||
提供所有插件API功能的统一访问入口
|
||
"""
|
||
|
||
from src.common.logger import get_logger
|
||
|
||
# 导入所有API模块
|
||
from src.plugin_system.apis.message_api import MessageAPI
|
||
from src.plugin_system.apis.llm_api import LLMAPI
|
||
from src.plugin_system.apis.database_api import DatabaseAPI
|
||
from src.plugin_system.apis.config_api import ConfigAPI
|
||
from src.plugin_system.apis.utils_api import UtilsAPI
|
||
from src.plugin_system.apis.stream_api import StreamAPI
|
||
from src.plugin_system.apis.hearflow_api import HearflowAPI
|
||
|
||
logger = get_logger("plugin_api")
|
||
|
||
|
||
class PluginAPI(MessageAPI, LLMAPI, DatabaseAPI, ConfigAPI, UtilsAPI, StreamAPI, HearflowAPI):
|
||
"""
|
||
插件API聚合类
|
||
|
||
集成了所有可供插件使用的API功能,提供统一的访问接口。
|
||
插件组件可以直接使用此API实例来访问各种功能。
|
||
|
||
特性:
|
||
- 聚合所有API模块的功能
|
||
- 支持依赖注入和配置
|
||
- 提供统一的错误处理和日志记录
|
||
"""
|
||
|
||
def __init__(
|
||
self,
|
||
chat_stream=None,
|
||
expressor=None,
|
||
replyer=None,
|
||
observations=None,
|
||
log_prefix: str = "[PluginAPI]",
|
||
plugin_config: dict = None,
|
||
):
|
||
"""
|
||
初始化插件API
|
||
|
||
Args:
|
||
chat_stream: 聊天流对象
|
||
expressor: 表达器对象
|
||
replyer: 回复器对象
|
||
observations: 观察列表
|
||
log_prefix: 日志前缀
|
||
plugin_config: 插件配置字典
|
||
"""
|
||
# 存储依赖对象
|
||
self._services = {
|
||
"chat_stream": chat_stream,
|
||
"expressor": expressor,
|
||
"replyer": replyer,
|
||
"observations": observations or [],
|
||
}
|
||
|
||
self.log_prefix = log_prefix
|
||
|
||
# 存储action上下文信息
|
||
self._action_context = {}
|
||
|
||
# 调用所有父类的初始化
|
||
super().__init__()
|
||
|
||
# 存储插件配置
|
||
self._plugin_config = plugin_config or {}
|
||
|
||
def set_chat_stream(self, chat_stream):
|
||
"""设置聊天流对象"""
|
||
self._services["chat_stream"] = chat_stream
|
||
logger.debug(f"{self.log_prefix} 设置聊天流: {getattr(chat_stream, 'stream_id', 'Unknown')}")
|
||
|
||
def set_expressor(self, expressor):
|
||
"""设置表达器对象"""
|
||
self._services["expressor"] = expressor
|
||
logger.debug(f"{self.log_prefix} 设置表达器")
|
||
|
||
def set_replyer(self, replyer):
|
||
"""设置回复器对象"""
|
||
self._services["replyer"] = replyer
|
||
logger.debug(f"{self.log_prefix} 设置回复器")
|
||
|
||
def set_observations(self, observations):
|
||
"""设置观察列表"""
|
||
self._services["observations"] = observations or []
|
||
logger.debug(f"{self.log_prefix} 设置观察列表,数量: {len(observations or [])}")
|
||
|
||
def get_service(self, service_name: str):
|
||
"""获取指定的服务对象"""
|
||
return self._services.get(service_name)
|
||
|
||
def has_service(self, service_name: str) -> bool:
|
||
"""检查是否有指定的服务对象"""
|
||
return service_name in self._services and self._services[service_name] is not None
|
||
|
||
def set_action_context(self, thinking_id: str = None, shutting_down: bool = False, **kwargs):
|
||
"""设置action上下文信息"""
|
||
if thinking_id:
|
||
self._action_context["thinking_id"] = thinking_id
|
||
self._action_context["shutting_down"] = shutting_down
|
||
self._action_context.update(kwargs)
|
||
|
||
def get_action_context(self, key: str, default=None):
|
||
"""获取action上下文信息"""
|
||
return self._action_context.get(key, default)
|
||
|
||
|
||
# 便捷的工厂函数
|
||
def create_plugin_api(
|
||
chat_stream=None,
|
||
expressor=None,
|
||
replyer=None,
|
||
observations=None,
|
||
log_prefix: str = "[Plugin]",
|
||
plugin_config: dict = None,
|
||
) -> PluginAPI:
|
||
"""
|
||
创建插件API实例的便捷函数
|
||
|
||
Args:
|
||
chat_stream: 聊天流对象
|
||
expressor: 表达器对象
|
||
replyer: 回复器对象
|
||
observations: 观察列表
|
||
log_prefix: 日志前缀
|
||
plugin_config: 插件配置字典
|
||
|
||
Returns:
|
||
PluginAPI: 配置好的插件API实例
|
||
"""
|
||
return PluginAPI(
|
||
chat_stream=chat_stream,
|
||
expressor=expressor,
|
||
replyer=replyer,
|
||
observations=observations,
|
||
log_prefix=log_prefix,
|
||
plugin_config=plugin_config,
|
||
)
|
||
|
||
|
||
def create_command_api(message, log_prefix: str = "[Command]") -> PluginAPI:
|
||
"""
|
||
为命令创建插件API实例的便捷函数
|
||
|
||
Args:
|
||
message: 消息对象,应该包含 chat_stream 等信息
|
||
log_prefix: 日志前缀
|
||
|
||
Returns:
|
||
PluginAPI: 配置好的插件API实例
|
||
"""
|
||
chat_stream = getattr(message, "chat_stream", None)
|
||
|
||
api = PluginAPI(chat_stream=chat_stream, log_prefix=log_prefix)
|
||
|
||
return api
|
||
|
||
|
||
# 导出主要接口
|
||
__all__ = [
|
||
"PluginAPI",
|
||
"create_plugin_api",
|
||
"create_command_api",
|
||
# 也可以导出各个API类供单独使用
|
||
"MessageAPI",
|
||
"LLMAPI",
|
||
"DatabaseAPI",
|
||
"ConfigAPI",
|
||
"UtilsAPI",
|
||
"StreamAPI",
|
||
"HearflowAPI",
|
||
]
|