feat: идемпотентность DTC + prompt учитывает неточности данных

This commit is contained in:
Repinoid
2026-06-06 07:02:56 +04:00
parent 1e8fd62039
commit 4c71d7a4c9
3 changed files with 73 additions and 1 deletions
+24 -1
View File
@@ -274,6 +274,14 @@ def register(app):
client_info = data.get("client_info", {})
client_info["client_ip"] = request.remote_addr
# Идемпотентность
request_id = (data.get("request_id") or "").strip()
if request_id:
with Database() as db:
cached = db.get_cached_response(request_id)
if cached is not None:
return jsonify(cached), 200
try:
with Database() as db:
db.save_dtc_scan(client_info, codes)
@@ -282,7 +290,22 @@ def register(app):
dtc = _load_dtc_dict()
decoded = [{"code": c, "desc": dtc.get(c.strip().upper(), c)} for c in codes]
return jsonify({"codes": decoded, "count": len(decoded)})
response = {"codes": decoded, "count": len(decoded)}
# Сохраняем кэш для идемпотентности
if request_id:
try:
with Database() as db:
db.save_session(
client_info=client_info,
responses=[{"decoded": f"DTC stored: {c}"} for c in codes],
request_id=request_id,
response_json=response,
)
except Exception as e:
logger.error(f"DTC idempotency cache failed: {e}")
return jsonify(response)
def _summary(p: dict) -> dict: