/
OS-Worldb968155
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
#
# SPDX-License-Identifier: Apache-2.0
#
# Portions derived from https://github.com/microsoft/autogen are under the MIT License.
# SPDX-License-Identifier: MIT
from typing import TYPE_CHECKING, Any, Optional, Protocol, TypeVar, Union, runtime_checkable
from ..doc_utils import export_module
__all__ = ["Agent", "LLMAgent", "LLMMessageType"]
Tool = TypeVar("Tool")
LLMMessageType = dict[str, Any]
DEFAULT_SUMMARY_METHOD = "last_msg"
@runtime_checkable
@export_module("autogen")
class Agent(Protocol):
"""(In preview) A protocol for Agent.
An agent can communicate with other agents and perform actions.
Different agents can differ in what actions they perform in the `receive` method.
"""
@property
def name(self) -> str:
"""The name of the agent."""
...
@property
def description(self) -> str:
"""The description of the agent. Used for the agent's introduction in
a group chat setting.
"""
...
def send(
self,
message: Union[dict[str, Any], str],
recipient: "Agent",
request_reply: Optional[bool] = None,
) -> None:
"""Send a message to another agent.
Args:
message (dict or str): the message to send. If a dict, it should be
a JSON-serializable and follows the OpenAI's ChatCompletion schema.
recipient (Agent): the recipient of the message.
request_reply (bool): whether to request a reply from the recipient.
"""
...
async def a_send(
self,
message: Union[dict[str, Any], str],
recipient: "Agent",
request_reply: Optional[bool] = None,
) -> None:
"""(Async) Send a message to another agent.
Args:
message (dict or str): the message to send. If a dict, it should be
a JSON-serializable and follows the OpenAI's ChatCompletion schema.
recipient (Agent): the recipient of the message.
request_reply (bool): whether to request a reply from the recipient.
"""
...
def receive(
self,
message: Union[dict[str, Any], str],
sender: "Agent",
request_reply: Optional[bool] = None,
) -> None:
"""Receive a message from another agent.
Args:
message (dict or str): the message received. If a dict, it should be
a JSON-serializable and follows the OpenAI's ChatCompletion schema.
sender (Agent): the sender of the message.
request_reply (bool): whether the sender requests a reply.
"""
async def a_receive(
self,
message: Union[dict[str, Any], str],
sender: "Agent",
request_reply: Optional[bool] = None,
) -> None:
"""(Async) Receive a message from another agent.
Args:
message (dict or str): the message received. If a dict, it should be
a JSON-serializable and follows the OpenAI's ChatCompletion schema.
sender (Agent): the sender of the message.
request_reply (bool): whether the sender requests a reply.
"""
...
def generate_reply(
self,
messages: Optional[list[dict[str, Any]]] = None,
sender: Optional["Agent"] = None,
**kwargs: Any,
) -> Union[str, dict[str, Any], None]:
"""Generate a reply based on the received messages.
Args:
messages (list[dict[str, Any]]): a list of messages received from other agents.
The messages are dictionaries that are JSON-serializable and
follows the OpenAI's ChatCompletion schema.
sender: sender of an Agent instance.
**kwargs: Additional keyword arguments.
Returns:
str or dict or None: the generated reply. If None, no reply is generated.
"""
async def a_generate_reply(
self,
messages: Optional[list[dict[str, Any]]] = None,
sender: Optional["Agent"] = None,
**kwargs: Any,
) -> Union[str, dict[str, Any], None]:
"""(Async) Generate a reply based on the received messages.
Args:
messages (list[dict[str, Any]]): a list of messages received from other agents.
The messages are dictionaries that are JSON-serializable and
follows the OpenAI's ChatCompletion schema.
sender: sender of an Agent instance.
**kwargs: Additional keyword arguments.
Returns:
str or dict or None: the generated reply. If None, no reply is generated.
"""
...
def set_ui_tools(self, tools: list[Tool]) -> None:
"""Set the UI tools for the agent.
Args:
tools: a list of UI tools to set.
"""
...
def unset_ui_tools(self, tools: list[Tool]) -> None:
"""Unset the UI tools for the agent.
Args:
tools: a list of UI tools to set.
"""
...
@runtime_checkable
@export_module("autogen")
class LLMAgent(Agent, Protocol):
"""(In preview) A protocol for an LLM agent."""
@property
def system_message(self) -> str:
"""The system message of this agent."""
def update_system_message(self, system_message: str) -> None:
"""Update this agent's system message.
Args:
system_message (str): system message for inference.
"""
if TYPE_CHECKING:
# mypy will fail if Conversable agent does not implement Agent protocol
from .conversable_agent import ConversableAgent
def _check_protocol_implementation(agent: ConversableAgent) -> Agent:
return agent