fix: Abbildungs-Gegenprobe ohne kopierbares Beispiel, Kennungen vereinheitlicht

- Prompt-Beispiel '1 → 2: 3' durch Schema 'A → B: Wert' ersetzt: eine Lesung hatte
  nur die Beispielzeile übernommen statt aller fünf Pfeile; alle Datenpunkte verlangt
- canonical_figure_id: '1' und 'Abbildung 1' gelten als dieselbe Abbildung – beim
  Vergleich, in der Pipeline und im Report (Formfehler im zweiten Testlauf)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-09-17 18:09:52 +02:00
commit 89b61d8c62

View file

@ -22,7 +22,7 @@ from modeling.extraction import revise_model, text_to_model
from reporting.report import write_report
from solving.script_export import build_solver_script
from solving.solver_stage import check_feasibility, check_multistart, check_sensitivity, run_solver_code, solve
from understanding.figures import FigureError, split_figures, with_transcriptions
from understanding.figures import FigureError, normalize_figure_ids, split_figures, with_transcriptions
from understanding.understand import read_figures, understand_task
MAX_REVISIONS = int(os.environ.get("MAX_REVISIONS", "2"))
@ -76,7 +76,8 @@ def _checked_figure_readings(session, task: str, figures, first, label: str) ->
und der Befund macht das Ergebnis unzuverlässig – die Daten der Aufgabe stünden auf ungeprüftem Ablesen.
"""
log(f"[{label}] Lese {len(figures)} Abbildung(en) ein zweites Mal (Gegenprobe) ...")
zweite = read_figures(session, task, figures).figures
first = normalize_figure_ids(first)
zweite = normalize_figure_ids(read_figures(session, task, figures).figures)
befunde = check_figure_readings(first, zweite)
if not befunde:
return first, []
@ -84,7 +85,7 @@ def _checked_figure_readings(session, task: str, figures, first, label: str) ->
for nummer, lesung in ((1, first), (2, zweite)):
for f in lesung:
log(f" Lesung {nummer}, {f.id}: " + f.transcription.replace("\n", " | ")[:300])
dritte = read_figures(session, task, figures).figures
dritte = normalize_figure_ids(read_figures(session, task, figures).figures)
if not check_figure_readings(first, dritte):
return first, []
if not check_figure_readings(zweite, dritte):