mirror of
https://github.com/langgenius/dify.git
synced 2026-05-02 06:56:29 +08:00
record inputs and process data when node failed
This commit is contained in:
parent
5fe0d50cee
commit
737d04361b
@ -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):
|
|||||||
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):
|
|||||||
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):
|
|||||||
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):
|
|||||||
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):
|
|||||||
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:
|
|||||||
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):
|
|||||||
|
|
||||||
@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):
|
|||||||
|
|
||||||
@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):
|
|||||||
|
|
||||||
@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):
|
|||||||
'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': {}
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user