fix: 用户开始录音5s后ai反馈“我在认真听”
This commit is contained in:
@@ -752,13 +752,56 @@ class WebSocketBaselineTest(unittest.IsolatedAsyncioTestCase):
|
||||
await ws_router.websocket_endpoint(fake_websocket, "conv-1")
|
||||
await asyncio.sleep(0.05)
|
||||
|
||||
# 当前逻辑:仅首个分段且 5s 后发一次「我在认真听」;若本段 is_last 则取消,故此处应为 0
|
||||
transition_msgs = [
|
||||
item["message"]
|
||||
for item in fake_manager.sent_messages
|
||||
if item["message"]["type"] == ws_router.MessageType.AGENT_RESPONSE
|
||||
and item["message"].get("data", {}).get("transition") is True
|
||||
]
|
||||
self.assertGreaterEqual(len(transition_msgs), 1)
|
||||
self.assertEqual(len(transition_msgs), 0)
|
||||
|
||||
async def test_recording_started_sends_listening_feedback_after_delay(self):
|
||||
"""客户端发送 recording_started 后,延迟 5s 发一次「我在认真听」。"""
|
||||
user = _make_user()
|
||||
conversation = Conversation(id="conv-1", user_id=user.id, status="active")
|
||||
fake_db = _FakeAsyncDB(user=user, conversation=conversation)
|
||||
fake_manager = _FakeManager()
|
||||
fake_websocket = _FakeWebSocket(
|
||||
messages=[
|
||||
{"type": "recording_started", "data": {"voice_session_id": "session-1"}},
|
||||
WebSocketDisconnect(),
|
||||
]
|
||||
)
|
||||
|
||||
with ExitStack() as stack:
|
||||
stack.enter_context(
|
||||
patch.object(
|
||||
ws_router,
|
||||
"verify_token",
|
||||
return_value={"type": "access", "sub": user.id},
|
||||
)
|
||||
)
|
||||
stack.enter_context(
|
||||
patch.object(ws_router, "get_async_db", _db_provider(fake_db))
|
||||
)
|
||||
stack.enter_context(patch.object(ws_router, "manager", fake_manager))
|
||||
stack.enter_context(_redis_empty_history_patch())
|
||||
stack.enter_context(
|
||||
patch("routers.websocket.LISTENING_FEEDBACK_DELAY_SEC", 0.05)
|
||||
)
|
||||
|
||||
await ws_router.websocket_endpoint(fake_websocket, "conv-1")
|
||||
await asyncio.sleep(0.12)
|
||||
|
||||
transition_msgs = [
|
||||
item["message"]
|
||||
for item in fake_manager.sent_messages
|
||||
if item["message"]["type"] == ws_router.MessageType.AGENT_RESPONSE
|
||||
and item["message"].get("data", {}).get("transition") is True
|
||||
]
|
||||
self.assertEqual(len(transition_msgs), 1)
|
||||
self.assertIn("我在认真听", transition_msgs[0]["data"].get("text", ""))
|
||||
|
||||
async def test_audio_segment_last_segment_does_not_emit_terminal_transition(self):
|
||||
user = _make_user()
|
||||
@@ -814,14 +857,14 @@ class WebSocketBaselineTest(unittest.IsolatedAsyncioTestCase):
|
||||
await ws_router.websocket_endpoint(fake_websocket, "conv-1")
|
||||
await asyncio.sleep(0.05)
|
||||
|
||||
# 仅一段且 is_last:延迟任务被取消,不应发出 transition
|
||||
transition_msgs = [
|
||||
item["message"]
|
||||
for item in fake_manager.sent_messages
|
||||
if item["message"]["type"] == ws_router.MessageType.AGENT_RESPONSE
|
||||
and item["message"].get("data", {}).get("transition") is True
|
||||
]
|
||||
self.assertEqual(len(transition_msgs), 1)
|
||||
self.assertIsNone(transition_msgs[0]["data"].get("is_last"))
|
||||
self.assertEqual(len(transition_msgs), 0)
|
||||
|
||||
async def test_audio_segment_continues_after_reconnect_with_existing_previous_segment(self):
|
||||
user = _make_user()
|
||||
|
||||
Reference in New Issue
Block a user