[verified] dedupe auto-map AI row ids
This commit is contained in:
@@ -543,12 +543,27 @@ def _map_first_pass_to_rows(template_id: str, first_pass: Dict[str, Any], pdf_by
|
||||
return {"questions": questions, "response_areas": response_areas, "boundaries": boundaries, "layout": layout}
|
||||
|
||||
|
||||
def _dedupe_rows_by_id(rows: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
||||
"""Preserve first occurrence of stable AI row ids emitted by noisy OCR detectors."""
|
||||
out: List[Dict[str, Any]] = []
|
||||
seen: set[str] = set()
|
||||
for row in rows:
|
||||
row_id = row.get("id")
|
||||
if row_id:
|
||||
key = str(row_id)
|
||||
if key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
out.append(row)
|
||||
return out
|
||||
|
||||
|
||||
def _refresh_ai_rows(ctx: ExamContext, template_id: str, rows: Dict[str, List[Dict[str, Any]]]) -> None:
|
||||
sb = ctx.supabase
|
||||
for table in ("exam_response_areas", "exam_boundaries", "exam_template_layout", "exam_questions"):
|
||||
sb.table(table).delete().eq("template_id", template_id).eq("source", "ai").eq("confirmed", False).execute()
|
||||
for table, key in (("exam_questions", "questions"), ("exam_response_areas", "response_areas"), ("exam_boundaries", "boundaries"), ("exam_template_layout", "layout")):
|
||||
payload = rows.get(key) or []
|
||||
payload = _dedupe_rows_by_id(rows.get(key) or [])
|
||||
if payload:
|
||||
sb.table(table).insert(payload).execute()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user