mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-20 10:57:22 +08:00
29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
from typing import List, Dict, Type
|
|
from .entites import ProviderMetaData
|
|
from astrbot.core import logger
|
|
from .func_tool_manager import FuncCall
|
|
|
|
provider_registry: List[ProviderMetaData] = []
|
|
'''维护了通过装饰器注册的 Provider'''
|
|
provider_cls_map: Dict[str, Type] = {}
|
|
'''维护了 Provider 类型名称和 Provider 类的映射'''
|
|
|
|
llm_tools = FuncCall()
|
|
|
|
def register_provider_adapter(provider_type_name: str, desc: str):
|
|
'''用于注册平台适配器的带参装饰器'''
|
|
def decorator(cls):
|
|
if provider_type_name in provider_cls_map:
|
|
raise ValueError(f"检测到大模型提供商适配器 {provider_type_name} 已经注册,可能发生了大模型提供商适配器类型命名冲突。")
|
|
|
|
pm = ProviderMetaData(
|
|
type=provider_type_name,
|
|
desc=desc,
|
|
)
|
|
provider_registry.append(pm)
|
|
provider_cls_map[provider_type_name] = cls
|
|
logger.debug(f"Provider {provider_type_name} 已注册")
|
|
return cls
|
|
|
|
return decorator
|