fix: Gegenprobe der Abbildungen je Datenzeile; Standardmodell ~deepseek/deepseek-flash-latest

- check_figure_readings vergleicht Zahlentupel je Datenzeile statt aller Zahlen des
  Freitexts (Fehlalarm im ersten echten Lauf: zusätzliche Knotenaufzählung); fängt
  falsch zugeordnete Bewertungen und vertauschte Pfeilrichtungen
- feste Form 'Start → Ziel: Bewertung' in Verstehen- und Abbildungs-Prompt;
  abweichende Lesungen stehen im Log
- Standardmodell ist der Alias ~deepseek/deepseek-flash-latest (derzeit V4.1 Flash);
  Benchmarks weiter mit festen IDs

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

View file

@ -88,7 +88,7 @@ def test_identical_readings_have_no_finding():
def test_misread_value_is_found_with_both_numbers():
befunde = check_figure_readings([GRAPH], [VERLESEN])
assert len(befunde) == 1 and befunde[0].code == "FIGURE_READINGS_DIFFER"
assert "nur in Lesung 1: 3" in befunde[0].message and "nur in Lesung 2: 5" in befunde[0].message
assert "nur in Lesung 1: (2 4 3)" in befunde[0].message and "nur in Lesung 2: (2 4 5)" in befunde[0].message
def test_figure_missing_in_one_reading_is_found():
@ -139,3 +139,14 @@ def test_report_shows_original_and_transcription():
assert f'<img src="data:image/png;base64,{PNG}"' in html
assert "Pfeil 1 → 3: 1" in html and "unsicher gelesen" in html
assert f"![Abbildung 1](data:image/png;base64,{PNG})" in to_markdown(build_document(result))
def test_reading_comparison_ignores_wording_but_not_assignment():
# erster echter Lauf: Knotenaufzählung und doppelte Pfeilbeschreibung lösten einen Fehlalarm aus
anders_formuliert = GRAPH.model_copy(update={"transcription": "(1,2): 3; (1,3): 1; (3,2): 1; (2,4): 3; (3,4): 5"})
assert check_figure_readings([GRAPH], [anders_formuliert]) == []
vertauscht = GRAPH.model_copy(update={"transcription": GRAPH.transcription.replace("1 → 2: 3", "1 → 2: 1")
.replace("1 → 3: 1", "1 → 3: 3")}) # gleiche Zahlen, falsche Pfeile
assert check_figure_readings([GRAPH], [vertauscht])
richtung = GRAPH.model_copy(update={"transcription": GRAPH.transcription.replace("3 → 2: 1", "2 → 3: 1")})
assert check_figure_readings([GRAPH], [richtung])