fix(ai-service): confirm units quoted across a table cell border (#50) - #55
Merged
Merged
Conversation
The unit check accepted a known unit only directly after a number or as the whole quote, so a quote spanning a pipe-table cell border such as "60 | Stk." (eval t03) left a correct unit unverified. A known unit now also counts when one cell of the quote (split on "|" and tabs) is exactly the unit. The quote-in-segment check is unchanged, so quotes that differ from the segment in real characters are still rejected. Eval replay: line_items.unit found_accuracy 86.21 -> 96.55, grounding 89.29 -> 100; no other metric moved. Baseline updated via --update-baseline. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJ5vaKvTYiMvdngT4d3xo1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJ5vaKvTYiMvdngT4d3xo1
6 of 15 tasks
…nit (#50 review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJ5vaKvTYiMvdngT4d3xo1
Owner
Author
Frischer Review (read-only Subagent) – Ergebnis und UmgangNichts blockierend. Belegt: die neuen Tests scheitern mit
Nach der Änderung: ruff/format/pyright sauber, pytest 435 passed / 2 skipped, Eval-Replay grün (unverändert gegenüber der Baseline dieses PRs). Generated by Claude Code |
Fluory
marked this pull request as ready for review
September 24, 2026 11:19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Warum
Fixes #50 · Eval-Fall t03: Eine Einheit, deren Zitat über eine Tabellen-Zellgrenze geht (
60 | Stk.), blieb „unsicher“, obwohl das Zitat wörtlich im Segment steht.Arbeitsstand
Werkstoff St 52als Einheit werten – ADR-0001 D8); Spaltenwissen im Verifier.values.py, Regressions- und Negativtests, Eval-Replay, Baseline über--update-baseline, README, CHANGELOG, frischer Review eingearbeitet (mehrdeutige Zeilen-Zitate zählen nicht), CI grün.|und Tab.Was ist passiert (Klartext)
Die KI zitiert bei Tabellen manchmal über eine Spaltengrenze hinweg, etwa „60 | Stk.“. Das Zitat stand korrekt im Dokument, aber die Einheitenprüfung erwartete die Einheit direkt hinter einer Zahl – der Strich dazwischen hat sie gestört. Jetzt zählt auch eine Tabellenzelle, die genau eine bekannte Einheit enthält – aber nur, wenn das Zitat nicht gleichzeitig eine andere Einheit nennt (eine ganze Zeile mit „Stk.“ und „kg“ beweist keins von beiden). Die strenge Regel „gefunden nur mit wörtlich bestätigtem Zitat“ bleibt unverändert; Negativtests belegen, dass nichts gelockert wurde. Ergebnis im Eval: Einheiten der Positionen 86 % → 97 % richtig, Belegquote 89 % → 100 %, alle anderen Werte gleich.
Plan-Pflicht (SYSTEM.md §4)
Geändert
services/ai/src/requestflow_ai/grounding/values.py: Einheit auch als exakte Zelle (|, Tab) des Zitats, wenn keine Zelle eine andere Einheit nenntservices/ai/tests/test_grounding_verifier.py,test_grounding_values.py: Regression t03 + Negativfälle (u. a. ganze Zeile| 60 | Stk. | 12 | kg |)services/ai/evals/baseline.json:line_items.unit(nur verbessert)services/ai/README.md(inkl. bekannter Grenze),CHANGELOG.mdNachweis (SYSTEM.md §11)
verify:changed: grün – ruff, ruff format, pyright 0 Fehler, pytest 435 passed / 2 skipped (docling-Modelle fehlen lokal)verify: grün (CIcheckauf 3fca181, inkl. AI-Service-Verify und Eval-Gate); TS unberührtverify:full/ E2E-Spec: Eval-Gate im Replay grün (15 Fälle, kein Schlüsselfeld schlechter)Doku-Entscheidung (genau eine)
services/ai/README.md[Unreleased](sichtbares Feature oder Verhalten – im selben PR, nie „später")Entferntes oder Umbenanntes:
docs/+ README gegrept, Treffer bereinigt: nichts entferntDateigrößen und neue Bausteine (SYSTEM.md §7)
Dateien über 500 Zeilen im Diff (Ausnahmen: generierter Code, Lockfiles, Fixtures, Migrationen, Schemas, Ressourcen, Doku, Konfiguration):
Über 800 Zeilen mit neuer Fachlogik oder über 1000 Zeilen (P1/P2): nicht betroffen
Neue Shared-Komponente, Utility-Datei, Adapter oder fachlicher Service:
Subagent-Einsätze
Risiken / offene Punkte
12 | kg) besteht weiterhin – wie ein nackteskgschon vorher.🤖 Generated with Claude Code
https://claude.ai/code/session_01DJ5vaKvTYiMvdngT4d3xo1