2024-12-23 15:17:40 -08:00
|
|
|
from typing import Annotated, Any, List, Mapping, Optional
|
2024-12-04 16:14:41 -08:00
|
|
|
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
|
|
from ..messages import (
|
2024-12-18 14:09:19 -08:00
|
|
|
AgentEvent,
|
2024-12-04 16:14:41 -08:00
|
|
|
ChatMessage,
|
|
|
|
)
|
|
|
|
|
2024-12-23 15:17:40 -08:00
|
|
|
# Ensures pydantic can distinguish between types of events & messages.
|
|
|
|
_AgentMessage = Annotated[AgentEvent | ChatMessage, Field(discriminator="type")]
|
|
|
|
|
2024-12-04 16:14:41 -08:00
|
|
|
|
|
|
|
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."""
|
|
|
|
|
2024-12-20 10:27:41 +04:00
|
|
|
llm_context: Mapping[str, Any] = Field(default_factory=lambda: dict([("messages", [])]))
|
2024-12-04 16:14:41 -08:00
|
|
|
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."""
|
|
|
|
|
2024-12-23 15:17:40 -08:00
|
|
|
message_thread: List[_AgentMessage] = Field(default_factory=list)
|
2024-12-04 16:14:41 -08:00
|
|
|
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")
|
2024-12-15 11:18:17 +05:30
|
|
|
|
|
|
|
|
|
|
|
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")
|