mirror of https://github.com/langgenius/dify.git
126 lines
3.1 KiB
Python
126 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
|
|
events: 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)
|