| 
					
				 | 
			
			
				@@ -355,10 +355,12 @@ class ToolManageService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             provider.encrypted_credentials = json.dumps(credentials) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             db.session.add(provider) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             db.session.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # delete cache 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tool_configuration.delete_tool_credentials_cache() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return { 'result': 'success' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -393,7 +395,6 @@ class ToolManageService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider.description = extra_info.get('description', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider.schema_type_str = ApiProviderSchemaType.OPENAPI.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider.tools_str = serialize_base_model_array(tool_bundles) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        provider.credentials_str = json.dumps(credentials) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider.privacy_policy = privacy_policy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if 'auth_type' not in credentials: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -403,33 +404,54 @@ class ToolManageService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         auth_type = ApiProviderAuthType.value_of(credentials['auth_type']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # create provider entity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        provider_entity = ApiBasedToolProviderController.from_db(provider, auth_type) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider_controller = ApiBasedToolProviderController.from_db(provider, auth_type) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # load tools into provider entity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        provider_entity.load_bundled_tools(tool_bundles) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider_controller.load_bundled_tools(tool_bundles) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # get original credentials if exists 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tool_configuration = ToolConfiguration(tenant_id=tenant_id, provider_controller=provider_controller) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        credentials = tool_configuration.encrypt_tool_credentials(credentials) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider.credentials_str = json.dumps(credentials) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db.session.add(provider) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db.session.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # delete cache 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tool_configuration.delete_tool_credentials_cache() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return { 'result': 'success' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def delete_builtin_tool_provider( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        user_id: str, tenant_id: str, provider: str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_id: str, tenant_id: str, provider_name: str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             delete tool provider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider: BuiltinToolProvider = db.session.query(BuiltinToolProvider).filter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             BuiltinToolProvider.tenant_id == tenant_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            BuiltinToolProvider.provider == provider, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BuiltinToolProvider.provider == provider_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ).first() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if provider is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            raise ValueError(f'you have not added provider {provider}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise ValueError(f'you have not added provider {provider_name}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db.session.delete(provider) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db.session.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # delete cache 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        provider_controller = ToolManager.get_builtin_provider(provider_name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tool_configuration = ToolConfiguration(tenant_id=tenant_id, provider_controller=provider_controller) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tool_configuration.delete_tool_credentials_cache() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return { 'result': 'success' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -437,7 +459,7 @@ class ToolManageService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider: str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            get tool provider icon and it's minetype 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            get tool provider icon and it's mimetype 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         icon_path, mime_type = ToolManager.get_builtin_provider_icon(provider) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         with open(icon_path, 'rb') as f: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -447,18 +469,18 @@ class ToolManageService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def delete_api_tool_provider( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        user_id: str, tenant_id: str, provider: str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_id: str, tenant_id: str, provider_name: str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             delete tool provider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         provider: ApiToolProvider = db.session.query(ApiToolProvider).filter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ApiToolProvider.tenant_id == tenant_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ApiToolProvider.name == provider, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ApiToolProvider.name == provider_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ).first() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if provider is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            raise ValueError(f'you have not added provider {provider}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise ValueError(f'you have not added provider {provider_name}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db.session.delete(provider) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db.session.commit() 
			 |