Преглед на файлове

Fix/disable autoflush in list tools (#14301)

Yeuoly преди 1 месец
родител
ревизия
8c9e34133c
променени са 1 файла, в които са добавени 47 реда и са изтрити 46 реда
  1. 47 46
      api/services/tools/builtin_tools_manage_service.py

+ 47 - 46
api/services/tools/builtin_tools_manage_service.py

@@ -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)