mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-01 18:20:16 +08:00
feat(sdk): add merged provider config capability support
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -922,6 +922,14 @@ PROVIDER_MANAGER_GET_BY_ID_OUTPUT_SCHEMA = _object_schema(
|
||||
required=("provider",),
|
||||
provider=_nullable(MANAGED_PROVIDER_RECORD_SCHEMA),
|
||||
)
|
||||
PROVIDER_MANAGER_GET_MERGED_PROVIDER_CONFIG_INPUT_SCHEMA = _object_schema(
|
||||
required=("provider_id",),
|
||||
provider_id={"type": "string"},
|
||||
)
|
||||
PROVIDER_MANAGER_GET_MERGED_PROVIDER_CONFIG_OUTPUT_SCHEMA = _object_schema(
|
||||
required=("config",),
|
||||
config=_nullable({"type": "object"}),
|
||||
)
|
||||
PROVIDER_MANAGER_LOAD_INPUT_SCHEMA = _object_schema(
|
||||
required=("provider_config",),
|
||||
provider_config={"type": "object"},
|
||||
@@ -1312,6 +1320,10 @@ BUILTIN_CAPABILITY_SCHEMAS: dict[str, dict[str, JSONSchema]] = {
|
||||
"input": PROVIDER_MANAGER_GET_BY_ID_INPUT_SCHEMA,
|
||||
"output": PROVIDER_MANAGER_GET_BY_ID_OUTPUT_SCHEMA,
|
||||
},
|
||||
"provider.manager.get_merged_provider_config": {
|
||||
"input": PROVIDER_MANAGER_GET_MERGED_PROVIDER_CONFIG_INPUT_SCHEMA,
|
||||
"output": PROVIDER_MANAGER_GET_MERGED_PROVIDER_CONFIG_OUTPUT_SCHEMA,
|
||||
},
|
||||
"provider.manager.load": {
|
||||
"input": PROVIDER_MANAGER_LOAD_INPUT_SCHEMA,
|
||||
"output": PROVIDER_MANAGER_LOAD_OUTPUT_SCHEMA,
|
||||
@@ -1535,6 +1547,8 @@ __all__ = [
|
||||
"PROVIDER_MANAGER_DELETE_OUTPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_GET_BY_ID_INPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_GET_BY_ID_OUTPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_GET_MERGED_PROVIDER_CONFIG_INPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_GET_MERGED_PROVIDER_CONFIG_OUTPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_GET_INSTS_INPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_GET_INSTS_OUTPUT_SCHEMA",
|
||||
"PROVIDER_MANAGER_LOAD_INPUT_SCHEMA",
|
||||
|
||||
@@ -1165,6 +1165,30 @@ class BuiltinCapabilityRouterMixin(_CapabilityRouterHost):
|
||||
)
|
||||
}
|
||||
|
||||
async def _provider_manager_get_merged_provider_config(
|
||||
self, _request_id: str, payload: dict[str, Any], _token
|
||||
) -> dict[str, Any]:
|
||||
self._require_reserved_plugin("provider.manager.get_merged_provider_config")
|
||||
provider_id = str(payload.get("provider_id", "")).strip()
|
||||
if not provider_id:
|
||||
raise AstrBotError.invalid_input(
|
||||
"provider.manager.get_merged_provider_config requires provider_id"
|
||||
)
|
||||
provider = self._provider_payload_by_id(provider_id)
|
||||
config = self._provider_config_by_id(provider_id)
|
||||
if provider is None and config is None:
|
||||
raise AstrBotError.invalid_input(
|
||||
"provider.manager.get_merged_provider_config "
|
||||
f"unknown provider_id: {provider_id}"
|
||||
)
|
||||
if provider is None:
|
||||
return {"config": dict(config) if isinstance(config, dict) else config}
|
||||
if config is None:
|
||||
return {"config": dict(provider)}
|
||||
merged_config = dict(provider)
|
||||
merged_config.update(config)
|
||||
return {"config": merged_config}
|
||||
|
||||
@staticmethod
|
||||
def _normalize_provider_config_object(
|
||||
payload: Any,
|
||||
@@ -2289,6 +2313,13 @@ class BuiltinCapabilityRouterMixin(_CapabilityRouterHost):
|
||||
),
|
||||
call_handler=self._provider_manager_get_by_id,
|
||||
)
|
||||
self.register(
|
||||
self._builtin_descriptor(
|
||||
"provider.manager.get_merged_provider_config",
|
||||
"获取 Provider 合并配置",
|
||||
),
|
||||
call_handler=self._provider_manager_get_merged_provider_config,
|
||||
)
|
||||
self.register(
|
||||
self._builtin_descriptor("provider.manager.load", "运行时加载 Provider"),
|
||||
call_handler=self._provider_manager_load,
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
provider.rerank.rerank: 文档重排序
|
||||
provider.manager.set: 设置当前 Provider
|
||||
provider.manager.get_by_id: 按 ID 获取 Provider 管理记录
|
||||
provider.manager.get_merged_provider_config: 获取 Provider 合并配置
|
||||
provider.manager.load: 运行时加载 Provider
|
||||
provider.manager.terminate: 终止已加载的 Provider
|
||||
provider.manager.create: 创建 Provider
|
||||
|
||||
Reference in New Issue
Block a user