Commit 737d0436 authored by takatost's avatar takatost

record inputs and process data when node failed

parent 5fe0d50c
...@@ -96,7 +96,9 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): ...@@ -96,7 +96,9 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
def on_workflow_node_execute_failed(self, node_id: str, def on_workflow_node_execute_failed(self, node_id: str,
node_type: NodeType, node_type: NodeType,
node_data: BaseNodeData, node_data: BaseNodeData,
error: str) -> None: error: str,
inputs: Optional[dict] = None,
process_data: Optional[dict] = None) -> None:
""" """
Workflow node execute failed Workflow node execute failed
""" """
...@@ -105,6 +107,8 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): ...@@ -105,6 +107,8 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
node_id=node_id, node_id=node_id,
node_type=node_type, node_type=node_type,
node_data=node_data, node_data=node_data,
inputs=inputs,
process_data=process_data,
error=error error=error
), ),
PublishFrom.APPLICATION_MANAGER PublishFrom.APPLICATION_MANAGER
......
...@@ -96,7 +96,9 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): ...@@ -96,7 +96,9 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
def on_workflow_node_execute_failed(self, node_id: str, def on_workflow_node_execute_failed(self, node_id: str,
node_type: NodeType, node_type: NodeType,
node_data: BaseNodeData, node_data: BaseNodeData,
error: str) -> None: error: str,
inputs: Optional[dict] = None,
process_data: Optional[dict] = None) -> None:
""" """
Workflow node execute failed Workflow node execute failed
""" """
...@@ -105,6 +107,8 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback): ...@@ -105,6 +107,8 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
node_id=node_id, node_id=node_id,
node_type=node_type, node_type=node_type,
node_data=node_data, node_data=node_data,
inputs=inputs,
process_data=process_data,
error=error error=error
), ),
PublishFrom.APPLICATION_MANAGER PublishFrom.APPLICATION_MANAGER
......
...@@ -158,6 +158,9 @@ class QueueNodeFailedEvent(AppQueueEvent): ...@@ -158,6 +158,9 @@ class QueueNodeFailedEvent(AppQueueEvent):
node_type: NodeType node_type: NodeType
node_data: BaseNodeData node_data: BaseNodeData
inputs: Optional[dict] = None
process_data: Optional[dict] = None
error: str error: str
......
...@@ -55,7 +55,9 @@ class BaseWorkflowCallback(ABC): ...@@ -55,7 +55,9 @@ class BaseWorkflowCallback(ABC):
def on_workflow_node_execute_failed(self, node_id: str, def on_workflow_node_execute_failed(self, node_id: str,
node_type: NodeType, node_type: NodeType,
node_data: BaseNodeData, node_data: BaseNodeData,
error: str) -> None: error: str,
inputs: Optional[dict] = None,
process_data: Optional[dict] = None) -> None:
""" """
Workflow node execute failed Workflow node execute failed
""" """
......
...@@ -420,7 +420,9 @@ class WorkflowEngineManager: ...@@ -420,7 +420,9 @@ class WorkflowEngineManager:
node_id=node.node_id, node_id=node.node_id,
node_type=node.node_type, node_type=node.node_type,
node_data=node.node_data, node_data=node.node_data,
error=node_run_result.error error=node_run_result.error,
inputs=node_run_result.inputs,
process_data=node_run_result.process_data,
) )
raise ValueError(f"Node {node.node_data.title} run failed: {node_run_result.error}") raise ValueError(f"Node {node.node_data.title} run failed: {node_run_result.error}")
......
...@@ -123,11 +123,11 @@ class Workflow(db.Model): ...@@ -123,11 +123,11 @@ class Workflow(db.Model):
@property @property
def graph_dict(self): def graph_dict(self):
return self.graph if not self.graph else json.loads(self.graph) return json.loads(self.graph) if self.graph else None
@property @property
def features_dict(self): def features_dict(self):
return self.features if not self.features else json.loads(self.features) return json.loads(self.features) if self.features else None
def user_input_form(self) -> list: def user_input_form(self) -> list:
# get start node from graph # get start node from graph
...@@ -270,15 +270,15 @@ class WorkflowRun(db.Model): ...@@ -270,15 +270,15 @@ class WorkflowRun(db.Model):
@property @property
def graph_dict(self): def graph_dict(self):
return self.graph if not self.graph else json.loads(self.graph) return json.loads(self.graph) if self.graph else None
@property @property
def inputs_dict(self): def inputs_dict(self):
return self.inputs if not self.inputs else json.loads(self.inputs) return json.loads(self.inputs) if self.inputs else None
@property @property
def outputs_dict(self): def outputs_dict(self):
return self.outputs if not self.outputs else json.loads(self.outputs) return json.loads(self.outputs) if self.outputs else None
class WorkflowNodeExecutionTriggeredFrom(Enum): class WorkflowNodeExecutionTriggeredFrom(Enum):
...@@ -419,19 +419,19 @@ class WorkflowNodeExecution(db.Model): ...@@ -419,19 +419,19 @@ class WorkflowNodeExecution(db.Model):
@property @property
def inputs_dict(self): def inputs_dict(self):
return self.inputs if not self.inputs else json.loads(self.inputs) return json.loads(self.inputs) if self.inputs else None
@property @property
def outputs_dict(self): def outputs_dict(self):
return self.outputs if not self.outputs else json.loads(self.outputs) return json.loads(self.outputs) if self.outputs else None
@property @property
def process_data_dict(self): def process_data_dict(self):
return self.process_data if not self.process_data else json.loads(self.process_data) return json.loads(self.process_data) if self.process_data else None
@property @property
def execution_metadata_dict(self): def execution_metadata_dict(self):
return self.execution_metadata if not self.execution_metadata else json.loads(self.execution_metadata) return json.loads(self.execution_metadata) if self.execution_metadata else None
class WorkflowAppLogCreatedFrom(Enum): class WorkflowAppLogCreatedFrom(Enum):
......
...@@ -36,7 +36,7 @@ def test_execute_llm(setup_openai_mock): ...@@ -36,7 +36,7 @@ def test_execute_llm(setup_openai_mock):
'type': 'llm', 'type': 'llm',
'model': { 'model': {
'provider': 'openai', 'provider': 'openai',
'name': 'gpt-3.5.turbo', 'name': 'gpt-3.5-turbo',
'mode': 'chat', 'mode': 'chat',
'completion_params': {} 'completion_params': {}
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment