From 5090f63df56077c9e1b009f1a18500ce968f1ba4 Mon Sep 17 00:00:00 2001 From: Harry Date: Fri, 11 Jul 2025 22:10:13 +0800 Subject: [PATCH] feat(tool): update tool provider methods to handle optional credentials and name --- .../console/workspace/tool_providers.py | 8 +++---- .../tools/builtin_tools_manage_service.py | 21 +++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/api/controllers/console/workspace/tool_providers.py b/api/controllers/console/workspace/tool_providers.py index bdcd5acdf3..5a2cced21a 100644 --- a/api/controllers/console/workspace/tool_providers.py +++ b/api/controllers/console/workspace/tool_providers.py @@ -168,8 +168,8 @@ class ToolBuiltinProviderUpdateApi(Resource): parser = reqparse.RequestParser() parser.add_argument("credential_id", type=str, required=True, nullable=False, location="json") - parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json") - parser.add_argument("name", type=str, required=True, nullable=False, location="json") + parser.add_argument("credentials", type=dict, required=False, nullable=True, location="json") + parser.add_argument("name", type=str, required=False, nullable=True, location="json") args = parser.parse_args() @@ -178,9 +178,9 @@ class ToolBuiltinProviderUpdateApi(Resource): user_id=user_id, tenant_id=tenant_id, provider=provider, - credentials=args["credentials"], credential_id=args["credential_id"], - name=args["name"], + credentials=args.get("credentials", None), + name=args.get("name", ""), ) session.commit() return result diff --git a/api/services/tools/builtin_tools_manage_service.py b/api/services/tools/builtin_tools_manage_service.py index 6fda9591ce..36b3cb7a8b 100644 --- a/api/services/tools/builtin_tools_manage_service.py +++ b/api/services/tools/builtin_tools_manage_service.py @@ -121,7 +121,12 @@ class BuiltinToolManageService: @staticmethod def update_builtin_tool_provider( - user_id: str, tenant_id: str, provider: str, credentials: dict, credential_id: str, name: str | None = None + user_id: str, + tenant_id: str, + provider: str, + credential_id: str, + credentials: dict | None = None, + name: str | None = None, ): """ update builtin tool provider @@ -140,7 +145,7 @@ class BuiltinToolManageService: raise ValueError(f"you have not added provider {provider}") try: - if CredentialType.of(db_provider.credential_type).is_editable(): + if CredentialType.of(db_provider.credential_type).is_editable() and credentials: provider_controller = ToolManager.get_builtin_provider(provider, tenant_id) if not provider_controller.need_credentials: raise ValueError(f"provider {provider} does not need credentials") @@ -164,7 +169,7 @@ class BuiltinToolManageService: cache.delete() # update name if provided - if name is not None and name not in {"", db_provider.name}: + if name: # check if the name is already used if ( session.query(BuiltinToolProvider) @@ -345,12 +350,16 @@ class BuiltinToolManageService: default_provider = providers[0] default_provider.is_default = True provider_controller = ToolManager.get_builtin_provider(default_provider.provider, tenant_id) - encrypter, _ = BuiltinToolManageService.create_tool_encrypter( - tenant_id, default_provider, default_provider.provider, provider_controller - ) credentials: list[ToolProviderCredentialApiEntity] = [] + encrypters = {} for provider in providers: + credential_type = provider.credential_type + if credential_type not in encrypters: + encrypters[credential_type] = BuiltinToolManageService.create_tool_encrypter( + tenant_id, provider, provider.provider, provider_controller + )[0] + encrypter = encrypters[credential_type] decrypt_credential = encrypter.mask_tool_credentials(encrypter.decrypt(provider.credentials)) credential_entity = ToolTransformService.convert_builtin_provider_to_credential_entity( provider=provider,