feat: tolerate recoverable seat intent inputs

This commit is contained in:
vee
2026-08-02 06:12:36 +08:00
parent 55d0d400cb
commit a6d974cb29
9 changed files with 942 additions and 31 deletions
+23
View File
@@ -301,6 +301,29 @@ class LocalIntentParserTests(unittest.TestCase):
self.assertTrue(minimum["actions"][0]["motion_intent"]["duration_clamped"])
self.assertIn("最小允许时长为0.3秒", minimum["actions"][0]["user_notice"])
def test_rounds_decimal_and_clamps_negative_absolute_positions(self) -> None:
decimal = parse_local_intent("副驾座椅水平位置调到50.5%")
negative = parse_local_intent("副驾座椅水平位置调到-10%")
self.assertEqual(decimal["ambiguities"], [])
self.assertEqual(decimal["actions"][0]["position_pct"], 51)
self.assertIn("取整为51%", decimal["actions"][0]["user_notice"])
self.assertEqual(negative["ambiguities"], [])
self.assertEqual(negative["actions"][0]["position_pct"], 0)
self.assertIn("0%的备用目标", negative["actions"][0]["user_notice"])
def test_zero_duration_uses_minimum_safe_motion_instead_of_rejecting(self) -> None:
result = parse_local_intent(
"副驾靠背向后移动0秒", self.motion_context()
)
self.assertEqual(result["ambiguities"], [])
motion = result["actions"][0]["motion_intent"]
self.assertEqual(motion["requested_duration_ms"], 0)
self.assertEqual(motion["applied_duration_ms"], 300)
self.assertTrue(motion["duration_clamped"])
self.assertIn("已按0.3秒", result["actions"][0]["user_notice"])
def test_rejects_unsupported_level_and_conflicting_state(self) -> None:
unsupported = parse_local_intent("副驾加热开到4档")
conflicting = parse_local_intent("打开副驾加热然后关闭副驾加热")