feat: Nicht-Optimierungsaufgaben ablehnen statt modellieren
Bisher erzeugte is_optimization_task=False nur eine Log-Warnung; eine reine Gleichung wurde trotzdem in ein Optimierungsmodell gepresst. Jetzt bricht run_pipeline direkt nach dem Verstehen ab: kein Nachfassen, keine Extraktion, kein Solver. PipelineResult.rejected, reliable=False, specification/review optional; Report "Aufgabe abgelehnt", CLI-Exit-Code 3, Benchmark-Status "abgelehnt" (auch die Ergebnistabelle verkraftet die Zeile), --von verweigert. Der Verstehens-Prompt nennt reine Gleichungen/Rechenaufgaben als Nicht-Aufgaben und Zulaessigkeitsfragen sowie moeglicherweise unloesbare Planungen ausdruecklich als Aufgaben. Unvermessen; Prompt-Kennung jetzt 0333bfd5f9fe. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
cb402996ad
commit
8697400dc2
1 changed files with 93 additions and 11 deletions
|
|
@ -55,8 +55,8 @@ def _understand(session, task: str, label: str, data_prompt: str = "") -> tuple:
|
|||
understanding = understand_task(session, task, data_prompt=data_prompt)
|
||||
issues = check_understanding(understanding, task)
|
||||
for versuch in range(UNDERSTAND_RETRIES):
|
||||
if not issues:
|
||||
break
|
||||
if not issues or not understanding.is_optimization_task:
|
||||
break # eine Nicht-Aufgabe wird abgelehnt, nicht vervollständigt
|
||||
log(f"[{label}] Verständnis unvollständig – fasse nach ({versuch + 1}/{UNDERSTAND_RETRIES}): "
|
||||
+ "; ".join(i.code for i in issues))
|
||||
understanding = understand_task(session, task, issues, data_prompt)
|
||||
|
|
@ -65,8 +65,6 @@ def _understand(session, task: str, label: str, data_prompt: str = "") -> tuple:
|
|||
log(f" {len(understanding.sub_questions)} Teilfrage(n): "
|
||||
+ ", ".join(q.id for q in understanding.sub_questions)
|
||||
+ f"; {len(understanding.facts)} Zahlenwerte erfasst")
|
||||
if not understanding.is_optimization_task:
|
||||
log(f" WARNUNG: Das ist laut Verständnis keine Optimierungsaufgabe – {understanding.reason}")
|
||||
return understanding, issues
|
||||
|
||||
|
||||
|
|
@ -221,6 +219,14 @@ def run_pipeline(
|
|||
log(f"[{model}] Stufe '{step}' läuft mit abweichendem Modell: {step_model}")
|
||||
|
||||
understanding, verstehen_issues = _understand(session, task, model, data_prompt)
|
||||
if not understanding.is_optimization_task:
|
||||
# Keine Entscheidung verlangt: jedes Modell wäre erfunden, jede Zahl ohne Frage dahinter
|
||||
grund = f"Keine Optimierungsaufgabe: {understanding.reason}"
|
||||
log(f"ABGELEHNT – {grund} Es wird weder modelliert noch gerechnet.")
|
||||
result = PipelineResult(task=task, understanding=understanding, data_files=profile, rejected=True,
|
||||
reliable=False, reliability_issues=[grund], checks=verstehen_issues)
|
||||
_log_usage(session, result)
|
||||
return result
|
||||
|
||||
attempts = [_model_attempt(session, task, max_revisions, model, understanding=understanding,
|
||||
data_prompt=data_prompt)]
|
||||
|
|
@ -273,6 +279,8 @@ def continue_pipeline(
|
|||
if stage not in STAGES:
|
||||
raise ValueError(f"Unbekannte Stufe '{stage}' (erlaubt: {', '.join(STAGES)})")
|
||||
stored = PipelineResult.model_validate_json(Path(result_json).read_text(encoding="utf-8"))
|
||||
if stored.rejected or stored.specification is None:
|
||||
raise ValueError(f"{result_json} ist eine abgelehnte Aufgabe (keine Optimierungsaufgabe) – nichts fortzusetzen")
|
||||
session = session or LLMSession(model)
|
||||
task = stored.task
|
||||
|
||||
|
|
@ -400,6 +408,8 @@ if __name__ == "__main__":
|
|||
log(f"Solver-Code geschrieben: {args.code} (ausführen: .venv/bin/python {args.code})")
|
||||
elif args.code:
|
||||
log(f"Kein Solver-Code geschrieben ({args.code}): Solver wurde nicht gestartet.")
|
||||
if result.rejected:
|
||||
sys.exit(3) # für Skripte: keine Optimierungsaufgabe, nichts gerechnet
|
||||
if not result.reliable:
|
||||
sys.exit(2) # für Skripte: Ergebnis vorhanden, aber unzuverlässig
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue