Workflow is almost done.

This commit is contained in:
Liu Zhicong
2023-09-01 00:39:36 -07:00
parent 27f163ddd3
commit b4990e4c57
11 changed files with 469 additions and 175 deletions
+41 -35
View File
@@ -41,16 +41,15 @@ class AIOS_Shell:
self.current_topic = "default"
async def _handle_no_target_msg(self,bus:AIBus,msg:AgentMsg) -> bool:
agent : AIAgent = await AgentManager().get(msg.target)
target_id = msg.target.split(".")[0]
agent : AIAgent = await AgentManager().get(target_id)
if agent is not None:
bus.register_message_handler(msg.target,agent._process_msg)
bus.register_message_handler(target_id,agent._process_msg)
return True
a_workflow = await WorkflowManager().get_workflow(msg.target)
a_workflow = await WorkflowManager().get_workflow(target_id)
if a_workflow is not None:
bus.register_message_handler(msg.target,a_workflow._process_msg)
for subflow in a_workflow.sub_workflows.values():
bus.register_message_handler(subflow.workflow_name,subflow._process_msg)
bus.register_message_handler(target_id,a_workflow._process_msg)
return True
return False
@@ -79,7 +78,7 @@ class AIOS_Shell:
agent_msg = AgentMsg()
agent_msg.set(sender,target_id,msg)
agent_msg.topic = topic
resp = await AIBus().get_default_bus().send_message(target_id,agent_msg)
resp = await AIBus.get_default_bus().send_message(target_id,agent_msg)
if resp is not None:
return resp.body
else:
@@ -111,10 +110,11 @@ class AIOS_Shell:
case 'history':
num = 10
offset = 0
if len(args) >= 1:
num = args[0]
if len(args) >= 2:
offset = args[1]
if args is not None:
if len(args) >= 1:
num = args[0]
if len(args) >= 2:
offset = args[1]
db_path = ""
if await self.is_agent(self.current_target):
@@ -140,37 +140,43 @@ class AIOS_Shell:
history = FileHistory('history.txt')
session = PromptSession(history=history)
def parse_function_call(s):
match = re.match(r'(\w+)\((.*)\)$', s)
if match:
func_name = match.group(1)
args_str = match.group(2)
args = []
buffer = ''
quote_count = 0 # Count of single or double quotes
for char in args_str:
if char in ['"', "'"]:
quote_count += 1
if char == ',' and quote_count % 2 == 0: # ',' is outside of quotes
args.append(buffer.strip())
buffer = ''
else:
buffer += char
if buffer:
args.append(buffer.strip())
return func_name, args
else:
def parse_function_call(func_string):
match = re.search(r'\s*(\w+)\s*\(\s*(.*)\s*\)\s*', func_string)
if not match:
return None
func_name = match.group(1)
params_string = match.group(2).strip()
params = re.split(r'\s*,\s*(?=(?:[^"]*"[^"]*")*[^"]*$)', params_string)
params = [param.strip('"') for param in params]
if len(params[0]) == 0:
params = None
return func_name, params
async def main():
print("aios shell prepareing...")
logging.basicConfig(filename="aios_shell.log",filemode="w",level=logging.INFO,format='[%(asctime)s]%(name)s[%(levelname)s]: %(message)s')
logging.basicConfig(filename="aios_shell.log",filemode="w",encoding='utf-8',
level=logging.INFO,
format='[%(asctime)s]%(name)s[%(levelname)s]: %(message)s')
shell = AIOS_Shell("user")
await shell.initial()
s = """了解。首先,我们需要进行方案讨论,定出一致的活动策略。我将任务分解如下:
财务组: 分析可见的预算,提供一份合理并被执行的财务方案。
行程预订组: 硅谷自然迷人的地方众多,寻找适合11人秋游的地点,以及一个可行的周末日期。策划一个一天或两天的安排,包括选择有南瓜园的地方,采摘苹果,参观当地的酗酒作坊等秋游活动。
嘉宾对接组: 把个人的食品饮料或过敏食物的需求事先了解并计入行程内。
酒店预订组:根据行程预订组的日期安排,活动时间在1天还是2天,在这个之内找一个合适的住宿,试着保持让住宿在预算边界以内。
活动摄像组: 准备活动拍摄与剪辑方案。\n\n然后,我将把这些拆分后的任务发来小组。
sendmsg(财务组,分析预算并提供一份财务方案.)
sendmsg(行程预订组,找出适合秋游的地方和日期.)
sendmsg(嘉宾对接组,了解个人的饮食需求.)
sendmsg(酒店预订组,查询并预订住宿.)
sendmsg(活动摄像组,提供活动拍摄方案.)
经过一两天的准备,一切就绪之后,我将向工作人员发送最后的行程计划,
"""
r = Workflow.prase_llm_result(s)
print(f"aios shell {shell.get_version()} ready.")
completer = WordCompleter(['send($target,$msg,$topic)',