from typing import Annotated, Any, List, Mapping, Optional from pydantic import BaseModel, Field from ..messages import ( AgentEvent, ChatMessage, ) # Ensures pydantic can distinguish between types of events & messages. _AgentMessage = Annotated[AgentEvent | ChatMessage, Field(discriminator="type")] class BaseState(BaseModel): """Base class for all saveable state""" type: str = Field(default="BaseState") version: str = Field(default="1.0.0") class AssistantAgentState(BaseState): """State for an assistant agent.""" llm_context: Mapping[str, Any] = Field(default_factory=lambda: dict([("messages", [])])) type: str = Field(default="AssistantAgentState") class TeamState(BaseState): """State for a team of agents.""" agent_states: Mapping[str, Any] = Field(default_factory=dict) team_id: str = Field(default="") type: str = Field(default="TeamState") class BaseGroupChatManagerState(BaseState): """Base state for all group chat managers.""" message_thread: List[_AgentMessage] = Field(default_factory=list) current_turn: int = Field(default=0) type: str = Field(default="BaseGroupChatManagerState") class ChatAgentContainerState(BaseState): """State for a container of chat agents.""" agent_state: Mapping[str, Any] = Field(default_factory=dict) message_buffer: List[ChatMessage] = Field(default_factory=list) type: str = Field(default="ChatAgentContainerState") class RoundRobinManagerState(BaseGroupChatManagerState): """State for :class:`~autogen_agentchat.teams.RoundRobinGroupChat` manager.""" next_speaker_index: int = Field(default=0) type: str = Field(default="RoundRobinManagerState") class SelectorManagerState(BaseGroupChatManagerState): """State for :class:`~autogen_agentchat.teams.SelectorGroupChat` manager.""" previous_speaker: Optional[str] = Field(default=None) type: str = Field(default="SelectorManagerState") class SwarmManagerState(BaseGroupChatManagerState): """State for :class:`~autogen_agentchat.teams.Swarm` manager.""" current_speaker: str = Field(default="") type: str = Field(default="SwarmManagerState") class MagenticOneOrchestratorState(BaseGroupChatManagerState): """State for :class:`~autogen_agentchat.teams.MagneticOneGroupChat` orchestrator.""" task: str = Field(default="") facts: str = Field(default="") plan: str = Field(default="") n_rounds: int = Field(default=0) n_stalls: int = Field(default=0) type: str = Field(default="MagenticOneOrchestratorState") class SocietyOfMindAgentState(BaseState): """State for a Society of Mind agent.""" inner_team_state: Mapping[str, Any] = Field(default_factory=dict) type: str = Field(default="SocietyOfMindAgentState")