mirror of
https://github.com/langgenius/dify.git
synced 2026-01-14 06:07:33 +08:00
- Added `plugin_unique_identifier` to `PluginTriggerData` and `TriggerProviderApiEntity` to improve identification of trigger plugins. - Introduced `PluginTriggerDispatchData` for structured dispatch data in Celery tasks, enhancing the clarity of trigger dispatching. - Updated `dispatch_triggered_workflows_async` to utilize the new dispatch data structure, improving error handling and logging for trigger invocations. - Enhanced metadata handling in `TriggerPluginNode` to include trigger information, aiding in debugging and tracking. These changes improve the robustness and maintainability of trigger plugin interactions within the workflow system.
124 lines
3.1 KiB
Python
124 lines
3.1 KiB
Python
"""
|
|
Pydantic models for async workflow trigger system.
|
|
"""
|
|
|
|
from collections.abc import Mapping, Sequence
|
|
from enum import StrEnum
|
|
from typing import Any, Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
from models.enums import WorkflowRunTriggeredFrom
|
|
|
|
|
|
class AsyncTriggerStatus(StrEnum):
|
|
"""Async trigger execution status"""
|
|
|
|
COMPLETED = "completed"
|
|
FAILED = "failed"
|
|
TIMEOUT = "timeout"
|
|
|
|
|
|
class TriggerData(BaseModel):
|
|
"""Base trigger data model for async workflow execution"""
|
|
|
|
app_id: str
|
|
tenant_id: str
|
|
workflow_id: Optional[str] = None
|
|
root_node_id: str
|
|
inputs: Mapping[str, Any]
|
|
files: Sequence[Mapping[str, Any]] = Field(default_factory=list)
|
|
trigger_type: WorkflowRunTriggeredFrom
|
|
|
|
model_config = ConfigDict(use_enum_values=True)
|
|
|
|
|
|
class WebhookTriggerData(TriggerData):
|
|
"""Webhook-specific trigger data"""
|
|
|
|
trigger_type: WorkflowRunTriggeredFrom = WorkflowRunTriggeredFrom.WEBHOOK
|
|
webhook_url: str
|
|
headers: Mapping[str, str] = Field(default_factory=dict)
|
|
method: str = "POST"
|
|
|
|
|
|
class ScheduleTriggerData(TriggerData):
|
|
"""Schedule-specific trigger data"""
|
|
|
|
trigger_type: WorkflowRunTriggeredFrom = WorkflowRunTriggeredFrom.SCHEDULE
|
|
schedule_id: str
|
|
cron_expression: str
|
|
|
|
|
|
class PluginTriggerData(TriggerData):
|
|
"""Plugin webhook trigger data"""
|
|
|
|
trigger_type: WorkflowRunTriggeredFrom = WorkflowRunTriggeredFrom.PLUGIN
|
|
plugin_id: str
|
|
endpoint_id: str
|
|
|
|
class PluginTriggerDispatchData(BaseModel):
|
|
"""Plugin trigger dispatch data for Celery tasks"""
|
|
|
|
endpoint_id: str
|
|
provider_id: str
|
|
subscription_id: str
|
|
timestamp: int
|
|
triggers: list[str]
|
|
request_id: str
|
|
|
|
class WorkflowTaskData(BaseModel):
|
|
"""Lightweight data structure for Celery workflow tasks"""
|
|
|
|
workflow_trigger_log_id: str # Primary tracking ID - all other data can be fetched from DB
|
|
|
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
|
|
|
|
class AsyncTriggerExecutionResult(BaseModel):
|
|
"""Result from async trigger-based workflow execution"""
|
|
|
|
execution_id: str
|
|
status: AsyncTriggerStatus
|
|
result: Optional[Mapping[str, Any]] = None
|
|
error: Optional[str] = None
|
|
elapsed_time: Optional[float] = None
|
|
total_tokens: Optional[int] = None
|
|
|
|
model_config = ConfigDict(use_enum_values=True)
|
|
|
|
|
|
class AsyncTriggerResponse(BaseModel):
|
|
"""Response from triggering an async workflow"""
|
|
|
|
workflow_trigger_log_id: str
|
|
task_id: str
|
|
status: str
|
|
queue: str
|
|
|
|
model_config = ConfigDict(use_enum_values=True)
|
|
|
|
|
|
class TriggerLogResponse(BaseModel):
|
|
"""Response model for trigger log data"""
|
|
|
|
id: str
|
|
tenant_id: str
|
|
app_id: str
|
|
workflow_id: str
|
|
trigger_type: WorkflowRunTriggeredFrom
|
|
status: str
|
|
queue_name: str
|
|
retry_count: int
|
|
celery_task_id: Optional[str] = None
|
|
workflow_run_id: Optional[str] = None
|
|
error: Optional[str] = None
|
|
outputs: Optional[str] = None
|
|
elapsed_time: Optional[float] = None
|
|
total_tokens: Optional[int] = None
|
|
created_at: Optional[str] = None
|
|
triggered_at: Optional[str] = None
|
|
finished_at: Optional[str] = None
|
|
|
|
model_config = ConfigDict(use_enum_values=True)
|