fix: antwortendes Modell erfassen; 0.040, LaTeX-Dezimalkomma und Teilfragen-Überschriften

- CallRecord.responded_model / LLMUsage.responded_models: tatsächlich antwortendes
  Modell (beim Alias ~deepseek/deepseek-flash-latest) in Log, Report und Benchmark
- normalize_number: führende Null ist nie Tausender (0.040 wurde als 40 gelesen)
- numbers_in: LaTeX-Dezimalkomma 0{,}08 als eine Zahl
- question_ids_in: '### Teil N' als Teilfrage; ausdrückliche Marker haben Vorrang
  vor nummerierten Listen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-09-17 19:30:19 +02:00
commit 8bd3c2e7e1

View file

@ -476,3 +476,22 @@ def test_bold_marker_with_colon_inside_is_recognised():
from checks.model_checks import QUESTION_PATTERN
for zeile in ("**Teil 1:** Daten laden", "* **Question 2:** Solve", "**a)** Graph zeichnen"):
assert QUESTION_PATTERN.search(zeile), zeile
def test_leading_zero_is_never_a_thousands_separator():
from checks.model_checks import normalize_number
assert normalize_number("0.040") == "0.04" # vorher 40 (portfolio_qp)
assert normalize_number("1.234") == "1234" # deutsche Tausender unverändert
def test_latex_decimal_comma_is_one_number():
from checks.model_checks import numbers_in
assert numbers_in(r"\mu_A=0{,}08, \sigma=0{,}040") == {"0.08", "0.04"}
def test_heading_markers_win_over_numbered_lists():
from checks.model_checks import question_ids_in
text = ("## Restriktionen\n\n1. **Kassenbestand** je Periode\n\n2. **Lagerbilanz** je Produkt\n\n"
"### Teil 1: Formulierung\nKlassifizieren Sie das Problem.\n\n### Teil 2: Lösung\nLösen Sie das Modell.")
assert question_ids_in(text) == {"1", "2"}
assert question_ids_in("1. Berechnen Sie x.\n2. Deuten Sie y.\n3. Vergleichen Sie.") == {"1", "2", "3"}