fix: parser — CAN multi-frame, ISO-TP, пустой {} в промпт, 91 тест
This commit is contained in:
+6
-2
@@ -52,9 +52,13 @@ def _parse_vin(result: dict, raw: str, decoded: str):
|
||||
|
||||
# Fallback: парсим VIN из raw HEX
|
||||
if "49" in raw and ("02" in raw or "4902" in raw.replace(" ", "")):
|
||||
clean = raw.replace(":", "").replace(" ", "").upper()
|
||||
# Чистим: убираем CAN адресацию (N:), ISO-TP (10..), двоеточия
|
||||
import re
|
||||
clean = re.sub(r'^\d\s*:\s*', '', raw, flags=re.MULTILINE) # "0:" "1:"
|
||||
clean = re.sub(r'\b(?:10|14|21|22)\s+', '', clean) # ISO-TP PCI
|
||||
clean = clean.replace(":", "").replace(" ", "").upper()
|
||||
if "490201" in clean:
|
||||
hex_str = clean.split("490201")[-1][:34]
|
||||
hex_str = clean.split("490201")[-1].replace("\n", "").replace("\r", "")[:34]
|
||||
vin = ""
|
||||
for i in range(0, len(hex_str) - 1, 2):
|
||||
try:
|
||||
|
||||
+9
-6
@@ -30,24 +30,27 @@ def _build_diagnosis_prompt(data: dict, car_info: str = "") -> str:
|
||||
if car_info:
|
||||
parts.append(f"**Водитель сообщил:** {car_info}")
|
||||
|
||||
if data["vin"]:
|
||||
if data.get("vin"):
|
||||
parts.append(f"**VIN:** {data['vin']}")
|
||||
|
||||
if data["dtc_stored"]:
|
||||
if data.get("dtc_stored"):
|
||||
parts.append(f"\n**Сохранённые ошибки (mode 03):** {', '.join(data['dtc_stored'])}")
|
||||
if data["dtc_pending"]:
|
||||
if data.get("dtc_pending"):
|
||||
parts.append(f"**Ожидающие ошибки (mode 07):** {', '.join(data['dtc_pending'])}")
|
||||
|
||||
if data["parameters"]:
|
||||
if data.get("parameters"):
|
||||
parts.append("\n**Параметры в реальном времени:**")
|
||||
for p in data["parameters"]:
|
||||
parts.append(f"- {p['name']}: {p['value']}")
|
||||
|
||||
if not data["vin"] and not data["dtc_stored"] and not data["parameters"]:
|
||||
if not data.get("vin") and not data.get("dtc_stored") and not data.get("parameters"):
|
||||
parts.append("\n(данные не распознаны)")
|
||||
|
||||
raw_log = data.get("raw_log") or []
|
||||
parts.append("\n**Сырые ответы ЭБУ:**")
|
||||
parts.extend(data["raw_log"])
|
||||
parts.extend(raw_log)
|
||||
|
||||
parts.append("\n---")
|
||||
|
||||
parts.append("\n---")
|
||||
parts.append("## Запрос на анализ")
|
||||
|
||||
Reference in New Issue
Block a user