diff --git a/api/services/tools_manage_service.py b/api/services/tools_manage_service.py index a866cbb4f9..e6348f6ca8 100644 --- a/api/services/tools_manage_service.py +++ b/api/services/tools_manage_service.py @@ -313,25 +313,33 @@ class ToolManageService: """ update builtin tool provider """ + # get if the provider exists + provider: BuiltinToolProvider = db.session.query(BuiltinToolProvider).filter( + BuiltinToolProvider.tenant_id == tenant_id, + BuiltinToolProvider.provider == provider_name, + ).first() + try: # get provider provider_controller = ToolManager.get_builtin_provider(provider_name) if not provider_controller.need_credentials: raise ValueError(f'provider {provider_name} does not need credentials') + tool_configuration = ToolConfiguration(tenant_id=tenant_id, provider_controller=provider_controller) + # get original credentials if exists + if provider is not None: + original_credentials = tool_configuration.decrypt_tool_credentials(provider.credentials) + masked_credentials = tool_configuration.mask_tool_credentials(original_credentials) + # check if the credential has changed, save the original credential + for name, value in credentials.items(): + if name in masked_credentials and value == masked_credentials[name]: + credentials[name] = original_credentials[name] # validate credentials provider_controller.validate_credentials(credentials) # encrypt credentials - tool_configuration = ToolConfiguration(tenant_id=tenant_id, provider_controller=provider_controller) credentials = tool_configuration.encrypt_tool_credentials(credentials) except (ToolProviderNotFoundError, ToolNotFoundError, ToolProviderCredentialValidationError) as e: raise ValueError(str(e)) - # get if the provider exists - provider: BuiltinToolProvider = db.session.query(BuiltinToolProvider).filter( - BuiltinToolProvider.tenant_id == tenant_id, - BuiltinToolProvider.provider == provider_name, - ).first() - if provider is None: # create provider provider = BuiltinToolProvider(