Skip to content

Commit

Permalink
Add feature: Agent/Role enable_function config.
Browse files Browse the repository at this point in the history
  • Loading branch information
waterflier committed Sep 21, 2023
1 parent 080a891 commit 97f4030
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 5 deletions.
1 change: 1 addition & 0 deletions rootfs/agents/Jarvis/agent.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ instance_id = "Jarvis"
fullname = "Jarvis"
llm_model_name = "gpt-3.5-turbo-16k-0613"
max_token_size = 16000
#enable_function =["add_event"]

[[prompt]]
role = "system"
Expand Down
14 changes: 12 additions & 2 deletions src/aios_kernel/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def load_from_config(self,config:dict) -> bool:
if self.prompt.load_from_config(config["prompt"]) is False:
logger.error("load prompt from config failed!")
return False


return True

Expand All @@ -113,6 +114,7 @@ def __init__(self) -> None:
self.unread_msg = Queue() # msg from other agent
self.owner_env : Environment = None
self.owenr_bus = None
self.enable_function_list = []

@classmethod
def create_from_templete(cls,templete:AIAgentTemplete, fullname:str):
Expand Down Expand Up @@ -150,7 +152,8 @@ def load_from_config(self,config:dict) -> bool:
self.llm_model_name = config["llm_model_name"]
if config.get("max_token_size") is not None:
self.max_token_size = config["max_token_size"]

if config.get("enable_function") is not None:
self.enable_function_list = config["enable_function"]
return True


Expand Down Expand Up @@ -235,8 +238,15 @@ def _get_inner_functions(self) -> dict:
result_func = []
result_len = 0
for inner_func in all_inner_function:
func_name = inner_func.get_name()
if self.enable_function_list:
if len(self.enable_function_list) > 0:
if func_name not in self.enable_function_list:
logger.debug(f"ageint {self.agent_id} ignore inner func:{func_name}")
continue

this_func = {}
this_func["name"] = inner_func.get_name()
this_func["name"] = func_name
this_func["description"] = inner_func.get_description()
this_func["parameters"] = inner_func.get_parameters()
result_len += len(json.dumps(this_func)) / 4
Expand Down
4 changes: 4 additions & 0 deletions src/aios_kernel/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def __init__(self) -> None:
self.prompt : AgentPrompt = None
self.introduce : str = None
self.agent = None
self.enable_function_list : list[str] = None

def load_from_config(self,config:dict) -> bool:
name_node = config.get("name")
Expand All @@ -37,6 +38,9 @@ def load_from_config(self,config:dict) -> bool:
intro_node = config.get("intro")
if intro_node is not None:
self.introduce = intro_node

if config.get("enable_function") is not None:
self.enable_function_list = config["enable_function"]

def get_role_id(self) -> str:
return self.role_id
Expand Down
12 changes: 9 additions & 3 deletions src/aios_kernel/workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,15 +368,21 @@ def _format_msg_by_env_value(self,prompt:AgentPrompt):
old_content = msg.get("content")
msg["content"] = old_content.format_map(self.workflow_env)

def _get_inner_functions(self) -> dict:
def _get_inner_functions(self,the_role:AIRole) -> dict:
all_inner_function = self.workflow_env.get_all_ai_functions()
if all_inner_function is None:
return None

result_func = []
for inner_func in all_inner_function:
func_name = inner_func.get_name()
if the_role.enable_function_list:
if len(the_role.enable_function_list) > 0:
if func_name not in the_role.enable_function_list:
logger.debug(f"ageint {self.agent_id} ignore inner func:{func_name}")
continue
this_func = {}
this_func["name"] = inner_func.get_name()
this_func["name"] = func_name
this_func["description"] = inner_func.get_description()
this_func["parameters"] = inner_func.get_parameters()
result_func.append(this_func)
Expand Down Expand Up @@ -436,7 +442,7 @@ async def role_process_msg(self,msg:AgentMsg,the_role:AIRole,workflow_chat_sessi
prompt.append(msg_prompt)

self._format_msg_by_env_value(prompt)
inner_functions = self._get_inner_functions()
inner_functions = self._get_inner_functions(the_role)

async def _do_process_msg():
#TODO: send msg to agent might be better?
Expand Down

0 comments on commit 97f4030

Please sign in to comment.