feat: complete dual-seat whole-vehicle orchestration
This commit is contained in:
@@ -510,6 +510,113 @@ class MultiDomainServiceTests(unittest.TestCase):
|
||||
[],
|
||||
)
|
||||
|
||||
def test_build_named_mode_executes_and_persists_in_one_turn(self) -> None:
|
||||
mode_root = Path(self.temporary_directory.name) / "modes"
|
||||
self.service.mode_profiles = ModeProfileRegistry(mode_root)
|
||||
model_output = {
|
||||
"detected_domains": ["ambient_light", "climate"],
|
||||
"requests": [
|
||||
{
|
||||
"domain": "ambient_light",
|
||||
"capability": "ambient_light.set_illumination",
|
||||
"target_scope": "vehicle",
|
||||
"operation": "set",
|
||||
"parameters": [
|
||||
{"name": "color_hex", "value": "#B040FF"},
|
||||
{"name": "brightness_pct", "value": 60},
|
||||
],
|
||||
"reason": "营造K歌氛围。",
|
||||
},
|
||||
{
|
||||
"domain": "climate",
|
||||
"capability": "climate.set_temperature",
|
||||
"target_scope": "vehicle",
|
||||
"operation": "set",
|
||||
"parameters": [{"name": "temperature_c", "value": 24}],
|
||||
"reason": "保持K歌时的座舱舒适度。",
|
||||
},
|
||||
],
|
||||
"ambiguities": [],
|
||||
"decision_summary": ["已构建K歌场景。"],
|
||||
"confidence": 0.94,
|
||||
}
|
||||
|
||||
with patch.object(self.service.openai, "interpret", return_value=model_output):
|
||||
built = self.service.process(
|
||||
"构建一个K歌模式",
|
||||
"openai",
|
||||
"conv-build-karaoke-mode",
|
||||
vehicle_id="denza_n7",
|
||||
)
|
||||
|
||||
self.assertEqual(built["status"], "succeeded")
|
||||
self.assertEqual(built["mode_profile"]["name"], "K歌模式")
|
||||
self.assertEqual(built["mode_creation"]["source_status"], "succeeded")
|
||||
self.assertEqual(built["mode_creation"]["operation_count"], 2)
|
||||
self.assertIn(
|
||||
"K歌模式",
|
||||
{
|
||||
mode["name"]
|
||||
for mode in self.service.runtime_info()["modes"]
|
||||
},
|
||||
)
|
||||
matched = self.service.mode_profiles.match_text(
|
||||
"进入K歌模式", vehicle_id="denza_n7"
|
||||
)
|
||||
self.assertEqual([profile.name for profile in matched], ["K歌模式"])
|
||||
self.assertTrue(Path(built["mode_profile"]["source"]).is_file())
|
||||
|
||||
def test_build_named_mode_is_always_a_dry_run_configuration_workflow(self) -> None:
|
||||
mode_root = Path(self.temporary_directory.name) / "hardware-modes"
|
||||
self.service.mode_profiles = ModeProfileRegistry(mode_root)
|
||||
model_output = {
|
||||
"detected_domains": ["ambient_light"],
|
||||
"requests": [
|
||||
{
|
||||
"domain": "ambient_light",
|
||||
"capability": "ambient_light.set_illumination",
|
||||
"target_scope": "vehicle",
|
||||
"operation": "set",
|
||||
"parameters": [
|
||||
{"name": "color_hex", "value": "#B040FF"},
|
||||
{"name": "brightness_pct", "value": 60},
|
||||
],
|
||||
"reason": "构建K歌氛围。",
|
||||
}
|
||||
],
|
||||
"ambiguities": [],
|
||||
"decision_summary": ["构建K歌灯光。"],
|
||||
"confidence": 0.95,
|
||||
}
|
||||
|
||||
with patch.object(self.service.openai, "interpret", return_value=model_output):
|
||||
built = self.service.process(
|
||||
"构建一个K歌模式",
|
||||
"openai",
|
||||
"conv-build-karaoke-hardware-mode",
|
||||
execution_mode="hardware",
|
||||
vehicle_id="denza_n7",
|
||||
hardware_access_bypass=False,
|
||||
)
|
||||
|
||||
self.assertEqual(built["status"], "succeeded")
|
||||
self.assertEqual(built["execution_mode"], "dry_run")
|
||||
self.assertFalse(built["hardware_execution_allowed"])
|
||||
self.assertEqual(built["mode_profile"]["name"], "K歌模式")
|
||||
|
||||
def test_create_mode_language_does_not_match_ordinary_mode_execution(self) -> None:
|
||||
self.assertEqual(
|
||||
self.service._parse_mode_profile_create_name("创建一个K歌模式"),
|
||||
"K歌模式",
|
||||
)
|
||||
self.assertEqual(
|
||||
self.service._parse_mode_profile_create_name("新增冥想空间模式"),
|
||||
"冥想空间模式",
|
||||
)
|
||||
self.assertIsNone(
|
||||
self.service._parse_mode_profile_create_name("进入K歌模式")
|
||||
)
|
||||
|
||||
def test_update_and_restore_long_term_mode_profile_are_control_plane_only(self) -> None:
|
||||
self.service.mode_profiles = ModeProfileRegistry(
|
||||
self.service.artifact_root / "modes"
|
||||
|
||||
Reference in New Issue
Block a user