tritan-api / models /execution.py
Madras1's picture
Upload 17 files
d6815ad verified
"""
Execution state and result models
"""
from pydantic import BaseModel, Field
from typing import Optional, Any
from enum import Enum
from datetime import datetime
import uuid
class ExecutionStatus(str, Enum):
"""Status of workflow execution"""
PENDING = "pending"
RUNNING = "running"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class NodeResult(BaseModel):
"""Result of executing a single node"""
node_id: str
status: ExecutionStatus
output: Optional[Any] = None
error: Optional[str] = None
started_at: Optional[str] = None
completed_at: Optional[str] = None
duration_ms: Optional[float] = None
class ExecutionState(BaseModel):
"""Current state of workflow execution"""
execution_id: str = Field(default_factory=lambda: str(uuid.uuid4()))
workflow_id: str
status: ExecutionStatus = ExecutionStatus.PENDING
current_node: Optional[str] = None
node_results: dict[str, NodeResult] = Field(default_factory=dict)
variables: dict[str, Any] = Field(default_factory=dict) # Shared state
started_at: Optional[str] = None
completed_at: Optional[str] = None
class ExecutionResult(BaseModel):
"""Final result of workflow execution"""
execution_id: str
workflow_id: str
status: ExecutionStatus
node_results: list[NodeResult]
final_output: Optional[Any] = None
error: Optional[str] = None
total_duration_ms: Optional[float] = None
started_at: str
completed_at: str
class GuardianAlert(BaseModel):
"""Alert from the Guardian system"""
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
level: str # info, warning, error
message: str
node_id: Optional[str] = None
suggestion: Optional[str] = None
timestamp: str = Field(default_factory=lambda: datetime.now().isoformat())