feat: integrate production cockpit AI assistant

This commit is contained in:
vee
2026-09-08 17:46:07 +08:00
parent 5e228e12ae
commit 93103c2579
66 changed files with 11046 additions and 374 deletions
+37 -3
View File
@@ -1680,6 +1680,9 @@ class SeatDemoHandler(BaseHTTPRequestHandler):
)
else None
)
requested_vehicle_id = (
str(payload["vehicle_id"]) if payload.get("vehicle_id") else None
)
common_arguments: dict[str, object] = {
"utterance": message,
# Codex has already converted an implicit request into one explicit
@@ -1689,7 +1692,7 @@ class SeatDemoHandler(BaseHTTPRequestHandler):
"conversation_id": conversation_id,
"execution_mode": str(payload.get("execution_mode") or "dry_run"),
"approval_token": os.getenv("COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN"),
"vehicle_id": str(payload["vehicle_id"]) if payload.get("vehicle_id") else None,
"vehicle_id": requested_vehicle_id,
"simulation_fault": str(payload.get("simulation_fault") or "normal"),
"hardware_client_id": hardware_client_id,
"hardware_access_bypass": self._hardware_access_bypass_allowed(),
@@ -1706,9 +1709,27 @@ class SeatDemoHandler(BaseHTTPRequestHandler):
),
}
capability_catalog = self._assistant_capability_catalog()
capability_snapshot = capability_catalog.snapshot()
try:
capability_snapshot = capability_catalog.snapshot(
vehicle_id=requested_vehicle_id
)
except ValueError as exc:
self._json(
{"error": "invalid_request", "message": str(exc)},
HTTPStatus.BAD_REQUEST,
)
return
capability_context = capability_catalog.compact_context(capability_snapshot)
scene_capability_context = capability_catalog.scene_composition_context(
capability_snapshot
)
fast_answer = capability_catalog.fast_answer(message, capability_snapshot)
quick_control_provider = getattr(capability_catalog, "quick_controls", None)
quick_controls = (
quick_control_provider(capability_snapshot)
if callable(quick_control_provider)
else ()
)
self.send_response(HTTPStatus.OK)
self.send_header("Content-Type", "application/x-ndjson; charset=utf-8")
@@ -1812,9 +1833,22 @@ class SeatDemoHandler(BaseHTTPRequestHandler):
execute_control=execute_control,
capability_snapshot=capability_snapshot,
capability_context=capability_context,
scene_capability_context=scene_capability_context,
control_terms=capability_catalog.control_terms(capability_snapshot),
query_capabilities=capability_catalog.query,
authoritative_answer=fast_answer.answer if fast_answer else None,
authoritative_topic=(
getattr(fast_answer, "topic", None) if fast_answer else None
),
authoritative_suggestions=(
[
item.as_dict()
for item in getattr(fast_answer, "suggestions", ())
]
if fast_answer
else []
),
quick_control_commands=[item.command for item in quick_controls],
mode_profile_draft_context=mode_profile_draft_context,
)
except HardwareAccessRequiredError as exc:
@@ -1875,7 +1909,7 @@ class SeatDemoHandler(BaseHTTPRequestHandler):
{
"type": "error",
"error": "assistant_model_failed",
"message": "Codex AI 助手暂时没有响应,请稍后再试。",
"message": "小迪暂时没有响应,请稍后再试。",
}
)
except (ValueError, json.JSONDecodeError) as exc: