from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any, Union, Literal SwarmType = Literal[ "AgentRearrange", "MixtureOfAgents", "SpreadSheetSwarm", "SequentialWorkflow", "ConcurrentWorkflow", "GroupChat", "MultiAgentRouter", "AutoSwarmBuilder", "HiearchicalSwarm", "auto", "MajorityVoting", "MALT", "DeepResearchSwarm", "CouncilAsAJudge", "InteractiveGroupChat", ] class AgentSpec(BaseModel): agent_name: Optional[str] = Field( # default=None, description="The unique name assigned to the agent, which identifies its role and functionality within the swarm.", ) description: Optional[str] = Field( default=None, description="A detailed explanation of the agent's purpose, capabilities, and any specific tasks it is designed to perform.", ) system_prompt: Optional[str] = Field( default=None, description="The initial instruction or context provided to the agent, guiding its behavior and responses during execution.", ) model_name: Optional[str] = Field( default="gpt-4o-mini", description="The name of the AI model that the agent will utilize for processing tasks and generating outputs. For example: gpt-4o, gpt-4o-mini, openai/o3-mini", ) auto_generate_prompt: Optional[bool] = Field( default=False, description="A flag indicating whether the agent should automatically create prompts based on the task requirements.", ) max_tokens: Optional[int] = Field( default=8192, description="The maximum number of tokens that the agent is allowed to generate in its responses, limiting output length.", ) temperature: Optional[float] = Field( default=0.5, description="A parameter that controls the randomness of the agent's output; lower values result in more deterministic responses.", ) role: Optional[str] = Field( default="worker", description="The designated role of the agent within the swarm, which influences its behavior and interaction with other agents.", ) max_loops: Optional[int] = Field( default=1, description="The maximum number of times the agent is allowed to repeat its task, enabling iterative processing if necessary.", ) tools_list_dictionary: Optional[List[Dict[Any, Any]]] = Field( default=None, description="A dictionary of tools that the agent can use to complete its task.", ) mcp_url: Optional[str] = Field( default=None, description="The URL of the MCP server that the agent can use to complete its task.", ) class Config: arbitrary_types_allowed = True class AgentCompletion(BaseModel): agent_config: Optional[AgentSpec] = Field( None, description="The configuration of the agent to be completed.", ) task: Optional[str] = Field( None, description="The task to be completed by the agent." ) history: Optional[Union[Dict[Any, Any], List[Dict[str, str]]]] = ( Field( default=None, description="The history of the agent's previous tasks and responses. Can be either a dictionary or a list of message objects.", ) ) model_config = { "arbitrary_types_allowed": True, "populate_by_name": True, } class Agents(BaseModel): """Configuration for a collection of agents that work together as a swarm to accomplish tasks.""" agents: List[AgentSpec] = Field( description="A list containing the specifications of each agent that will participate in the swarm, detailing their roles and functionalities." ) class SwarmSpec(BaseModel): name: Optional[str] = Field( None, description="The name of the swarm, which serves as an identifier for the group of agents and their collective task.", max_length=100, ) description: Optional[str] = Field( None, description="A comprehensive description of the swarm's objectives, capabilities, and intended outcomes.", ) agents: Optional[List[AgentSpec]] = Field( None, description="A list of agents or specifications that define the agents participating in the swarm.", ) max_loops: Optional[int] = Field( default=1, description="The maximum number of execution loops allowed for the swarm, enabling repeated processing if needed.", ) swarm_type: Optional[SwarmType] = Field( None, description="The classification of the swarm, indicating its operational style and methodology.", ) rearrange_flow: Optional[str] = Field( None, description="Instructions on how to rearrange the flow of tasks among agents, if applicable.", ) task: Optional[str] = Field( None, description="The specific task or objective that the swarm is designed to accomplish.", ) img: Optional[str] = Field( None, description="An optional image URL that may be associated with the swarm's task or representation.", ) return_history: Optional[bool] = Field( True, description="A flag indicating whether the swarm should return its execution history along with the final output.", ) rules: Optional[str] = Field( None, description="Guidelines or constraints that govern the behavior and interactions of the agents within the swarm.", ) tasks: Optional[List[str]] = Field( None, description="A list of tasks that the swarm should complete.", ) messages: Optional[ Union[List[Dict[Any, Any]], Dict[Any, Any]] ] = Field( None, description="A list of messages that the swarm should complete.", ) stream: Optional[bool] = Field( False, description="A flag indicating whether the swarm should stream its output.", ) service_tier: Optional[str] = Field( "standard", description="The service tier to use for processing. Options: 'standard' (default) or 'flex' for lower cost but slower processing.", ) class Config: arbitrary_types_allowed = True