tritan-api / models /workflow.py
Madras1's picture
Upload 17 files
f43d403 verified
"""
Workflow data models
"""
from pydantic import BaseModel, Field
from typing import Optional, Any
from enum import Enum
import uuid
class NodeType(str, Enum):
"""Types of nodes available in Tritan"""
TRIGGER = "trigger" # Start of workflow
ACTION = "action" # Generic action
CONDITION = "condition" # If/else branching
LOOP = "loop" # Iterate over data
LLM = "llm" # AI/LLM node
HTTP = "http" # HTTP request
CODE = "code" # Custom code execution
TRANSFORM = "transform" # Data transformation
class Position(BaseModel):
"""Node position on canvas"""
x: float
y: float
class NodeData(BaseModel):
"""Node configuration data"""
label: str
description: Optional[str] = None
config: dict[str, Any] = Field(default_factory=dict)
# For LLM nodes
provider: Optional[str] = None # groq, openrouter, cerebras, gemini
model: Optional[str] = None
prompt: Optional[str] = None
temperature: Optional[float] = 0.7
# For HTTP nodes
url: Optional[str] = None
method: Optional[str] = "GET"
headers: Optional[dict[str, str]] = None
body: Optional[Any] = None
# For Code nodes
code: Optional[str] = None
# For Condition nodes
condition: Optional[str] = None
# For Transform nodes
transform: Optional[str] = None
input: Optional[str] = None
class Node(BaseModel):
"""A node in the workflow"""
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
type: NodeType
position: Position
data: NodeData
class Edge(BaseModel):
"""Connection between nodes"""
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
source: str # Source node ID
target: str # Target node ID
sourceHandle: Optional[str] = None # For condition nodes (true/false)
targetHandle: Optional[str] = None
class Workflow(BaseModel):
"""A complete workflow definition"""
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
name: str
description: Optional[str] = None
nodes: list[Node] = Field(default_factory=list)
edges: list[Edge] = Field(default_factory=list)
created_at: Optional[str] = None
updated_at: Optional[str] = None