From d8ab611480165f47acc2be17b02203d188c76acf Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Sun, 17 Mar 2024 21:08:25 +0800 Subject: [PATCH] fix: code --- .../workflow_event_trigger_callback.py | 2 ++ .../workflow/workflow_event_trigger_callback.py | 2 ++ api/core/app/entities/queue_entities.py | 1 + .../app/task_pipeline/workflow_cycle_manage.py | 14 ++++++++++++-- api/core/helper/code_executor/code_executor.py | 2 +- .../helper/code_executor/python_transformer.py | 2 +- .../workflow/callbacks/base_workflow_callback.py | 1 + api/core/workflow/nodes/code/code_node.py | 6 +++--- api/core/workflow/workflow_engine_manager.py | 1 + 9 files changed, 24 insertions(+), 7 deletions(-) diff --git a/api/core/app/apps/advanced_chat/workflow_event_trigger_callback.py b/api/core/app/apps/advanced_chat/workflow_event_trigger_callback.py index 972fda2d49..45d0e94bfb 100644 --- a/api/core/app/apps/advanced_chat/workflow_event_trigger_callback.py +++ b/api/core/app/apps/advanced_chat/workflow_event_trigger_callback.py @@ -97,6 +97,7 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): node_data: BaseNodeData, error: str, inputs: Optional[dict] = None, + outputs: Optional[dict] = None, process_data: Optional[dict] = None) -> None: """ Workflow node execute failed @@ -107,6 +108,7 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): node_type=node_type, node_data=node_data, inputs=inputs, + outputs=outputs, process_data=process_data, error=error ), diff --git a/api/core/app/apps/workflow/workflow_event_trigger_callback.py b/api/core/app/apps/workflow/workflow_event_trigger_callback.py index e5a8e8d374..e15ebd5548 100644 --- a/api/core/app/apps/workflow/workflow_event_trigger_callback.py +++ b/api/core/app/apps/workflow/workflow_event_trigger_callback.py @@ -96,6 +96,7 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): node_data: BaseNodeData, error: str, inputs: Optional[dict] = None, + outputs: Optional[dict] = None, process_data: Optional[dict] = None) -> None: """ Workflow node execute failed @@ -106,6 +107,7 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): node_type=node_type, node_data=node_data, inputs=inputs, + outputs=outputs, process_data=process_data, error=error ), diff --git a/api/core/app/entities/queue_entities.py b/api/core/app/entities/queue_entities.py index 5c31996fd3..bf174e30e1 100644 --- a/api/core/app/entities/queue_entities.py +++ b/api/core/app/entities/queue_entities.py @@ -168,6 +168,7 @@ class QueueNodeFailedEvent(AppQueueEvent): node_data: BaseNodeData inputs: Optional[dict] = None + outputs: Optional[dict] = None process_data: Optional[dict] = None error: str diff --git a/api/core/app/task_pipeline/workflow_cycle_manage.py b/api/core/app/task_pipeline/workflow_cycle_manage.py index 1af2074c05..54bfe50a38 100644 --- a/api/core/app/task_pipeline/workflow_cycle_manage.py +++ b/api/core/app/task_pipeline/workflow_cycle_manage.py @@ -218,7 +218,11 @@ class WorkflowCycleManage: def _workflow_node_execution_failed(self, workflow_node_execution: WorkflowNodeExecution, start_at: float, - error: str) -> WorkflowNodeExecution: + error: str, + inputs: Optional[dict] = None, + process_data: Optional[dict] = None, + outputs: Optional[dict] = None, + ) -> WorkflowNodeExecution: """ Workflow node execution failed :param workflow_node_execution: workflow node execution @@ -230,6 +234,9 @@ class WorkflowCycleManage: workflow_node_execution.error = error workflow_node_execution.elapsed_time = time.perf_counter() - start_at workflow_node_execution.finished_at = datetime.utcnow() + workflow_node_execution.inputs = json.dumps(inputs) if inputs else None + workflow_node_execution.process_data = json.dumps(process_data) if process_data else None + workflow_node_execution.outputs = json.dumps(outputs) if outputs else None db.session.commit() db.session.refresh(workflow_node_execution) @@ -402,7 +409,10 @@ class WorkflowCycleManage: workflow_node_execution = self._workflow_node_execution_failed( workflow_node_execution=workflow_node_execution, start_at=current_node_execution.start_at, - error=event.error + error=event.error, + inputs=event.inputs, + process_data=event.process_data, + outputs=event.outputs ) db.session.close() diff --git a/api/core/helper/code_executor/code_executor.py b/api/core/helper/code_executor/code_executor.py index 9d74edee0e..a96a2f1278 100644 --- a/api/core/helper/code_executor/code_executor.py +++ b/api/core/helper/code_executor/code_executor.py @@ -72,7 +72,7 @@ class CodeExecutor: response = response.json() except: raise CodeExecutionException('Failed to parse response') - + response = CodeExecutionResponse(**response) if response.code != 0: diff --git a/api/core/helper/code_executor/python_transformer.py b/api/core/helper/code_executor/python_transformer.py index 27863ee443..257aa4a8f6 100644 --- a/api/core/helper/code_executor/python_transformer.py +++ b/api/core/helper/code_executor/python_transformer.py @@ -48,7 +48,7 @@ class PythonTemplateTransformer(TemplateTransformer): :return: """ # extract result - result = re.search(r'<>(.*)<>', response, re.DOTALL) + result = re.search(r'<>(.*?)<>', response, re.DOTALL) if not result: raise ValueError('Failed to parse result') result = result.group(1) diff --git a/api/core/workflow/callbacks/base_workflow_callback.py b/api/core/workflow/callbacks/base_workflow_callback.py index 1f5472b430..c2546050c5 100644 --- a/api/core/workflow/callbacks/base_workflow_callback.py +++ b/api/core/workflow/callbacks/base_workflow_callback.py @@ -57,6 +57,7 @@ class BaseWorkflowCallback(ABC): node_data: BaseNodeData, error: str, inputs: Optional[dict] = None, + outputs: Optional[dict] = None, process_data: Optional[dict] = None) -> None: """ Workflow node execute failed diff --git a/api/core/workflow/nodes/code/code_node.py b/api/core/workflow/nodes/code/code_node.py index 01e4fc4583..ac9683edcc 100644 --- a/api/core/workflow/nodes/code/code_node.py +++ b/api/core/workflow/nodes/code/code_node.py @@ -11,19 +11,19 @@ MAX_NUMBER = 2 ** 63 - 1 MIN_NUMBER = -2 ** 63 MAX_PRECISION = 20 MAX_DEPTH = 5 -MAX_STRING_LENGTH = 1000 +MAX_STRING_LENGTH = 5000 MAX_STRING_ARRAY_LENGTH = 30 MAX_NUMBER_ARRAY_LENGTH = 1000 JAVASCRIPT_DEFAULT_CODE = """function main({arg1, arg2}) { return { - result: args1 + args2 + result: arg1 + arg2 } }""" PYTHON_DEFAULT_CODE = """def main(arg1: int, arg2: int) -> dict: return { - "result": args1 + args2, + "result": arg1 + arg2, }""" class CodeNode(BaseNode): diff --git a/api/core/workflow/workflow_engine_manager.py b/api/core/workflow/workflow_engine_manager.py index 143533810e..99ebf7c72e 100644 --- a/api/core/workflow/workflow_engine_manager.py +++ b/api/core/workflow/workflow_engine_manager.py @@ -429,6 +429,7 @@ class WorkflowEngineManager: node_data=node.node_data, error=node_run_result.error, inputs=node_run_result.inputs, + outputs=node_run_result.outputs, process_data=node_run_result.process_data, )