gMAS / web_ui /backend /models /graph.py
Артём Боярских
chore: initial commit
3193174
"""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)