Agent Components

AgenticFleet agents are the building blocks of your AI fleets. Each agent is a specialized entity with specific roles, capabilities, and behaviors that work together through fleet coordination patterns.

Agent Architecture

Base Components

Agent States

class AgentState(str, Enum):
    INITIALIZING = "initializing"  # Agent is being created
    IDLE = "idle"                  # Ready for new tasks
    BUSY = "busy"                  # Processing a task
    PAUSED = "paused"             # Temporarily suspended
    STOPPED = "stopped"           # No longer accepting tasks
    ERROR = "error"               # Encountered an error

Agent Roles

class AgentRole(str, Enum):
    USER = "user"               # Human user role
    ASSISTANT = "assistant"     # General assistant
    SYSTEM = "system"          # System-level operations
    FUNCTION = "function"      # Function execution
    CRITIC = "critic"          # Review and feedback
    EXECUTOR = "executor"      # Task execution

Specialized Agents

1. Code Agents

from agentic_fleet.agent.specialized.code import (
    ArchitectAgent,
    DeveloperAgent,
    ReviewerAgent
)

# Create a code architect
architect = ArchitectAgent(
    name="architect",
    expertise=["system_design", "architecture"],
    capabilities=["design", "planning"]
)

# Create a developer
developer = DeveloperAgent(
    name="developer",
    expertise=["python", "javascript"],
    capabilities=["implementation", "testing"]
)

2. Research Agents

from agentic_fleet.agent.specialized.research import (
    ResearcherAgent,
    AnalystAgent
)

# Create a researcher
researcher = ResearcherAgent(
    name="researcher",
    expertise=["literature_review", "data_analysis"],
    capabilities=["search", "summarize"]
)

Agent Communication

Message Types

class MessageType(str, Enum):
    TEXT = "text"               # Plain text messages
    CODE = "code"              # Code snippets
    FUNCTION_CALL = "function_call"  # Function invocations
    TOOL_CALL = "tool_call"    # Tool usage
    ERROR = "error"            # Error messages
    RESULT = "result"          # Task results

Message Format

message = AgentMessage(
    source="developer",
    target="reviewer",
    content="Code review request for feature X",
    type=MessageType.TEXT,
    metadata={
        "priority": 5,
        "task_id": "task_123",
        "context": {
            "file": "main.py",
            "changes": ["function_a", "function_b"]
        }
    }
)

Agent Capabilities

1. Task Processing

async def process_task(self, task: Task) -> TaskResult:
    """Process a task and return results."""
    try:
        # Validate task
        self.validate_task(task)
        
        # Update state
        self.state = AgentState.BUSY
        
        # Process based on capabilities
        if "code_review" in self.capabilities:
            result = await self.review_code(task)
        elif "implementation" in self.capabilities:
            result = await self.implement_feature(task)
            
        return TaskResult(
            status="success",
            output=result,
            metadata={"agent": self.name}
        )
    except Exception as e:
        self.state = AgentState.ERROR
        raise AgentError(f"Task processing failed: {str(e)}")

2. Fleet Integration

class FleetIntegratedAgent(BaseAgent):
    def __init__(
        self,
        name: str,
        fleet: Fleet,
        role: AgentRole,
        **kwargs
    ):
        super().__init__(name=name, role=role, **kwargs)
        self.fleet = fleet
        self.message_queue = asyncio.Queue()
        
    async def handle_fleet_message(
        self,
        message: AgentMessage
    ) -> Optional[AgentMessage]:
        """Handle messages from the fleet."""
        if message.type == MessageType.TASK:
            result = await self.process_task(message.content)
            return AgentMessage(
                source=self.name,
                target=message.source,
                content=result,
                type=MessageType.RESULT
            )
        return None

Agents API

The Agents API allows you to create, configure, and manage AI agents in AgenticFleet.

Create Agent

Create a new agent with specified capabilities.

from agentic_fleet import Agent, AgentCapabilities

agent = Agent.create(
    name="code_reviewer",
    capabilities=[
        AgentCapabilities.CODE_REVIEW,
        AgentCapabilities.DOCUMENTATION
    ],
    model="gpt-4",
    temperature=0.7
)

HTTP Request

POST /v1/agents

Request Body

{
  "name": "code_reviewer",
  "capabilities": ["code_review", "documentation"],
  "model": "gpt-4",
  "temperature": 0.7,
  "system_message": "You are a skilled code reviewer..."
}

Response

{
  "agent_id": "agt_123abc",
  "name": "code_reviewer",
  "capabilities": ["code_review", "documentation"],
  "status": "active",
  "created_at": "2025-02-24T15:30:00Z"
}

List Agents

Retrieve a list of all agents.

agents = Agent.list(limit=10, offset=0)

HTTP Request

GET /v1/agents

Query Parameters

ParameterTypeDescription
limitintegerMaximum number of agents to return
offsetintegerNumber of agents to skip
statusstringFilter by agent status

Response

{
  "agents": [
    {
      "agent_id": "agt_123abc",
      "name": "code_reviewer",
      "capabilities": ["code_review", "documentation"],
      "status": "active"
    }
  ],
  "total": 1,
  "has_more": false
}

Get Agent

Retrieve details about a specific agent.

agent = Agent.get("agt_123abc")

HTTP Request

GET /v1/agents/{agent_id}

Response

{
  "agent_id": "agt_123abc",
  "name": "code_reviewer",
  "capabilities": ["code_review", "documentation"],
  "model": "gpt-4",
  "temperature": 0.7,
  "status": "active",
  "created_at": "2025-02-24T15:30:00Z",
  "last_active": "2025-02-24T16:00:00Z"
}

Update Agent

Update an existing agent’s configuration.

agent = Agent.update(
    "agt_123abc",
    name="senior_reviewer",
    temperature=0.8
)

HTTP Request

PATCH /v1/agents/{agent_id}

Request Body

{
  "name": "senior_reviewer",
  "temperature": 0.8
}

Response

{
  "agent_id": "agt_123abc",
  "name": "senior_reviewer",
  "capabilities": ["code_review", "documentation"],
  "temperature": 0.8,
  "status": "active",
  "updated_at": "2025-02-24T16:05:00Z"
}

Delete Agent

Delete an agent.

Agent.delete("agt_123abc")

HTTP Request

DELETE /v1/agents/{agent_id}

Response

{
  "deleted": true,
  "agent_id": "agt_123abc"
}

Agent Capabilities

List of available agent capabilities:

CapabilityDescription
CODE_REVIEWCode review and analysis
DOCUMENTATIONDocumentation generation
TESTINGTest creation and execution
PLANNINGTask planning and breakdown
RESEARCHWeb research and analysis
CHATInteractive chat capabilities
EXECUTIONCode execution and validation

Best Practices

1. Agent Design

  • Keep agents focused and specialized
  • Implement proper error handling
  • Use appropriate system messages
  • Monitor agent performance

2. State Management

  • Always handle state transitions properly
  • Implement timeout mechanisms
  • Add retry logic for failed operations
  • Keep track of agent metrics

3. Communication

  • Use typed messages
  • Include proper metadata
  • Implement rate limiting
  • Handle async communication properly

4. Error Handling

class AgentError(Exception):
    def __init__(
        self,
        message: str,
        agent_name: str = None,
        task_id: str = None
    ):
        self.agent_name = agent_name
        self.task_id = task_id
        super().__init__(message)

try:
    result = await agent.process_task(task)
except AgentError as e:
    logger.error(f"Agent {e.agent_name} failed task {e.task_id}: {str(e)}")
    # Handle error appropriately

Next Steps