Pruefstand-Harness: Think-Blöcke strippen + Budgets rauf (Baseline-Befund 17.07.)

Rohe :8080-Aufrufe an Denk-Modelle (Qwen3.6) liefern <think>-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 <think>-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 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-17 15:09:06 +02:00
parent b0dce954e9
commit 2be599bfe9
2 changed files with 15 additions and 5 deletions
+14 -4
View File
@@ -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).
<think>-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"<think>.*?</think>", "", text, flags=re.DOTALL)
# abgeschnittenes Denken ohne Schluss-Tag: ehrlich als leer werten
text = re.sub(r"<think>.*$", "", 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)
@@ -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
}