From 752dc6cfdffd242e3ff203c382d35dfd8a86b011 Mon Sep 17 00:00:00 2001 From: letr Date: Tue, 17 Mar 2026 20:00:06 +0800 Subject: [PATCH] feat(sdk): add merged provider config capability support Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/astrbot_sdk/protocol/_builtin_schemas.py | 14 +++++++++ .../runtime/_capability_router_builtins.py | 31 +++++++++++++++++++ src/astrbot_sdk/runtime/capability_router.py | 1 + 3 files changed, 46 insertions(+) diff --git a/src/astrbot_sdk/protocol/_builtin_schemas.py b/src/astrbot_sdk/protocol/_builtin_schemas.py index b752ec71e..790527cbc 100644 --- a/src/astrbot_sdk/protocol/_builtin_schemas.py +++ b/src/astrbot_sdk/protocol/_builtin_schemas.py @@ -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", diff --git a/src/astrbot_sdk/runtime/_capability_router_builtins.py b/src/astrbot_sdk/runtime/_capability_router_builtins.py index 0fb55c1f5..f01cb1ddb 100644 --- a/src/astrbot_sdk/runtime/_capability_router_builtins.py +++ b/src/astrbot_sdk/runtime/_capability_router_builtins.py @@ -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, diff --git a/src/astrbot_sdk/runtime/capability_router.py b/src/astrbot_sdk/runtime/capability_router.py index eef9946a9..0d73d7ba7 100644 --- a/src/astrbot_sdk/runtime/capability_router.py +++ b/src/astrbot_sdk/runtime/capability_router.py @@ -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