"""Pydantic schemas for graph API requests and responses.""" from pydantic import BaseModel, Field from .agent import AgentCreateRequest class Position(BaseModel): """Node position on the canvas.""" x: float = 0.0 y: float = 0.0 class EdgeDefinition(BaseModel): """Definition of a graph edge.""" source: str target: str weight: float = 1.0 condition: str | None = None # Named condition: "always", "source_success", etc. label: str | None = None class GraphSaveRequest(BaseModel): """Request body for creating/saving a graph.""" name: str description: str = "" agents: list[AgentCreateRequest] = Field(default_factory=list) edges: list[EdgeDefinition] = Field(default_factory=list) positions: dict[str, Position] = Field(default_factory=dict) start_node: str | None = None end_node: str | None = None task_query: str = "" class GraphResponse(BaseModel): """Graph response returned by the API.""" graph_id: str name: str description: str = "" agents: list[AgentCreateRequest] = Field(default_factory=list) edges: list[EdgeDefinition] = Field(default_factory=list) positions: dict[str, Position] = Field(default_factory=dict) start_node: str | None = None end_node: str | None = None task_query: str = "" created_at: str = "" updated_at: str = "" validation_errors: list[str] = Field(default_factory=list) class GraphListItem(BaseModel): """Minimal graph info for listing.""" graph_id: str name: str description: str = "" agent_count: int = 0 edge_count: int = 0 created_at: str = "" updated_at: str = "" class GraphValidationResponse(BaseModel): """Response from graph validation.""" is_valid: bool errors: list[str] = Field(default_factory=list) warnings: list[str] = Field(default_factory=list) execution_order: list[str] = Field(default_factory=list)