From 387a6cfee44674c91be6d8f245e3cc2b2dd0a2dd Mon Sep 17 00:00:00 2001 From: takatost Date: Mon, 18 Mar 2024 19:25:18 +0800 Subject: [PATCH 1/4] remove answer as end --- api/core/workflow/workflow_engine_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/core/workflow/workflow_engine_manager.py b/api/core/workflow/workflow_engine_manager.py index 5eb92f02ef..9eb7b3af0b 100644 --- a/api/core/workflow/workflow_engine_manager.py +++ b/api/core/workflow/workflow_engine_manager.py @@ -161,7 +161,7 @@ class WorkflowEngineManager: callbacks=callbacks ) - if next_node.node_type in [NodeType.END, NodeType.ANSWER]: + if next_node.node_type in [NodeType.END]: break predecessor_node = next_node From 197c0bb1a3a2a7572238e35779b0e34e691b9f40 Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Mon, 18 Mar 2024 19:56:38 +0800 Subject: [PATCH 2/4] fix: jsonable_encoder --- api/services/workflow_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/services/workflow_service.py b/api/services/workflow_service.py index 336c6c1aa0..4668ff1825 100644 --- a/api/services/workflow_service.py +++ b/api/services/workflow_service.py @@ -222,7 +222,7 @@ class WorkflowService: title=node_instance.node_data.title, inputs=json.dumps(node_run_result.inputs) if node_run_result.inputs else None, process_data=json.dumps(node_run_result.process_data) if node_run_result.process_data else None, - outputs=json.dumps(node_run_result.outputs) if node_run_result.outputs else None, + outputs=json.dumps(jsonable_encoder(node_run_result.outputs)) if node_run_result.outputs else None, execution_metadata=(json.dumps(jsonable_encoder(node_run_result.metadata)) if node_run_result.metadata else None), status=WorkflowNodeExecutionStatus.SUCCEEDED.value, From e7d6def1e8860329b5749de62bf593c9ad7df990 Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Mon, 18 Mar 2024 19:59:54 +0800 Subject: [PATCH 3/4] fix: trim file extension --- api/core/workflow/nodes/tool/tool_node.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/core/workflow/nodes/tool/tool_node.py b/api/core/workflow/nodes/tool/tool_node.py index 816a173b34..4f5b3332ae 100644 --- a/api/core/workflow/nodes/tool/tool_node.py +++ b/api/core/workflow/nodes/tool/tool_node.py @@ -102,7 +102,7 @@ class ToolNode(BaseNode): filename = response.save_as or url.split('/')[-1] # get tool file id - tool_file_id = url.split('/')[-1] + tool_file_id = url.split('/')[-1].split('.')[0] result.append(FileVar( tenant_id=self.tenant_id, type=FileType.IMAGE, @@ -114,7 +114,7 @@ class ToolNode(BaseNode): )) elif response.type == ToolInvokeMessage.MessageType.BLOB: # get tool file id - tool_file_id = response.message.split('/')[-1] + tool_file_id = response.message.split('/')[-1].split('.')[0] result.append(FileVar( tenant_id=self.tenant_id, type=FileType.IMAGE, From e225a3d33c44ac15f20d50cc9c09e1ae024979ed Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Mon, 18 Mar 2024 20:22:25 +0800 Subject: [PATCH 4/4] linter --- .../workflow/nodes/http_request/http_executor.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/api/core/workflow/nodes/http_request/http_executor.py b/api/core/workflow/nodes/http_request/http_executor.py index 3d307be0d1..666d425ff2 100644 --- a/api/core/workflow/nodes/http_request/http_executor.py +++ b/api/core/workflow/nodes/http_request/http_executor.py @@ -1,8 +1,9 @@ -import re from copy import deepcopy from typing import Any, Union from urllib.parse import urlencode +from random import randint +import re import httpx import requests @@ -32,6 +33,7 @@ class HttpExecutor: headers: dict[str, Any] body: Union[None, str] files: Union[None, dict[str, Any]] + boundary: str def __init__(self, node_data: HttpRequestNodeData, variables: dict[str, Any]): """ @@ -136,6 +138,8 @@ class HttpExecutor: body = {} kv_paris = original_body.split('\n') for kv in kv_paris: + if not kv.strip(): + continue kv = kv.split(':') if len(kv) == 2: body[kv[0]] = kv[1] @@ -148,6 +152,10 @@ class HttpExecutor: self.files = { k: ('', v) for k, v in body.items() } + random_str = lambda n: ''.join([chr(randint(97, 122)) for _ in range(n)]) + self.boundary = f'----WebKitFormBoundary{random_str(16)}' + + self.headers['Content-Type'] = f'multipart/form-data; boundary={self.boundary}' else: self.body = urlencode(body) elif node_data.body.type in ['json', 'raw']: @@ -258,13 +266,12 @@ class HttpExecutor: # if files, use multipart/form-data with boundary if self.files: - boundary = '----WebKitFormBoundary7MA4YWxkTrZu0gW' - raw_request = f'--{boundary}\n' + raw_request + boundary = self.boundary for k, v in self.files.items(): raw_request += f'Content-Disposition: form-data; name="{k}"; filename="{v[0]}"\n' raw_request += f'Content-Type: {v[1]}\n\n' raw_request += v[1] + '\n' - raw_request += f'--{boundary}\n' + raw_request += f'{boundary}\n' raw_request += '--\n' else: raw_request += self.body or ''