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:
letr
2026-03-17 20:00:06 +08:00
committed by whatevertogo
parent 7dda607737
commit 752dc6cfdf
3 changed files with 46 additions and 0 deletions

View File

@@ -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",

View File

@@ -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,

View File

@@ -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