Fix story maker bug

This commit is contained in:
wugren
2023-09-22 00:09:21 +08:00
parent 4e45130140
commit 5c2dd13ab2
10 changed files with 147 additions and 133 deletions
+23 -21
View File
@@ -19,14 +19,14 @@ class AIBusHandler:
async def handle_message(self,msg:AgentMsg) -> Any:
if self.handler is None:
return None
resp_msg = await self.handler(msg)
if self.enable_defualt_proc:
if resp_msg is not None:
await self.owner_bus.post_message(resp_msg,False)
return resp_msg
class AIBus:
_instance = None
@classmethod
@@ -48,16 +48,16 @@ class AIBus:
if msg.rely_msg_id is not None:
handler.results[msg.rely_msg_id] = msg
return None
handler.queue.put_nowait(msg)
self.start_process(target_id)
return True
if use_unhandle:
if self.unhandle_handler is not None:
if await self.unhandle_handler(self,msg):
return await self.post_message(msg,False)
logger.warn(f"post message to {msg.target} failed!,target not found")
return False
@@ -71,7 +71,7 @@ class AIBus:
if sender_handler is None:
logger.warn(f"sender {sender_id} not register on AI_BUS!")
return None
post_result = await self.post_message(msg)
if post_result is False:
return None
@@ -84,37 +84,39 @@ class AIBus:
msg.status = AgentMsgStatus.RESPONSED
del sender_handler.results[msg.msg_id]
return resp
await asyncio.sleep(0.2)
retry_times += 1
if retry_times > 5*120: # default timeout is 120 sec
if retry_times > 5*240: # default timeout is 240 sec
msg.status = AgentMsgStatus.ERROR
return None
return None
def register_unhandle_message_handler(self,handler:Any) -> Queue:
self.unhandle_handler = handler
# means sub
def register_message_handler(self,handler_name:str,handler:Any) -> Queue:
handler_node = AIBusHandler(handler,self)
def register_message_handler(self,handler_name:str,handler:Any) -> Queue:
handler_node = AIBusHandler(handler,self)
self.handlers[handler_name] = handler_node
return handler_node.queue
async def process_queue(self, handler:AIBusHandler):
while True:
# Wait for a message
message = await handler.queue.get()
#try:
try:
# Try to handle the message
await handler.handle_message(message)
#except Exception as e:
await handler.handle_message(message)
except Exception as e:
# If an error occurs, put the message back into the queue
# logger.error(f"handle message {message.msg_id} failed! {e}")
logger.error(f"handle message {message.msg_id} failed! {e}")
logger.exception(e)
raise e
#self.queues[name].put_nowait(message)
return
def start_process(self,target_name):
@@ -122,12 +124,12 @@ class AIBus:
if handler is None:
logger.error(f"handler {target_name} not found!")
return
if handler.handler is None:
return
if handler.working_task is not None:
logger.warn(f"handler {target_name} is already working!")
return
handler.working_task = asyncio.create_task(self.process_queue(handler))
handler.working_task = asyncio.create_task(self.process_queue(handler))