| @@ -233,56 +233,57 @@ class BuiltinToolManageService: | |||
| # get all builtin providers | |||
| provider_controllers = ToolManager.list_builtin_providers(tenant_id) | |||
| # get all user added providers | |||
| db_providers: list[BuiltinToolProvider] = ( | |||
| db.session.query(BuiltinToolProvider).filter(BuiltinToolProvider.tenant_id == tenant_id).all() or [] | |||
| ) | |||
| with db.session.no_autoflush: | |||
| # get all user added providers | |||
| db_providers: list[BuiltinToolProvider] = ( | |||
| db.session.query(BuiltinToolProvider).filter(BuiltinToolProvider.tenant_id == tenant_id).all() or [] | |||
| ) | |||
| # rewrite db_providers | |||
| for db_provider in db_providers: | |||
| db_provider.provider = str(ToolProviderID(db_provider.provider)) | |||
| # find provider | |||
| def find_provider(provider): | |||
| return next(filter(lambda db_provider: db_provider.provider == provider, db_providers), None) | |||
| result: list[ToolProviderApiEntity] = [] | |||
| for provider_controller in provider_controllers: | |||
| try: | |||
| # handle include, exclude | |||
| if is_filtered( | |||
| include_set=dify_config.POSITION_TOOL_INCLUDES_SET, # type: ignore | |||
| exclude_set=dify_config.POSITION_TOOL_EXCLUDES_SET, # type: ignore | |||
| data=provider_controller, | |||
| name_func=lambda x: x.identity.name, | |||
| ): | |||
| continue | |||
| # convert provider controller to user provider | |||
| user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider( | |||
| provider_controller=provider_controller, | |||
| db_provider=find_provider(provider_controller.entity.identity.name), | |||
| decrypt_credentials=True, | |||
| ) | |||
| # rewrite db_providers | |||
| for db_provider in db_providers: | |||
| db_provider.provider = str(ToolProviderID(db_provider.provider)) | |||
| # find provider | |||
| def find_provider(provider): | |||
| return next(filter(lambda db_provider: db_provider.provider == provider, db_providers), None) | |||
| result: list[ToolProviderApiEntity] = [] | |||
| for provider_controller in provider_controllers: | |||
| try: | |||
| # handle include, exclude | |||
| if is_filtered( | |||
| include_set=dify_config.POSITION_TOOL_INCLUDES_SET, # type: ignore | |||
| exclude_set=dify_config.POSITION_TOOL_EXCLUDES_SET, # type: ignore | |||
| data=provider_controller, | |||
| name_func=lambda x: x.identity.name, | |||
| ): | |||
| continue | |||
| # convert provider controller to user provider | |||
| user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider( | |||
| provider_controller=provider_controller, | |||
| db_provider=find_provider(provider_controller.entity.identity.name), | |||
| decrypt_credentials=True, | |||
| ) | |||
| # add icon | |||
| ToolTransformService.repack_provider(tenant_id=tenant_id, provider=user_builtin_provider) | |||
| tools = provider_controller.get_tools() | |||
| for tool in tools or []: | |||
| user_builtin_provider.tools.append( | |||
| ToolTransformService.convert_tool_entity_to_api_entity( | |||
| tenant_id=tenant_id, | |||
| tool=tool, | |||
| credentials=user_builtin_provider.original_credentials, | |||
| labels=ToolLabelManager.get_tool_labels(provider_controller), | |||
| # add icon | |||
| ToolTransformService.repack_provider(tenant_id=tenant_id, provider=user_builtin_provider) | |||
| tools = provider_controller.get_tools() | |||
| for tool in tools or []: | |||
| user_builtin_provider.tools.append( | |||
| ToolTransformService.convert_tool_entity_to_api_entity( | |||
| tenant_id=tenant_id, | |||
| tool=tool, | |||
| credentials=user_builtin_provider.original_credentials, | |||
| labels=ToolLabelManager.get_tool_labels(provider_controller), | |||
| ) | |||
| ) | |||
| ) | |||
| result.append(user_builtin_provider) | |||
| except Exception as e: | |||
| raise e | |||
| result.append(user_builtin_provider) | |||
| except Exception as e: | |||
| raise e | |||
| return BuiltinToolProviderSort.sort(result) | |||