mirror of
https://github.com/microsoft/autogen.git
synced 2025-10-01 11:06:58 +00:00

* Added Runtime Factory to support multiple implementations * Rename to ComponentEnsemble to ZMQRuntime * rename zmq_runtime * rename zmq_runtime * pre-commit fixes * pre-commit fix * pre-commit fixes and default runtime * pre-commit fixes * Rename constants * Rename Constants --------- Co-authored-by: Li Jiang <bnujli@gmail.com>
192 lines
6.8 KiB
Python
192 lines
6.8 KiB
Python
"""
|
|
This file contains the implementation of various agents used in the application.
|
|
Each agent represents a different role and knows how to connect to external systems
|
|
to retrieve information.
|
|
"""
|
|
|
|
from autogencap.Actor import Actor
|
|
from autogencap.actor_runtime import IRuntime
|
|
from autogencap.ActorConnector import ActorConnector
|
|
from autogencap.DebugLog import Debug, Info, shorten
|
|
from autogencap.runtime_factory import RuntimeFactory
|
|
|
|
|
|
class GreeterAgent(Actor):
|
|
"""
|
|
Prints message to screen
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
start_thread=True,
|
|
agent_name="Greeter",
|
|
description="This is the greeter agent, who knows how to greet people.",
|
|
):
|
|
super().__init__(agent_name, description, start_thread=start_thread)
|
|
|
|
|
|
class FidelityAgent(Actor):
|
|
"""
|
|
This class represents the fidelity agent, who knows how to connect to fidelity to get account,
|
|
portfolio, and order information.
|
|
|
|
Args:
|
|
agent_name (str, optional): The name of the agent. Defaults to "Fidelity".
|
|
description (str, optional): A description of the agent. Defaults to "This is the
|
|
fidelity agent who knows how to connect to fidelity to get account, portfolio, and
|
|
order information."
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
agent_name="Fidelity",
|
|
description=(
|
|
"This is the fidelity agent, who knows"
|
|
"how to connect to fidelity to get account, portfolio, and order information."
|
|
),
|
|
):
|
|
super().__init__(agent_name, description)
|
|
|
|
|
|
class FinancialPlannerAgent(Actor):
|
|
"""
|
|
This class represents the financial planner agent, who knows how to connect to a financial
|
|
planner and get financial planning information.
|
|
|
|
Args:
|
|
agent_name (str, optional): The name of the agent. Defaults to "Financial Planner".
|
|
description (str, optional): A description of the agent. Defaults to "This is the
|
|
financial planner agent, who knows how to connect to a financial planner and get
|
|
financial planning information."
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
agent_name="Financial Planner",
|
|
description=(
|
|
"This is the financial planner"
|
|
" agent, who knows how to connect to a financial planner and get financial"
|
|
" planning information."
|
|
),
|
|
):
|
|
super().__init__(agent_name, description)
|
|
|
|
|
|
class QuantAgent(Actor):
|
|
"""
|
|
This class represents the quant agent, who knows how to connect to a quant and get
|
|
quant information.
|
|
|
|
Args:
|
|
agent_name (str, optional): The name of the agent. Defaults to "Quant".
|
|
description (str, optional): A description of the agent. Defaults to "This is the
|
|
quant agent, who knows how to connect to a quant and get quant information."
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
agent_name="Quant",
|
|
description="This is the quant agent, who knows " "how to connect to a quant and get quant information.",
|
|
):
|
|
super().__init__(agent_name, description)
|
|
|
|
|
|
class RiskManager(Actor):
|
|
"""
|
|
This class represents a risk manager, who will analyze portfolio risk.
|
|
|
|
Args:
|
|
description (str, optional): A description of the agent. Defaults to "This is the user
|
|
interface agent, who knows how to connect to a user interface and get
|
|
user interface information."
|
|
"""
|
|
|
|
cls_agent_name = "Risk Manager"
|
|
|
|
def __init__(
|
|
self,
|
|
description=(
|
|
"This is the user interface agent, who knows how to connect"
|
|
" to a user interface and get user interface information."
|
|
),
|
|
):
|
|
super().__init__(RiskManager.cls_agent_name, description)
|
|
|
|
|
|
class PersonalAssistant(Actor):
|
|
"""
|
|
This class represents the personal assistant, who knows how to connect to the other agents and
|
|
get information from them.
|
|
|
|
Args:
|
|
agent_name (str, optional): The name of the agent. Defaults to "PersonalAssistant".
|
|
description (str, optional): A description of the agent. Defaults to "This is the personal assistant,
|
|
who knows how to connect to the other agents and get information from them."
|
|
"""
|
|
|
|
cls_agent_name = "PersonalAssistant"
|
|
|
|
def __init__(
|
|
self,
|
|
agent_name=cls_agent_name,
|
|
description="This is the personal assistant, who knows how to connect to the other agents and get information from them.",
|
|
):
|
|
super().__init__(agent_name, description)
|
|
self.fidelity: ActorConnector = None
|
|
self.financial_planner: ActorConnector = None
|
|
self.quant: ActorConnector = None
|
|
self.risk_manager: ActorConnector = None
|
|
|
|
def on_connect(self, network: IRuntime):
|
|
"""
|
|
Connects the personal assistant to the specified local actor network.
|
|
|
|
Args:
|
|
network (LocalActorNetwork): The local actor network to connect to.
|
|
"""
|
|
Debug(self.actor_name, f"is connecting to {network}")
|
|
self.fidelity = network.find_by_name("Fidelity")
|
|
self.financial_planner = network.find_by_name("Financial Planner")
|
|
self.quant = network.find_by_name("Quant")
|
|
self.risk_manager = network.find_by_name("Risk Manager")
|
|
Debug(self.actor_name, "connected")
|
|
|
|
def disconnect_network(self, network: IRuntime):
|
|
"""
|
|
Disconnects the personal assistant from the specified local actor network.
|
|
|
|
Args:
|
|
network (LocalActorNetwork): The local actor network to disconnect from.
|
|
"""
|
|
super().disconnect_network(network)
|
|
self.fidelity.close()
|
|
self.financial_planner.close()
|
|
self.quant.close()
|
|
self.risk_manager.close()
|
|
Debug(self.actor_name, "disconnected")
|
|
|
|
def on_txt_msg(self, msg, msg_type, topic, sender):
|
|
"""
|
|
Processes a text message received by the personal assistant.
|
|
|
|
Args:
|
|
msg (str): The text message.
|
|
msg_type (str): The type of the message.
|
|
topic (str): The topic of the message.
|
|
sender (str): The sender of the message.
|
|
|
|
Returns:
|
|
bool: True if the message was processed successfully, False otherwise.
|
|
"""
|
|
if msg.strip().lower() != "quit" and msg.strip().lower() != "":
|
|
Info(self.actor_name, f"Helping user: {shorten(msg)}")
|
|
self.fidelity.send_txt_msg(f"I, {self.actor_name}, need your help to buy/sell assets for " + msg)
|
|
self.financial_planner.send_txt_msg(
|
|
f"I, {self.actor_name}, need your help in creating a financial plan for {msg}'s goals."
|
|
)
|
|
self.quant.send_txt_msg(
|
|
f"I, {self.actor_name}, need your help with quantitative analysis of the interest rate for " + msg
|
|
)
|
|
self.risk_manager.send_txt_msg(f"I, {self.actor_name}, need your help in analyzing {msg}'s portfolio risk")
|
|
return True
|