9 Commits

Author SHA1 Message Date
CakeCN
fc7c6708b4 Merge branch 'test' 2025-12-11 16:20:44 +08:00
CakeCN
7300b304e3 修复bug 2025-12-11 16:19:59 +08:00
CakeCN
7aa7bf1690 log receive ack 2025-12-11 15:42:45 +08:00
CakeCN
84a4a578a8 add some logger 2025-12-11 15:32:41 +08:00
CakeCN
5df2931fa1 fix logger 2025-12-11 15:23:50 +08:00
CakeCN
99758ce1f8 add app context log 2025-12-11 15:10:02 +08:00
CakeCN
ae91b62332 logger time 2025-12-11 15:02:33 +08:00
CakeCN
1bf13aacf6 little change 2025-12-11 14:04:58 +08:00
CakeCN
9dfa0c9738 speed up event wait 2025-12-10 22:47:39 +08:00
5 changed files with 26 additions and 23 deletions

View File

@@ -32,8 +32,6 @@ class ASEngineClient:
# ACK相关 # ACK相关
self.ack_events: Dict[str, Event] = {} # 存储ack_id和对应的Event对象 self.ack_events: Dict[str, Event] = {} # 存储ack_id和对应的Event对象
# 注册基础事件处理函数
self._register_base_events() self._register_base_events()
def _register_base_events(self): def _register_base_events(self):
@@ -72,6 +70,7 @@ class ASEngineClient:
# ACK事件处理 # ACK事件处理
@self.sio.on('ack', namespace=self.namespace) @self.sio.on('ack', namespace=self.namespace)
def on_ack(data): def on_ack(data):
print(f"Received ACK: {data}")
ack_id = data.get('ack_id') ack_id = data.get('ack_id')
if ack_id and ack_id in self.ack_events: if ack_id and ack_id in self.ack_events:
print(f"Received ACK for message: {ack_id}") print(f"Received ACK for message: {ack_id}")
@@ -228,7 +227,7 @@ class ASEngineClient:
self.sid = None self.sid = None
print("Disconnected from server") print("Disconnected from server")
def send_text(self, route: str, text: str, id:str="", wait_for_ack: bool = False, timeout: int = 5) -> bool: def send_text(self, route: str, text: str, id:str="", wait_for_ack: bool = False, timeout: int = 5, return_event: bool = False) -> Any:
""" """
发送文本消息 发送文本消息
:param route: 目标路由 :param route: 目标路由
@@ -236,7 +235,8 @@ class ASEngineClient:
:param id: 发送者ID :param id: 发送者ID
:param wait_for_ack: 是否等待服务器ACK确认 :param wait_for_ack: 是否等待服务器ACK确认
:param timeout: 等待ACK的超时时间 :param timeout: 等待ACK的超时时间
:return: 是否发送成功若wait_for_ack为True则返回是否收到ACK :param return_event: 是否返回事件对象和ack_id而不是等待ACK
:return: 如果wait_for_ack为True且return_event为False返回是否收到ACK如果return_event为True返回(event, ack_id);否则返回是否发送成功
""" """
if not self.connected: if not self.connected:
print("Not connected to server") print("Not connected to server")
@@ -247,20 +247,13 @@ class ASEngineClient:
try: try:
# 生成唯一ack_id # 生成唯一ack_id
ack_id = f"{id}_{datetime.now().strftime('%Y%m%d%H%M%S%f')}" ack_id = f"{id}_{datetime.now().strftime('%Y%m%d%H%M%S%f')}"
# 准备发送数据
data = { data = {
'type': 'text', 'type': 'text',
'data': text, 'data': text,
'id': id, 'id': id,
'ack_id': ack_id 'ack_id': ack_id
} }
# 发送数据
self.sio.emit(route, data, namespace=self.namespace) self.sio.emit(route, data, namespace=self.namespace)
print(f"Sent text to route '{route}': {text[:20]}")
# 如果不需要等待ACK直接返回True
if not wait_for_ack: if not wait_for_ack:
return True return True
@@ -268,6 +261,10 @@ class ASEngineClient:
event = Event() event = Event()
self.ack_events[ack_id] = event self.ack_events[ack_id] = event
# 如果需要返回事件对象,直接返回
if return_event:
return event, ack_id
# 等待ACK或超时 # 等待ACK或超时
received_ack = event.wait(timeout=timeout) received_ack = event.wait(timeout=timeout)
@@ -316,9 +313,6 @@ class ASEngineClient:
}, },
namespace=self.namespace namespace=self.namespace
) )
print(f"Sent voice file to route '{route}'")
# 如果不需要等待ACK直接返回True # 如果不需要等待ACK直接返回True
if not wait_for_ack: if not wait_for_ack:
return True return True
@@ -384,7 +378,6 @@ class ASEngineClient:
}, },
namespace=self.namespace namespace=self.namespace
) )
print(f"Sent image file to route '{route}': {filename}")
# 如果不需要等待ACK直接返回True # 如果不需要等待ACK直接返回True
if not wait_for_ack: if not wait_for_ack:
@@ -428,6 +421,17 @@ class HSAEngineClient(ASEngineClient):
super().__init__(server_url, namespace, id) super().__init__(server_url, namespace, id)
self.chatmanager = chatmanager self.chatmanager = chatmanager
def loadmarkdown(self, fmd, fmdp, fsp): def loadmarkdown(self, fmd, fmdp, fsp):
self.send_text('markdown-in', fmd, self.id, wait_for_ack=True) event1, ack_id1 = self.send_text('markdown-in', fmd, self.id, wait_for_ack=True, return_event=True)
self.send_text('markdown-prompt-in', fmdp, self.id, wait_for_ack=True) event2, ack_id2 = self.send_text('markdown-prompt-in', fmdp, self.id, wait_for_ack=True, return_event=True)
self.send_text('score-prompt-in', fsp, self.id, wait_for_ack=True) event3, ack_id3 = self.send_text('score-prompt-in', fsp, self.id, wait_for_ack=True, return_event=True)
timeout = 5 # 超时时间
success1 = event1.wait(timeout=timeout)
success2 = event2.wait(timeout=timeout)
success3 = event3.wait(timeout=timeout)
if ack_id1 in self.ack_events:
del self.ack_events[ack_id1]
if ack_id2 in self.ack_events:
del self.ack_events[ack_id2]
if ack_id3 in self.ack_events:
del self.ack_events[ack_id3]
return success1 and success2 and success3

View File

@@ -129,8 +129,8 @@ class ChatManager:
self.chapter_chain_now = chapter_index self.chapter_chain_now = chapter_index
self.chapter_chain[chapter_index].Focus() self.chapter_chain[chapter_index].Focus()
def load_next_chapter(self): def load_now_chapter(self):
print(f"now load next chapter markdown {self.chapter_chain_now}") print(f"now load now chapter markdown {self.chapter_chain_now}")
self.ase_client.loadmarkdown(self.chapter_chain[self.chapter_chain_now].chapter, self.chapter_chain[self.chapter_chain_now].chapter_prompt, self.chapter_chain[self.chapter_chain_now].score_prompt) self.ase_client.loadmarkdown(self.chapter_chain[self.chapter_chain_now].chapter, self.chapter_chain[self.chapter_chain_now].chapter_prompt, self.chapter_chain[self.chapter_chain_now].score_prompt)
self.load_code_in_markdown() self.load_code_in_markdown()

View File

@@ -24,10 +24,9 @@ def on_connect_to_ase(client, entry, init_data, **kwargs):
} }
response = requests.post(clear_url, json=payload, headers=headers) response = requests.post(clear_url, json=payload, headers=headers)
response.raise_for_status() # 检查请求是否成功 response.raise_for_status() # 检查请求是否成功
print(f"Clear user session successful: {response.json()}")
except Exception as e: except Exception as e:
print(f"Error clearing user session: {e}") print(f"Error clearing user session: {e}")
ase_client.chatmanager.load_next_chapter() ase_client.chatmanager.load_now_chapter()
ase_client.send_text("chapter-start", "") ase_client.send_text("chapter-start", "")
namespace_entry.emit('message', "教案加载完毕", room=init_data['room'], namespace='/agent') namespace_entry.emit('message', "教案加载完毕", room=init_data['room'], namespace='/agent')
@@ -69,5 +68,5 @@ def receive_ase_chapter_score(client_entry, user_and_manager, data, init_data):
chatmanager.scores[chatmanager.chapter_chain_now - 1] = data.get('data', None) chatmanager.scores[chatmanager.chapter_chain_now - 1] = data.get('data', None)
else: chatmanager.scores.append(data.get('data', None)) else: chatmanager.scores.append(data.get('data', None))
user.set_course_progress(chatmanager.chat_historys, chatmanager.scores, chatmanager.course_id, chatmanager.chapter_name, chatmanager.lesson_name) user.set_course_progress(chatmanager.chat_historys, chatmanager.scores, chatmanager.course_id, chatmanager.chapter_name, chatmanager.lesson_name)
chatmanager.load_next_chapter() chatmanager.load_now_chapter()
chatmanager.ase_client.send_text("chapter-start", "") chatmanager.ase_client.send_text("chapter-start", "")

BIN
profile_stats Normal file

Binary file not shown.

BIN
profile_stats_extract Normal file

Binary file not shown.