diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py
index 8fe4ff36e72..7117fd9e68e 100644
--- a/apps/tools/serializers/tool.py
+++ b/apps/tools/serializers/tool.py
@@ -1066,6 +1066,7 @@ class Query(serializers.Serializer):
user_id = serializers.UUIDField(required=False, allow_null=True, label=_('user id'))
scope = serializers.CharField(required=True, label=_('scope'))
tool_type = serializers.CharField(required=False, label=_('tool type'), allow_null=True, allow_blank=True)
+ tool_type_list = serializers.ListField(child=serializers.CharField(),required=False, label=_('tool type list'), allow_null=True, allow_empty=True)
create_user = serializers.UUIDField(required=False, label=_('create user'), allow_null=True)
def page_tool(self, current_page: int, page_size: int):
@@ -1127,7 +1128,11 @@ def get_query_set(self, workspace_manage, is_x_pack_ee):
if scope is not None:
tool_query_set = tool_query_set.filter(scope=scope)
- if tool_type:
+
+ tool_type_list = self.data.get('tool_type_list')
+ if tool_type_list:
+ tool_query_set = tool_query_set.filter(tool_type__in=tool_type_list)
+ elif tool_type:
tool_query_set = tool_query_set.filter(tool_type=tool_type)
query_set_dict = {
diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py
index ec08b0e4fc1..0fe2dc616f6 100644
--- a/apps/tools/views/tool.py
+++ b/apps/tools/views/tool.py
@@ -74,6 +74,7 @@ def get(self, request: Request, workspace_id: str):
'name': request.query_params.get('name'),
'scope': request.query_params.get('scope', ToolScope.WORKSPACE),
'tool_type': request.query_params.get('tool_type'),
+ 'tool_type_list': request.query_params.getlist('tool_type_list[]'),
'user_id': request.user.id,
'create_user': request.query_params.get('create_user'),
}
diff --git a/ui/src/assets/tool/icon_tool_workflow.svg b/ui/src/assets/tool/icon_tool_workflow.svg
new file mode 100644
index 00000000000..1e53f7b475e
--- /dev/null
+++ b/ui/src/assets/tool/icon_tool_workflow.svg
@@ -0,0 +1,15 @@
+
diff --git a/ui/src/components/workflow-dropdown-menu/application/index.vue b/ui/src/components/workflow-dropdown-menu/application/index.vue
index 001d75c42d7..e2752e63abc 100644
--- a/ui/src/components/workflow-dropdown-menu/application/index.vue
+++ b/ui/src/components/workflow-dropdown-menu/application/index.vue
@@ -89,8 +89,22 @@
clickNodes(toolLibNode, val, 'tool')"
- @onmousedown="(val: any) => onmousedown(toolLibNode, val, 'tool')"
+ @clickNodes="
+ (val: any) =>
+ clickNodes(
+ val.tool_type === 'WORKFLOW' ? toolWorkflowLibNode : toolLibNode,
+ val,
+ 'tool',
+ )
+ "
+ @onmousedown="
+ (val: any) =>
+ onmousedown(
+ val.tool_type === 'WORKFLOW' ? toolWorkflowLibNode : toolLibNode,
+ val,
+ 'tool',
+ )
+ "
/>
@@ -122,7 +136,12 @@
diff --git a/ui/src/workflow/nodes/tool-workflow-lib-node/index.ts b/ui/src/workflow/nodes/tool-workflow-lib-node/index.ts
new file mode 100644
index 00000000000..fea8d415d94
--- /dev/null
+++ b/ui/src/workflow/nodes/tool-workflow-lib-node/index.ts
@@ -0,0 +1,12 @@
+import ToolWorkflowLibNodeVue from './index.vue'
+import { AppNode, AppNodeModel } from '@/workflow/common/app-node'
+class ToolWorkflowLibNode extends AppNode {
+ constructor(props: any) {
+ super(props, ToolWorkflowLibNodeVue)
+ }
+}
+export default {
+ type: 'tool-workflow-lib-node',
+ model: AppNodeModel,
+ view: ToolWorkflowLibNode,
+}
diff --git a/ui/src/workflow/nodes/tool-workflow-lib-node/index.vue b/ui/src/workflow/nodes/tool-workflow-lib-node/index.vue
new file mode 100644
index 00000000000..a04796c15a9
--- /dev/null
+++ b/ui/src/workflow/nodes/tool-workflow-lib-node/index.vue
@@ -0,0 +1,209 @@
+
+
+
+ {{ chat_data.input_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.noData') }}
+
+
+
+
+
+