| """ |
| Pydantic models for request/response validation in the EvoAgentX API. |
| """ |
| from datetime import datetime |
| from typing import Optional, List, Dict, Any |
| from pydantic import BaseModel, Field |
| from bson import ObjectId |
| from evoagentx.app.db import AgentStatus, WorkflowStatus, ExecutionStatus |
|
|
| |
| class PyObjectId(ObjectId): |
| @classmethod |
| def __get_validators__(cls): |
| yield cls.validate |
| |
| @classmethod |
| def validate(cls, v): |
| if not ObjectId.is_valid(v): |
| raise ValueError("Invalid ObjectId") |
| return ObjectId(v) |
| |
| @classmethod |
| def __modify_schema__(cls, field_schema): |
| field_schema.update(type="string") |
|
|
| |
| class BaseSchema(BaseModel): |
| class Config: |
| allow_population_by_field_name = True |
| arbitrary_types_allowed = True |
| json_encoders = { |
| ObjectId: str, |
| datetime: lambda dt: dt.isoformat() |
| } |
|
|
| |
| class AgentCreate(BaseSchema): |
| name: str |
| description: Optional[str] = None |
| config: Dict[str, Any] |
| runtime_params: Dict[str, Any] = Field(default_factory=dict) |
| tags: List[str] = Field(default_factory=list) |
|
|
| class AgentUpdate(BaseSchema): |
| name: Optional[str] = None |
| description: Optional[str] = None |
| config: Optional[Dict[str, Any]] = None |
| runtime_params: Optional[Dict[str, Any]] = None |
| status: Optional[AgentStatus] = None |
| tags: Optional[List[str]] = None |
|
|
| class AgentResponse(BaseSchema): |
| id: str = Field(..., alias="_id") |
| name: str |
| description: Optional[str] = None |
| config: Dict[str, Any] |
| status: AgentStatus |
| runtime_params: Dict[str, Any] |
| created_at: datetime |
| updated_at: datetime |
| created_by: Optional[str] = None |
| tags: List[str] |
|
|
| |
| class WorkflowStepDefinition(BaseSchema): |
| step_id: str |
| agent_id: str |
| action: str |
| input_mapping: Dict[str, str] = Field(default_factory=dict) |
| output_mapping: Dict[str, str] = Field(default_factory=dict) |
| timeout_seconds: int = 300 |
| retry_count: int = 3 |
| depends_on: List[str] = Field(default_factory=list) |
|
|
| class WorkflowCreate(BaseSchema): |
| name: str |
| description: Optional[str] = None |
| definition: Dict[str, Any] |
| tags: List[str] = Field(default_factory=list) |
|
|
| class WorkflowUpdate(BaseSchema): |
| name: Optional[str] = None |
| description: Optional[str] = None |
| definition: Optional[Dict[str, Any]] = None |
| status: Optional[WorkflowStatus] = None |
| tags: Optional[List[str]] = None |
|
|
| class WorkflowResponse(BaseSchema): |
| id: str = Field(..., alias="_id") |
| name: str |
| description: Optional[str] = None |
| definition: Dict[str, Any] |
| agent_ids: List[str] |
| status: WorkflowStatus |
| created_at: datetime |
| updated_at: datetime |
| created_by: Optional[str] = None |
| tags: List[str] |
| version: int |
|
|
| |
| class ExecutionCreate(BaseSchema): |
| workflow_id: str |
| input_params: Dict[str, Any] = Field(default_factory=dict) |
| callback_url: Optional[str] = None |
|
|
| class ExecutionResponse(BaseSchema): |
| id: str = Field(..., alias="_id") |
| workflow_id: str |
| status: ExecutionStatus |
| start_time: Optional[datetime] = None |
| end_time: Optional[datetime] = None |
| input_params: Dict[str, Any] |
| results: Dict[str, Any] |
| created_by: Optional[str] = None |
| step_results: Dict[str, Dict[str, Any]] |
| current_step: Optional[str] = None |
| error_message: Optional[str] = None |
| created_at: datetime |
|
|
| class ExecutionLogResponse(BaseSchema): |
| id: str = Field(..., alias="_id") |
| workflow_id: str |
| execution_id: str |
| step_id: Optional[str] = None |
| agent_id: Optional[str] = None |
| timestamp: datetime |
| level: str |
| message: str |
| details: Dict[str, Any] |
|
|
| |
| class Token(BaseSchema): |
| access_token: str |
| token_type: str |
|
|
| class TokenPayload(BaseSchema): |
| sub: Optional[str] = None |
| exp: Optional[int] = None |
|
|
| class UserCreate(BaseSchema): |
| email: str |
| password: str |
| full_name: Optional[str] = None |
|
|
| class UserLogin(BaseSchema): |
| email: str |
| password: str |
|
|
| class UserResponse(BaseSchema): |
| id: str = Field(..., alias="_id") |
| email: str |
| full_name: Optional[str] = None |
| is_active: bool |
| is_admin: bool |
| created_at: datetime |
|
|
| |
| class PaginationParams(BaseSchema): |
| skip: int = 0 |
| limit: int = 100 |
| |
| class SearchParams(BaseSchema): |
| query: Optional[str] = None |
| tags: Optional[List[str]] = None |
| status: Optional[str] = None |
| start_date: Optional[datetime] = None |
| end_date: Optional[datetime] = None |