2023-08-30 12:30:41 -07:00
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
from .agent import AIAgent,AgentPrompt
|
2023-08-22 17:11:20 -07:00
|
|
|
|
2023-08-23 11:19:16 -07:00
|
|
|
class AIRole:
|
2023-08-22 17:11:20 -07:00
|
|
|
def __init__(self) -> None:
|
|
|
|
|
self.agent_instance_id : str = None
|
|
|
|
|
self.role_name : str = None
|
2023-09-01 00:39:36 -07:00
|
|
|
self.role_id :str = None # $workflow_id.$sub_workflow_id.$role_name
|
2023-08-30 12:30:41 -07:00
|
|
|
self.fullname : str = None
|
|
|
|
|
self.agent_name : str = None
|
|
|
|
|
self.prompt : AgentPrompt = None
|
2023-08-22 17:11:20 -07:00
|
|
|
self.introduce : str = None
|
2023-08-30 12:30:41 -07:00
|
|
|
self.agent = None
|
2023-09-21 00:39:39 -07:00
|
|
|
self.enable_function_list : list[str] = None
|
2023-08-22 17:11:20 -07:00
|
|
|
|
|
|
|
|
def load_from_config(self,config:dict) -> bool:
|
2023-08-30 12:30:41 -07:00
|
|
|
name_node = config.get("name")
|
|
|
|
|
if name_node is None:
|
|
|
|
|
logging.error("role name is not found!")
|
|
|
|
|
return False
|
|
|
|
|
self.role_name = name_node
|
|
|
|
|
|
2023-09-01 00:39:36 -07:00
|
|
|
|
2023-08-30 12:30:41 -07:00
|
|
|
agent_id_node = config.get("agent")
|
|
|
|
|
if agent_id_node is None:
|
|
|
|
|
logging.error("agent id is not found!")
|
|
|
|
|
return False
|
|
|
|
|
self.agent_name = agent_id_node
|
2023-08-23 11:19:16 -07:00
|
|
|
|
2023-08-30 12:30:41 -07:00
|
|
|
prompt_node = config.get("prompt")
|
|
|
|
|
if prompt_node:
|
|
|
|
|
self.prompt = AgentPrompt()
|
|
|
|
|
if self.prompt.load_from_config(prompt_node) is False:
|
|
|
|
|
logging.error("load prompt failed!")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
intro_node = config.get("intro")
|
|
|
|
|
if intro_node is not None:
|
|
|
|
|
self.introduce = intro_node
|
2023-09-21 00:39:39 -07:00
|
|
|
|
|
|
|
|
if config.get("enable_function") is not None:
|
|
|
|
|
self.enable_function_list = config["enable_function"]
|
2023-09-01 00:39:36 -07:00
|
|
|
|
|
|
|
|
def get_role_id(self) -> str:
|
|
|
|
|
return self.role_id
|
|
|
|
|
|
2023-08-22 17:11:20 -07:00
|
|
|
def get_intro(self) -> str:
|
|
|
|
|
return self.introduce
|
|
|
|
|
|
|
|
|
|
def get_name(self) -> str:
|
|
|
|
|
return self.role_name
|
|
|
|
|
|
2023-08-30 12:30:41 -07:00
|
|
|
def get_prompt(self) -> AgentPrompt:
|
|
|
|
|
return self.prompt
|
|
|
|
|
|
2023-08-23 11:19:16 -07:00
|
|
|
class AIRoleGroup:
|
2023-08-22 17:11:20 -07:00
|
|
|
def __init__(self) -> None:
|
2023-08-30 12:30:41 -07:00
|
|
|
self.roles : dict[str,AIRole] = {}
|
2023-09-01 00:39:36 -07:00
|
|
|
self.owner_name : str = None
|
2023-08-30 12:30:41 -07:00
|
|
|
|
|
|
|
|
def load_from_config(self,config:dict) -> bool:
|
|
|
|
|
for k,v in config.items():
|
|
|
|
|
role = AIRole()
|
|
|
|
|
if role.load_from_config(v) is False:
|
|
|
|
|
logging.error(f"load role {k} failed!")
|
|
|
|
|
return False
|
2023-09-01 00:39:36 -07:00
|
|
|
role.role_id = self.owner_name + "." + k
|
2023-08-30 12:30:41 -07:00
|
|
|
self.roles[k] = role
|
|
|
|
|
|
|
|
|
|
return True
|
2023-08-22 17:11:20 -07:00
|
|
|
|
2023-08-30 12:30:41 -07:00
|
|
|
def get(self,role_name:str) -> AIRole:
|
|
|
|
|
return self.roles.get(role_name)
|
2023-08-22 17:11:20 -07:00
|
|
|
|
|
|
|
|
|