From 2be599bfe9a947c735b0e36653bd2ef1ba17a17d Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 17 Jul 2026 15:09:06 +0200 Subject: [PATCH] =?UTF-8?q?Pruefstand-Harness:=20Think-Bl=C3=B6cke=20strip?= =?UTF-8?q?pen=20+=20Budgets=20rauf=20(Baseline-Befund=2017.07.)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rohe :8080-Aufrufe an Denk-Modelle (Qwen3.6) liefern -Monologe im content: der Deutsch-Richter benotete Grübel-Text (Note 1-3), das Zitat-Gate suchte darin, und 900 max_tokens gingen komplett fürs Denken drauf (leere Antworten). - inhalt_von() entfernt -Blöcke; abgeschnittenes Denken = ehrlich leer - recherche 1200->2800, deutsch 900->2400 max_tokens (Denkbudget einpreisen) - Fehlschläge speichern jetzt antwort_auszug (Diagnose ohne Nachstellen) - pv-anteil: überstrenges Pflicht-Stichwort 412 entfernt Mock-E2E nach Patch: coding 6/6, recherche 4/4; Think-Strip-Unit-Probe grün. Co-Authored-By: Claude Fable 5 --- deploy/pruefstand/harness.py | 18 ++++++++++++++---- .../recherche/aufgaben/03-pv-anteil.json | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/deploy/pruefstand/harness.py b/deploy/pruefstand/harness.py index 604a826..2f4e9b5 100644 --- a/deploy/pruefstand/harness.py +++ b/deploy/pruefstand/harness.py @@ -62,10 +62,17 @@ def api_chat(endpoint, model, messages, max_tokens=1800, tools=None, timeout=420 def inhalt_von(msg): - """content zuerst, reasoning_content als Notnagel (Reasoning-Modelle).""" + """content zuerst, reasoning_content als Notnagel (Reasoning-Modelle). + -Blöcke werden entfernt: rohe :8080-Aufrufe an Denk-Modelle (Qwen3.6) + liefern den Grübel-Text im content mit — bewertet wird NUR die Antwort + (Baseline-Befund 17.07.: Richter benotete sonst Denk-Monologe).""" if not msg: return "" - return (msg.get("content") or msg.get("reasoning_content") or "").strip() + text = (msg.get("content") or msg.get("reasoning_content") or "") + text = re.sub(r".*?", "", text, flags=re.DOTALL) + # abgeschnittenes Denken ohne Schluss-Tag: ehrlich als leer werten + text = re.sub(r".*$", "", text, flags=re.DOTALL) + return text.strip() def norm(s): @@ -332,7 +339,7 @@ def suite_recherche(cfg, ergebnisse): 'die deine Antwort belegt>"') msg, tim, err = api_chat(cfg.endpoint, cfg.model, [{"role": "user", "content": prompt}], - max_tokens=1200) + max_tokens=2800) eintrag = {"suite": "recherche", "id": task.get("id", tid), "dauer_s": round(time.time() - t0, 1), "tg_tps": tim.get("predicted_per_second"), @@ -358,6 +365,7 @@ def suite_recherche(cfg, ergebnisse): eintrag["pass"] = not fehlschlaege if fehlschlaege: eintrag["grund"] = "; ".join(fehlschlaege)[:400] + eintrag["antwort_auszug"] = antwort[:300] ergebnisse.append(eintrag) @@ -381,7 +389,7 @@ def suite_deutsch(cfg, ergebnisse): t0 = time.time() msg, tim, err = api_chat(cfg.endpoint, cfg.model, [{"role": "user", "content": task["prompt"]}], - max_tokens=900) + max_tokens=2400) eintrag = {"suite": "deutsch", "id": task["id"], "dauer_s": round(time.time() - t0, 1), "tg_tps": tim.get("predicted_per_second"), @@ -406,6 +414,8 @@ def suite_deutsch(cfg, ergebnisse): eintrag["pass"] = (note is not None and note >= 6) if note is None: eintrag["grund"] = f"Richter ohne Note ({jerr or 'Format'})" + if not eintrag["pass"]: + eintrag["antwort_auszug"] = antwort[:300] ergebnisse.append(eintrag) diff --git a/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json b/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json index faf9b5c..6d037a0 100644 --- a/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json +++ b/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json @@ -1,6 +1,6 @@ { "id": "pv-anteil", "frage": "Wie viel Strom lieferte die Photovoltaik-Anlage im zweiten Quartal und welchen Anteil am Verbrauch deckte das?", - "muss_gruppen": [["96"], ["Viertel", "25", "24", "23"], ["412"]], + "muss_gruppen": [["96"], ["Viertel", "25", "24", "23"]], "zitat_pflicht": true }