mirror of
https://github.com/langgenius/dify.git
synced 2026-05-06 02:18:08 +08:00
feat(trigger): implement trigger debugging functionality
- Added DraftWorkflowTriggerNodeApi and DraftWorkflowTriggerRunApi for debugging trigger nodes and workflows. - Enhanced TriggerDebugService to manage trigger debugging sessions and event listening. - Introduced structured event responses for trigger debugging, including listening started, received, node finished, and workflow started events. - Updated Queue and Stream entities to support new trigger debug events. - Refactored trigger input handling to streamline the process of creating inputs from trigger data. This implementation improves the debugging capabilities for trigger nodes and workflows, providing clearer event handling and structured responses.
This commit is contained in:
@ -51,6 +51,12 @@ class QueueEvent(StrEnum):
|
||||
PING = "ping"
|
||||
STOP = "stop"
|
||||
RETRY = "retry"
|
||||
# Trigger debug events
|
||||
TRIGGER_DEBUG_LISTENING_STARTED = "trigger_debug_listening_started"
|
||||
TRIGGER_DEBUG_RECEIVED = "trigger_debug_received"
|
||||
TRIGGER_DEBUG_NODE_FINISHED = "trigger_debug_node_finished"
|
||||
TRIGGER_DEBUG_WORKFLOW_STARTED = "trigger_debug_workflow_started"
|
||||
TRIGGER_DEBUG_TIMEOUT = "trigger_debug_timeout"
|
||||
|
||||
|
||||
class AppQueueEvent(BaseModel):
|
||||
@ -718,6 +724,65 @@ class QueueParallelBranchRunSucceededEvent(AppQueueEvent):
|
||||
"""loop id if node is in loop"""
|
||||
|
||||
|
||||
class QueueTriggerDebugListeningStartedEvent(AppQueueEvent):
|
||||
"""
|
||||
QueueTriggerDebugListeningStartedEvent entity
|
||||
"""
|
||||
|
||||
event: QueueEvent = QueueEvent.TRIGGER_DEBUG_LISTENING_STARTED
|
||||
session_id: str
|
||||
webhook_url: str
|
||||
timeout: int
|
||||
|
||||
|
||||
class QueueTriggerDebugReceivedEvent(AppQueueEvent):
|
||||
"""
|
||||
QueueTriggerDebugReceivedEvent entity
|
||||
"""
|
||||
|
||||
event: QueueEvent = QueueEvent.TRIGGER_DEBUG_RECEIVED
|
||||
subscription_id: str
|
||||
triggers: list[str]
|
||||
request_id: str
|
||||
timestamp: float
|
||||
|
||||
|
||||
class QueueTriggerDebugNodeFinishedEvent(AppQueueEvent):
|
||||
"""
|
||||
QueueTriggerDebugNodeFinishedEvent entity
|
||||
"""
|
||||
|
||||
event: QueueEvent = QueueEvent.TRIGGER_DEBUG_NODE_FINISHED
|
||||
id: str
|
||||
node_id: str
|
||||
node_type: str
|
||||
status: str
|
||||
outputs: Optional[Mapping[str, Any]] = None
|
||||
error: Optional[str] = None
|
||||
elapsed_time: Optional[float] = None
|
||||
execution_metadata: Optional[Mapping[str, Any]] = None
|
||||
|
||||
|
||||
class QueueTriggerDebugWorkflowStartedEvent(AppQueueEvent):
|
||||
"""
|
||||
QueueTriggerDebugWorkflowStartedEvent entity
|
||||
"""
|
||||
|
||||
event: QueueEvent = QueueEvent.TRIGGER_DEBUG_WORKFLOW_STARTED
|
||||
subscription_id: str
|
||||
triggers: list[str]
|
||||
request_id: str
|
||||
|
||||
|
||||
class QueueTriggerDebugTimeoutEvent(AppQueueEvent):
|
||||
"""
|
||||
QueueTriggerDebugTimeoutEvent entity
|
||||
"""
|
||||
|
||||
event: QueueEvent = QueueEvent.TRIGGER_DEBUG_TIMEOUT
|
||||
error: str = "Timeout waiting for trigger"
|
||||
|
||||
|
||||
class QueueParallelBranchRunFailedEvent(AppQueueEvent):
|
||||
"""
|
||||
QueueParallelBranchRunFailedEvent entity
|
||||
|
||||
@ -82,6 +82,12 @@ class StreamEvent(Enum):
|
||||
TEXT_CHUNK = "text_chunk"
|
||||
TEXT_REPLACE = "text_replace"
|
||||
AGENT_LOG = "agent_log"
|
||||
# Trigger debug events
|
||||
TRIGGER_DEBUG_LISTENING_STARTED = "trigger_debug_listening_started"
|
||||
TRIGGER_DEBUG_RECEIVED = "trigger_debug_received"
|
||||
TRIGGER_DEBUG_NODE_FINISHED = "trigger_debug_node_finished"
|
||||
TRIGGER_DEBUG_WORKFLOW_STARTED = "trigger_debug_workflow_started"
|
||||
TRIGGER_DEBUG_TIMEOUT = "trigger_debug_timeout"
|
||||
|
||||
|
||||
class StreamResponse(BaseModel):
|
||||
@ -837,3 +843,63 @@ class AgentLogStreamResponse(StreamResponse):
|
||||
|
||||
event: StreamEvent = StreamEvent.AGENT_LOG
|
||||
data: Data
|
||||
|
||||
|
||||
# Trigger Debug Stream Responses
|
||||
class TriggerDebugListeningStartedResponse(StreamResponse):
|
||||
"""
|
||||
TriggerDebugListeningStartedResponse entity
|
||||
"""
|
||||
|
||||
event: StreamEvent = StreamEvent.TRIGGER_DEBUG_LISTENING_STARTED
|
||||
session_id: str
|
||||
webhook_url: str
|
||||
timeout: int
|
||||
|
||||
|
||||
class TriggerDebugReceivedResponse(StreamResponse):
|
||||
"""
|
||||
TriggerDebugReceivedResponse entity
|
||||
"""
|
||||
|
||||
event: StreamEvent = StreamEvent.TRIGGER_DEBUG_RECEIVED
|
||||
subscription_id: str
|
||||
triggers: list[str]
|
||||
request_id: str
|
||||
timestamp: float
|
||||
|
||||
|
||||
class TriggerDebugNodeFinishedResponse(StreamResponse):
|
||||
"""
|
||||
TriggerDebugNodeFinishedResponse entity
|
||||
"""
|
||||
|
||||
event: StreamEvent = StreamEvent.TRIGGER_DEBUG_NODE_FINISHED
|
||||
id: str
|
||||
node_id: str
|
||||
node_type: str
|
||||
status: str
|
||||
outputs: Optional[Mapping[str, Any]] = None
|
||||
error: Optional[str] = None
|
||||
elapsed_time: float
|
||||
execution_metadata: Optional[Mapping[str, Any]] = None
|
||||
|
||||
|
||||
class TriggerDebugWorkflowStartedResponse(StreamResponse):
|
||||
"""
|
||||
TriggerDebugWorkflowStartedResponse entity
|
||||
"""
|
||||
|
||||
event: StreamEvent = StreamEvent.TRIGGER_DEBUG_WORKFLOW_STARTED
|
||||
subscription_id: str
|
||||
triggers: list[str]
|
||||
request_id: str
|
||||
|
||||
|
||||
class TriggerDebugTimeoutResponse(StreamResponse):
|
||||
"""
|
||||
TriggerDebugTimeoutResponse entity
|
||||
"""
|
||||
|
||||
event: StreamEvent = StreamEvent.TRIGGER_DEBUG_TIMEOUT
|
||||
error: str = "Timeout waiting for trigger"
|
||||
|
||||
Reference in New Issue
Block a user