feat: verbleibendes contradicts_task nach Korrektur macht Ergebnis unzuverlässig
_unresolved prüft jetzt auch, ob die LLM-Prüfung nach allen Korrekturrunden noch ein fehlerhaftes Annahmen-Urteil trägt (contradicts_task, stricter_than_task, weaker_than_task). Ist das der Fall, wird das Ergebnis als unzuverlässig markiert und der Solver nicht gestartet (wie bei falscher Zielgröße). Anlass: Portfoliomanagement – Prüfung erkannte x als Stückzahl statt als Betrag (contradicts_task), 2 Korrekturrunden reparierten es nicht, aber der Solver lief als reliable=True. Die Prüfung war wirksam, die Pipeline behandelte den Befund aber nicht als Zuverlässigkeitsproblem. 439 Tests grün.
This commit is contained in:
parent
e7a2b8de81
commit
baba0d857d
2 changed files with 22 additions and 0 deletions
|
|
@ -138,6 +138,15 @@ def _unresolved(attempt: dict) -> List[str]:
|
||||||
if not attempt["review"].objective_check.matches:
|
if not attempt["review"].objective_check.matches:
|
||||||
oc = attempt["review"].objective_check
|
oc = attempt["review"].objective_check
|
||||||
problems.append(f"Zielfunktion passt nicht zur Frage (gefragt: {oc.asked_quantity}; modelliert: {oc.modeled_quantity})")
|
problems.append(f"Zielfunktion passt nicht zur Frage (gefragt: {oc.asked_quantity}; modelliert: {oc.modeled_quantity})")
|
||||||
|
# Eine Annahme, die auch nach allen Korrekturrunden noch dem Text widerspricht (contradicts_task),
|
||||||
|
# die Lösung stärker einschränkt (stricter_than_task) oder mehr zulässt (weaker_than_task), macht
|
||||||
|
# das Ergebnis unzuverlässig – der Solver rechnet ein falsches Modell. Beobachtet am
|
||||||
|
# Portfoliomanagement: Prüfung erkannte x als Stückzahl statt als Betrag (contradicts_task),
|
||||||
|
# aber 2 Korrekturrunden reparierten es nicht, der Solver lief als reliable=True.
|
||||||
|
faulty = {"contradicts_task", "stricter_than_task", "weaker_than_task"}
|
||||||
|
for check in attempt["review"].checks:
|
||||||
|
if check.verdict.value in faulty:
|
||||||
|
problems.append(f"Prüfung: Annahme {check.verdict.value} – {check.unclear_point[:120]}")
|
||||||
problems += [f"[{i.code}] {i.message}" for i in attempt["issues"] if i.severity == CheckSeverity.ERROR]
|
problems += [f"[{i.code}] {i.message}" for i in attempt["issues"] if i.severity == CheckSeverity.ERROR]
|
||||||
return problems
|
return problems
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,19 @@ def test_better_earlier_attempt_wins_over_worse_restart():
|
||||||
assert result.solver_run is not None # Zielgröße passt -> Solver läuft, Ergebnis aber als unzuverlässig markiert
|
assert result.solver_run is not None # Zielgröße passt -> Solver läuft, Ergebnis aber als unzuverlässig markiert
|
||||||
|
|
||||||
|
|
||||||
|
def test_persistent_contradicted_assumption_is_unreliable():
|
||||||
|
# beobachtet am Portfoliomanagement: Prüfung erkannte x als Stückzahl statt als Betrag
|
||||||
|
# (contradicts_task), aber die Korrektur reparierte es nicht. Der Solver lief als reliable=True.
|
||||||
|
# Ein verbleibendes contradicts_task nach allen Runden muss das Ergebnis unzuverlässig machen.
|
||||||
|
from test_review import make_review
|
||||||
|
contradicts = make_review(verdict="contradicts_task")
|
||||||
|
session = FakeSession(specs=[HALLUCINATED] * 3, reviews=[contradicts] * 3,
|
||||||
|
codes=[SolverCode(code=STRUCTURED_CODE)])
|
||||||
|
result = run_pipeline("Aufgabe", session=session, max_revisions=2, max_restarts=0)
|
||||||
|
assert not result.reliable
|
||||||
|
assert any("Prüfung: Annahme contradicts_task" in i for i in result.reliability_issues)
|
||||||
|
|
||||||
|
|
||||||
def test_no_restart_when_disabled():
|
def test_no_restart_when_disabled():
|
||||||
session = FakeSession(specs=[HALLUCINATED] * 3, reviews=[MISMATCH] * 3)
|
session = FakeSession(specs=[HALLUCINATED] * 3, reviews=[MISMATCH] * 3)
|
||||||
result = run_pipeline("Aufgabe", session=session, max_revisions=2, max_restarts=0)
|
result = run_pipeline("Aufgabe", session=session, max_revisions=2, max_restarts=0)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue