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:
Dieter Schlüter 2026-09-17 12:54:54 +02:00
commit 8697400dc2

View file

@ -424,9 +424,12 @@ class PipelineResult(BaseModel):
default_factory=list, description="Profile der beigelegten Datendateien (--daten)")
understanding: Optional[TaskUnderstanding] = Field(
default=None, description="Ergebnis der Verstehensstufe (Teilfragen, Fakten); None bei alten Ergebnissen")
specification: OptimizationModelSpecification
review: AssumptionReview
revisions: int = Field(description="Anzahl durchgeführter Korrekturrunden")
rejected: bool = Field(
default=False, description="True, wenn der Text keine Optimierungsaufgabe ist – dann wird nicht modelliert")
specification: Optional[OptimizationModelSpecification] = Field(
default=None, description="Modellspezifikation; None nur bei abgelehnten Aufgaben")
review: Optional[AssumptionReview] = Field(default=None, description="Prüfbericht; None nur bei abgelehnten Aufgaben")
revisions: int = Field(default=0, description="Anzahl durchgeführter Korrekturrunden")
selected_revision: int = Field(default=0, description="Runde, deren Spezifikation verwendet wurde (0 = Erstentwurf)")
restarts: int = Field(default=0, description="Anzahl kompletter Neustarts der Modellierung")
reliable: bool = Field(default=True, description="False, wenn nach allen Runden/Neustarts Zielgröße oder Konsistenz nicht stimmen")