Browse Source

Update dialogue_manager: fix multiple do_state_change in update_state

StrayWarrior 2 days ago
parent
commit
385af13af1
2 changed files with 16 additions and 2 deletions
  1. 1 2
      dialogue_manager.py
  2. 15 0
      unit_test.py

+ 1 - 2
dialogue_manager.py

@@ -180,12 +180,11 @@ class DialogueManager:
 
         # 检查是否处于消息聚合状态
         if self.current_state == DialogueState.MESSAGE_AGGREGATING:
-            # 收到的是特殊定时触发的空消息,且在聚合中,且已经超时,恢复之前状态,继续处理
+            # 收到的是特殊定时触发的空消息,且在聚合中,且已经超时,继续处理
             if message.type == MessageType.AGGREGATION_TRIGGER \
                     and message_ts - self.last_interaction_time > self.message_aggregation_sec * 1000:
                 logger.debug("user_id: {}, last interaction time: {}".format(
                     self.user_id, datetime.fromtimestamp(self.last_interaction_time / 1000)))
-                self.do_state_change(self.previous_state)
             else:
                 # 非空消息,更新最后交互时间,保持消息聚合状态
                 if message_text:

+ 15 - 0
unit_test.py

@@ -78,6 +78,21 @@ def test_agent_state_change(test_env):
     assert agent.current_state == DialogueState.MESSAGE_AGGREGATING
     assert agent.previous_state == DialogueState.GREETING
 
+    agent.do_state_change(DialogueState.CHITCHAT)
+    assert agent.current_state == DialogueState.CHITCHAT
+    assert agent.previous_state == DialogueState.GREETING
+
+    agent.do_state_change(DialogueState.MESSAGE_AGGREGATING)
+    agent.do_state_change(DialogueState.CHITCHAT)
+    assert agent.current_state == DialogueState.CHITCHAT
+    assert agent.previous_state == DialogueState.CHITCHAT
+
+    agent.do_state_change(DialogueState.MESSAGE_AGGREGATING)
+    agent.do_state_change(DialogueState.CHITCHAT)
+    assert agent.state_backup == (DialogueState.MESSAGE_AGGREGATING, DialogueState.CHITCHAT)
+    agent.rollback_state()
+    assert agent.current_state == DialogueState.MESSAGE_AGGREGATING
+
 
 def test_response_sanitization(test_env):
     case1 = '[2024-01-01 12:00:00] 你好'