suna/backend/core/api_models/agents.py

136 lines
4.2 KiB
Python

"""Agent-related API models."""
from pydantic import BaseModel
from typing import Optional, List, Dict, Any
# Import PaginationInfo directly to avoid forward reference issues
from .common import PaginationInfo
class AgentCreateRequest(BaseModel):
"""Request model for creating a new agent."""
name: str
system_prompt: Optional[str] = None
configured_mcps: Optional[List[Dict[str, Any]]] = []
custom_mcps: Optional[List[Dict[str, Any]]] = []
agentpress_tools: Optional[Dict[str, Any]] = {}
is_default: Optional[bool] = False
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
class AgentUpdateRequest(BaseModel):
"""Request model for updating an existing agent."""
name: Optional[str] = None
description: Optional[str] = None
system_prompt: Optional[str] = None
model: Optional[str] = None
configured_mcps: Optional[List[Dict[str, Any]]] = None
custom_mcps: Optional[List[Dict[str, Any]]] = None
agentpress_tools: Optional[Dict[str, Any]] = None
is_default: Optional[bool] = None
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
replace_mcps: Optional[bool] = None
class AgentVersionResponse(BaseModel):
"""Response model for agent version information."""
version_id: str
agent_id: str
version_number: int
version_name: str
system_prompt: str
model: Optional[str] = None
configured_mcps: List[Dict[str, Any]]
custom_mcps: List[Dict[str, Any]]
agentpress_tools: Dict[str, Any]
is_active: bool
created_at: str
updated_at: str
created_by: Optional[str] = None
class AgentVersionCreateRequest(BaseModel):
"""Request model for creating a new agent version."""
system_prompt: str
configured_mcps: Optional[List[Dict[str, Any]]] = []
custom_mcps: Optional[List[Dict[str, Any]]] = []
agentpress_tools: Optional[Dict[str, Any]] = {}
version_name: Optional[str] = None
class AgentResponse(BaseModel):
"""Response model for agent information."""
agent_id: str
name: str
description: Optional[str] = None
system_prompt: Optional[str] = None # Optional for list operations where config not loaded
model: Optional[str] = None
configured_mcps: List[Dict[str, Any]]
custom_mcps: List[Dict[str, Any]]
agentpress_tools: Dict[str, Any]
is_default: bool
is_public: Optional[bool] = False
tags: Optional[List[str]] = []
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
created_at: str
updated_at: Optional[str] = None
current_version_id: Optional[str] = None
version_count: Optional[int] = 1
current_version: Optional[AgentVersionResponse] = None
metadata: Optional[Dict[str, Any]] = None
account_id: Optional[str] = None # Internal field, may not always be needed in response
class AgentsResponse(BaseModel):
"""Response model for list of agents with pagination."""
agents: List[AgentResponse]
pagination: PaginationInfo
class ThreadAgentResponse(BaseModel):
"""Response model for thread agent information."""
agent: Optional[AgentResponse]
source: str
message: str
class AgentExportData(BaseModel):
"""Model for agent export data."""
name: str
description: Optional[str] = None
system_prompt: str
agentpress_tools: Dict[str, Any]
configured_mcps: List[Dict[str, Any]]
custom_mcps: List[Dict[str, Any]]
metadata: Optional[Dict[str, Any]] = None
export_version: str = "1.1"
exported_at: str
exported_by: Optional[str] = None
class AgentImportRequest(BaseModel):
"""Request to import an agent from JSON."""
import_data: AgentExportData
import_as_new: bool = True # Always true, only creating new agents is supported
class AgentIconGenerationRequest(BaseModel):
"""Request model for generating agent icon and colors."""
name: str
description: Optional[str] = None
class AgentIconGenerationResponse(BaseModel):
"""Response model for generated agent icon and colors."""
icon_name: str
icon_color: str
icon_background: str