mirror of https://github.com/langgenius/dify.git
record inputs and process data when node failed
This commit is contained in:
parent
da3e1e9d14
commit
2b4b6817a3
|
|
@ -96,7 +96,9 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
|
|||
def on_workflow_node_execute_failed(self, node_id: str,
|
||||
node_type: NodeType,
|
||||
node_data: BaseNodeData,
|
||||
error: str) -> None:
|
||||
error: str,
|
||||
inputs: Optional[dict] = None,
|
||||
process_data: Optional[dict] = None) -> None:
|
||||
"""
|
||||
Workflow node execute failed
|
||||
"""
|
||||
|
|
@ -105,6 +107,8 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
|
|||
node_id=node_id,
|
||||
node_type=node_type,
|
||||
node_data=node_data,
|
||||
inputs=inputs,
|
||||
process_data=process_data,
|
||||
error=error
|
||||
),
|
||||
PublishFrom.APPLICATION_MANAGER
|
||||
|
|
|
|||
|
|
@ -96,7 +96,9 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
|
|||
def on_workflow_node_execute_failed(self, node_id: str,
|
||||
node_type: NodeType,
|
||||
node_data: BaseNodeData,
|
||||
error: str) -> None:
|
||||
error: str,
|
||||
inputs: Optional[dict] = None,
|
||||
process_data: Optional[dict] = None) -> None:
|
||||
"""
|
||||
Workflow node execute failed
|
||||
"""
|
||||
|
|
@ -105,6 +107,8 @@ class WorkflowEventTriggerCallback(BaseWorkflowCallback):
|
|||
node_id=node_id,
|
||||
node_type=node_type,
|
||||
node_data=node_data,
|
||||
inputs=inputs,
|
||||
process_data=process_data,
|
||||
error=error
|
||||
),
|
||||
PublishFrom.APPLICATION_MANAGER
|
||||
|
|
|
|||
|
|
@ -158,6 +158,9 @@ class QueueNodeFailedEvent(AppQueueEvent):
|
|||
node_type: NodeType
|
||||
node_data: BaseNodeData
|
||||
|
||||
inputs: Optional[dict] = None
|
||||
process_data: Optional[dict] = None
|
||||
|
||||
error: str
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,9 @@ class BaseWorkflowCallback(ABC):
|
|||
def on_workflow_node_execute_failed(self, node_id: str,
|
||||
node_type: NodeType,
|
||||
node_data: BaseNodeData,
|
||||
error: str) -> None:
|
||||
error: str,
|
||||
inputs: Optional[dict] = None,
|
||||
process_data: Optional[dict] = None) -> None:
|
||||
"""
|
||||
Workflow node execute failed
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -420,7 +420,9 @@ class WorkflowEngineManager:
|
|||
node_id=node.node_id,
|
||||
node_type=node.node_type,
|
||||
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}")
|
||||
|
|
|
|||
|
|
@ -123,11 +123,11 @@ class Workflow(db.Model):
|
|||
|
||||
@property
|
||||
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
|
||||
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:
|
||||
# get start node from graph
|
||||
|
|
@ -270,15 +270,15 @@ class WorkflowRun(db.Model):
|
|||
|
||||
@property
|
||||
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
|
||||
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
|
||||
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):
|
||||
|
|
@ -419,19 +419,19 @@ class WorkflowNodeExecution(db.Model):
|
|||
|
||||
@property
|
||||
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
|
||||
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
|
||||
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
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ def test_execute_llm(setup_openai_mock):
|
|||
'type': 'llm',
|
||||
'model': {
|
||||
'provider': 'openai',
|
||||
'name': 'gpt-3.5.turbo',
|
||||
'name': 'gpt-3.5-turbo',
|
||||
'mode': 'chat',
|
||||
'completion_params': {}
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue