| """
|
| Luuna Autoflow Core - Data Models
|
| =================================
|
|
|
| Pydantic models for task definitions, results, and execution records.
|
| """
|
|
|
| from enum import Enum
|
| from typing import Any, Dict, List, Optional
|
| from datetime import datetime
|
| from pydantic import BaseModel, Field
|
| import uuid
|
|
|
|
|
| class TaskDomain(str, Enum):
|
| """Supported task domains for routing."""
|
| PDF = "pdf"
|
| WORKFLOW = "workflow"
|
| AGENT = "agent"
|
| DOCUMENT = "document"
|
| GENERAL = "general"
|
|
|
|
|
| class TaskMode(str, Enum):
|
| """Execution modes."""
|
| PLAN_ONLY = "plan_only"
|
| EXECUTE_MOCK = "execute_mock"
|
|
|
|
|
|
|
| class TaskStatus(str, Enum):
|
| """Execution status."""
|
| PENDING = "pending"
|
| RUNNING = "running"
|
| COMPLETED = "completed"
|
| FAILED = "failed"
|
| REQUIRES_APPROVAL = "requires_approval"
|
|
|
|
|
| class AutoflowTask(BaseModel):
|
| """Input task definition."""
|
| goal: str = Field(..., description="Task goal/description")
|
| mode: TaskMode = Field(default=TaskMode.PLAN_ONLY, description="Execution mode")
|
| domain: TaskDomain = Field(default=TaskDomain.GENERAL, description="Task domain")
|
| approval_required: bool = Field(default=True, description="Whether approval is required for execution")
|
| metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
|
|
|
| class AutoflowResult(BaseModel):
|
| """Structured execution result."""
|
| success: bool = Field(..., description="Whether execution succeeded")
|
| execution_id: str = Field(..., description="Unique execution identifier")
|
| selected_adapter: str = Field(..., description="Adapter that handled the task")
|
| plan: List[str] = Field(default_factory=list, description="Generated plan steps")
|
| result: Dict[str, Any] = Field(default_factory=dict, description="Execution result data")
|
| warnings: List[str] = Field(default_factory=list, description="Warning messages")
|
| requires_approval: bool = Field(default=False, description="Whether further approval is needed")
|
| status: TaskStatus = Field(default=TaskStatus.COMPLETED, description="Execution status")
|
| created_at: datetime = Field(default_factory=datetime.utcnow, description="Creation timestamp")
|
|
|
|
|
| class ExecutionRecord(BaseModel):
|
| """Stored execution record for memory/persistence."""
|
| execution_id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
| goal: str = Field(..., description="Original goal")
|
| domain: TaskDomain = Field(..., description="Task domain")
|
| mode: TaskMode = Field(..., description="Execution mode")
|
| selected_adapter: Optional[str] = Field(default=None, description="Selected adapter")
|
| status: TaskStatus = Field(default=TaskStatus.PENDING, description="Execution status")
|
| plan: List[str] = Field(default_factory=list, description="Generated plan")
|
| result: Dict[str, Any] = Field(default_factory=dict, description="Result data")
|
| warnings: List[str] = Field(default_factory=list, description="Warnings")
|
| requires_approval: bool = Field(default=False, description="Whether approval is required")
|
| created_at: datetime = Field(default_factory=datetime.utcnow)
|
| updated_at: datetime = Field(default_factory=datetime.utcnow)
|
| completed_at: Optional[datetime] = Field(default=None)
|
|
|
|
|
| class AdapterCapabilities(BaseModel):
|
| """Adapter capability declaration."""
|
| id: str = Field(..., description="Adapter identifier")
|
| name: str = Field(..., description="Human-readable name")
|
| description: str = Field(default="", description="Adapter description")
|
| domains: List[TaskDomain] = Field(default_factory=list, description="Supported domains")
|
| can_execute: bool = Field(default=False, description="Can execute real actions")
|
| requires_approval: bool = Field(default=True, description="Requires approval for execution")
|
| priority: int = Field(default=0, description="Routing priority (higher = preferred)")
|
| metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
|
|
|
| class ProviderInfo(BaseModel):
|
| """Provider/adapter info for API responses."""
|
| id: str
|
| name: str
|
| description: str
|
| domains: List[str]
|
| can_execute: bool
|
| requires_approval: bool
|
| status: str = "available"
|
|
|