This commit is contained in:
orin
2026-07-30 14:09:04 +08:00
parent 25b24ac4cd
commit 49f5c49c53
35 changed files with 4078 additions and 48 deletions
@@ -6,6 +6,7 @@ from pathlib import Path
from unittest.mock import patch
from cognitive_agent.application.domain_runtime import ConfiguredDomainRuntime
from cognitive_agent.application.mode_profile import ModeProfileRegistry
from cognitive_agent.application.seat_service import REPOSITORY_ROOT, SeatDemoService
@@ -219,6 +220,260 @@ class MultiDomainServiceTests(unittest.TestCase):
self.assertEqual(result["domain_state"]["roof"]["transmittance_pct"], 20)
self.assertEqual(result["conversation_turn"], 2)
def test_named_mode_profile_executes_without_model_expansion(self) -> None:
model_output = {
"detected_domains": ["seat"],
"requests": [],
"ambiguities": [],
"decision_summary": ["用户要求调用已有零重力模式。"],
"confidence": 0.94,
}
with patch.object(self.service.openai, "interpret", return_value=model_output):
result = self.service.process(
"副驾驶进入零重力模式",
"openai",
"conv-zero-gravity-mode",
vehicle_id="denza_n7",
)
self.assertEqual(result["status"], "succeeded")
self.assertEqual(result["matched_modes"][0]["id"], "zero_gravity")
operations = result["function_config"]["spec"]["operations"]
by_capability = {item["capability"]: item for item in operations}
self.assertEqual(
by_capability["seat.set_longitudinal_position"]["parameters"],
{"position_pct": 0},
)
self.assertEqual(
by_capability["seat.set_cushion_tilt"]["parameters"],
{"position_pct": 100},
)
self.assertEqual(
by_capability["seat.set_backrest_recline"]["parameters"],
{"position_pct": 81, "angle_deg": 150},
)
self.assertEqual(
by_capability["seat.set_legrest_height"]["parameters"],
{"position_pct": 87, "angle_deg": 163},
)
def test_named_mode_profile_combines_with_temporary_roof_request(self) -> None:
model_output = {
"detected_domains": ["roof"],
"requests": [
{
"domain": "roof",
"capability": "roof.set_transmittance",
"target_scope": "vehicle",
"operation": "set",
"parameters": [{"name": "transmittance_pct", "value": 20}],
"reason": "用户同时要求天幕调暗。",
}
],
"ambiguities": [],
"decision_summary": ["零重力之外还需设置天幕。"],
"confidence": 0.96,
}
with patch.object(self.service.openai, "interpret", return_value=model_output):
result = self.service.process(
"副驾零重力模式,天幕透光率调到20%",
"openai",
"conv-mode-plus-roof",
vehicle_id="denza_n7",
)
self.assertEqual(result["status"], "succeeded")
self.assertEqual(set(result["function_configs"]), {"seat", "roof"})
self.assertEqual(result["scene_config"]["kind"], "SceneConfig")
self.assertEqual(result["domain_state"]["roof"]["transmittance_pct"], 20)
self.assertIn(
"seat.set_backrest_recline",
{
item["capability"]
for item in result["function_configs"]["seat"]["spec"]["operations"]
},
)
def test_reference_mode_library_modes_execute_for_denza(self) -> None:
model_output = {
"detected_domains": ["seat"],
"requests": [],
"ambiguities": [],
"decision_summary": ["用户要求调用已有长期模式。"],
"confidence": 0.95,
}
utterances = [
"副驾驶进入零重力模式",
"副驾驶进入巡航沙发模式",
"副驾驶进入休闲躺椅模式",
"副驾驶进入小憩模式",
"副驾驶进入轻松进出模式",
"副驾驶进入宝宝午睡模式",
"副驾驶进入办公模式",
"副驾驶进入冥想空间模式",
"副驾驶进入电感沙滩椅",
"副驾驶进入女王副驾模式",
"副驾驶进入小腿解压悬浮模式",
]
with patch.object(self.service.openai, "interpret", return_value=model_output):
for index, utterance in enumerate(utterances):
with self.subTest(utterance=utterance):
result = self.service.process(
utterance,
"openai",
f"conv-reference-mode-{index}",
vehicle_id="denza_n7",
)
self.assertEqual(result["status"], "succeeded")
self.assertTrue(result["matched_modes"])
self.assertTrue(
result["function_config"] or result["function_configs"]
)
def test_save_recent_successful_actions_as_long_term_mode_profile(self) -> None:
self.service.mode_profiles = ModeProfileRegistry(
self.service.artifact_root / "modes"
)
model_output = {
"detected_domains": ["roof"],
"requests": [
{
"domain": "roof",
"capability": "roof.set_transmittance",
"target_scope": "vehicle",
"operation": "set",
"parameters": [{"name": "transmittance_pct", "value": 35}],
"reason": "保存前先形成一个可复用动作。",
}
],
"ambiguities": [],
"decision_summary": ["天幕透光率设为35%。"],
"confidence": 0.96,
}
with patch.object(self.service.openai, "interpret", return_value=model_output):
first = self.service.process(
"天幕透光率调到35%",
"openai",
"conv-save-mode-profile",
vehicle_id="denza_n7",
)
saved = self.service.process(
"这个模式不错,固化为露营模式",
"local",
"conv-save-mode-profile",
vehicle_id="denza_n7",
)
self.assertEqual(first["status"], "succeeded")
self.assertEqual(saved["status"], "succeeded")
self.assertIsNone(saved["command_plan"])
self.assertEqual(saved["mode_profile"]["name"], "露营模式")
telemetry = saved["execution_report"]["spec"]["results"][0]["telemetry"]
self.assertEqual(telemetry["operation"], "save_mode_profile")
self.assertFalse(telemetry["can_command_emitted"])
registry = ModeProfileRegistry(self.service.artifact_root / "modes")
matched = registry.match_text("进入露营模式", vehicle_id="denza_n7")
requests = registry.requests_for_profiles(matched)
self.assertEqual(requests[0]["capability"], "roof.set_transmittance")
self.assertEqual(
requests[0]["parameters"],
[{"name": "transmittance_pct", "value": 35}],
)
self.assertEqual(
registry.match_text("进入露营模式", vehicle_id="other_vehicle"),
[],
)
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"
)
profile = self.service.mode_profiles.save_mode(
"露营模式",
[
{
"domain": "roof",
"capability": "roof.set_transmittance",
"target_scope": "vehicle",
"operation": "set",
"parameters": {"transmittance_pct": 20},
"reason": "原始天幕目标。",
}
],
vehicle_id="denza_n7",
)
model_output = {
"detected_domains": ["roof"],
"requests": [
{
"domain": "roof",
"capability": "roof.set_transmittance",
"target_scope": "vehicle",
"operation": "set",
"parameters": [{"name": "transmittance_pct", "value": 50}],
"reason": "用户修改长期模式天幕目标。",
}
],
"ambiguities": [],
"decision_summary": ["修改露营模式天幕目标。"],
"confidence": 0.96,
}
with patch.object(self.service.openai, "interpret", return_value=model_output):
updated = self.service.process(
"修改露营模式,天幕透光率改到50%",
"openai",
"conv-update-mode-profile",
execution_mode="hardware",
vehicle_id="denza_n7",
)
self.assertEqual(updated["status"], "succeeded")
self.assertIsNone(updated["command_plan"])
update_telemetry = updated["execution_report"]["spec"]["results"][0][
"telemetry"
]
self.assertEqual(update_telemetry["operation"], "update_mode_profile")
self.assertFalse(update_telemetry["can_command_emitted"])
self.assertTrue(Path(profile.source).with_suffix(".yaml.initial.bak").is_file())
registry = ModeProfileRegistry(self.service.artifact_root / "modes")
requests = registry.requests_for_profiles(
registry.match_text("进入露营模式", vehicle_id="denza_n7")
)
self.assertEqual(
requests[0]["parameters"],
[{"name": "transmittance_pct", "value": 50}],
)
restored = self.service.process(
"恢复露营模式初始配置",
"local",
"conv-update-mode-profile",
execution_mode="hardware",
vehicle_id="denza_n7",
)
self.assertEqual(restored["status"], "succeeded")
self.assertIsNone(restored["command_plan"])
restore_telemetry = restored["execution_report"]["spec"]["results"][0][
"telemetry"
]
self.assertEqual(restore_telemetry["operation"], "restore_mode_profile")
self.assertFalse(restore_telemetry["can_command_emitted"])
restored_registry = ModeProfileRegistry(self.service.artifact_root / "modes")
restored_requests = restored_registry.requests_for_profiles(
restored_registry.match_text("进入露营模式", vehicle_id="denza_n7")
)
self.assertEqual(
restored_requests[0]["parameters"],
[{"name": "transmittance_pct", "value": 20}],
)
if __name__ == "__main__":
unittest.main()