feat: integrate production cockpit AI assistant
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user