feat: 完善 N7 智能座舱交互与控制链路
This commit is contained in:
@@ -49,6 +49,15 @@ class TranscriptAssemblerTests(unittest.TestCase):
|
||||
self.assertEqual(result.text, "打开空调。")
|
||||
self.assertEqual(result.duplicate_callbacks, 1)
|
||||
|
||||
def test_duplicate_partial_callback_is_idempotent(self) -> None:
|
||||
assembler = TranscriptAssembler("utterance-1")
|
||||
callback = segment("s0", 0, "打开空", final=False)
|
||||
assembler.update(callback)
|
||||
result = assembler.update(callback)
|
||||
self.assertEqual(result.text, "打开空")
|
||||
self.assertEqual(result.duplicate_callbacks, 1)
|
||||
self.assertEqual(len(result.partial_segments), 1)
|
||||
|
||||
def test_final_cannot_be_mutated(self) -> None:
|
||||
assembler = TranscriptAssembler("utterance-1")
|
||||
assembler.update(segment("s0", 0, "打开空调。", final=True))
|
||||
@@ -56,6 +65,42 @@ class TranscriptAssemblerTests(unittest.TestCase):
|
||||
self.assertTrue(result.uncertain)
|
||||
self.assertEqual(result.text, "打开空调。")
|
||||
|
||||
def test_late_partial_cannot_overwrite_authoritative_final(self) -> None:
|
||||
assembler = TranscriptAssembler("utterance-1")
|
||||
assembler.update(segment("s0", 0, "打开空调。", final=True))
|
||||
result = assembler.update(segment("s0", 0, "打开空", final=False))
|
||||
|
||||
self.assertEqual(result.text, "打开空调。")
|
||||
self.assertTrue(result.uncertain)
|
||||
self.assertIn("changed after final commit", result.conflicts[0])
|
||||
|
||||
def test_partial_final_duplicate_and_out_of_order_torture_sequence(self) -> None:
|
||||
assembler = TranscriptAssembler("utterance-1")
|
||||
assembler.update(segment("s1", 1, "温度二十", final=False))
|
||||
assembler.update(segment("s0", 0, "打开空", final=False))
|
||||
assembler.update(segment("s1", 1, "温度二十四点五度", final=True))
|
||||
duplicate = segment("s1", 1, "温度二十四点五度", final=True)
|
||||
assembler.update(duplicate)
|
||||
result = assembler.update(segment("s0", 0, "打开空调", final=True))
|
||||
completed = assembler.finish()
|
||||
|
||||
self.assertEqual(result.text, "打开空调,温度二十四点五度")
|
||||
self.assertEqual(completed.text, result.text)
|
||||
self.assertEqual(completed.duplicate_callbacks, 1)
|
||||
self.assertGreaterEqual(completed.out_of_order_callbacks, 2)
|
||||
self.assertFalse(completed.partial_segments)
|
||||
self.assertFalse(completed.uncertain)
|
||||
|
||||
def test_progressive_partial_is_replaced_instead_of_appended(self) -> None:
|
||||
assembler = TranscriptAssembler("utterance-1")
|
||||
snapshots = [
|
||||
assembler.update(segment("s0", 0, text, final=False)).text
|
||||
for text in ("打", "打开空", "打开空调")
|
||||
]
|
||||
|
||||
self.assertEqual(snapshots, ["打", "打开空", "打开空调"])
|
||||
self.assertNotIn("打,打开", snapshots[-1])
|
||||
|
||||
def test_out_of_order_callbacks_are_sorted(self) -> None:
|
||||
assembler = TranscriptAssembler("utterance-1")
|
||||
assembler.update(segment("s1", 1, "打开氛围灯。", final=True))
|
||||
|
||||
Reference in New Issue
Block a user