fix(dashboard): Overlap-Guard auf Routing-Corpus mit n_total-Gewichtung (#314) - #336
Merged
Merged
Conversation
…ng (#314) Der Corpus-Overlap-Guard in version_delta() bezog pdf_notes bislang aus den EVALUIERTEN Zeilen (quality_by_version[v]["pdf_notes"]), nicht aus dem vollen Routing-Corpus. Eine Version mit ausgetauschtem Routing-Corpus, deren wenige Eval-Notes zufaellig eine gemeinsame PDF-Quelle treffen, konnte so faelschlich als "reliable" ausgewiesen werden. Fix: runs_by_version erhaelt beim Befuellen ein neues pdf_n_total-Dict ({pdf_group_key: Summe n_total}); kpi_trend["pdf_notes"] wird jetzt daraus gespeist statt aus den Eval-Zeilen. version_delta()-Semantik (Schwellwerte, reliable/reason) bleibt unveraendert -- nur die Grundgesamtheit der Overlap-Berechnung wechselt. quality_by_version[v]["pdf_notes"] (Eval-Notes je PDF) bleibt als eigenstaendige, weiterhin korrekte Diagnose unangetastet bestehen. Fehlen fuer eine Version komplett die Routing-Logs, faellt der Guard mangels Daten auf reines n>=20-Verhalten zurueck (Rueckwaertskompat.). Tests: bestehenden Overlap-Integrationstest um passende Routing-Log-Runs ergaenzt (gleiche Zahlen, jetzt ueber den korrekten Pfad), zwei neue Tests (disjunkter Routing-Corpus trotz ueberlappender Eval-Stichprobe -> pdf_mix; fehlende Routing-Logs -> Fail-open).
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.
Closes #314.
Problem
Der n≥20-Guard für den accept-Delta nutzt seit #312
accept_n(geroutete Notes) als Nenner. Der zweite Reliability-Baustein — der PDF-Overlap-Guard inversion_delta()— bezogpdf_notesaber weiterhin aus den EVALUIERTEN Zeilen (quality_by_version[v]["pdf_notes"]), nicht aus dem vollen Routing-Corpus (runs_by_version[ver]["pdfs"]).Konstruierbare Irreführung: Eine Version mit
accept_n>=20aus disjunkten Routing-PDFs, deren wenige Eval-Notes zufällig geteilte PDFs treffen, wurdepdf_overlaphoch und das Delta „reliable" ausgewiesen — obwohl der Routing-Corpus tatsächlich ausgetauscht war.Neue Berechnungsgrundlage
runs_by_versionerhält beim Befüllen (Log-Run-Schleife) ein neues Feldpdf_n_total:{pdf_group_key: Summe n_total}je Version, mit dem kanonischenD._pdf_group_key-Schlüssel (SSoT mit dem PDF-Filter).kpi_trend["pdf_notes"]wird jetzt ausruns_by_version[v]["pdf_n_total"]gespeist statt ausquality_by_version[v]["pdf_notes"].Gewichtungsformel: Der Overlap-Anteil einer Version ist die Summe der
n_total(geroutete Notes) aller PDFs, die auch in der Vergleichsversion vorkommen, geteilt durch die Gesamtsummen_totalder neuesten Version — also notengewichteter Anteil des gerouteten Corpus auf gemeinsamen Quellen, nicht bloße Mengen-Schnittmenge der PDF-Keys.version_delta()selbst (Schwellwerte,reliable/reason-Anzeige) bleibt unverändert — nur die Grundgesamtheit der Overlap-Berechnung wechselt.quality_by_version[v]["pdf_notes"](Eval-Notes je PDF) bleibt als eigenständige, weiterhin korrekte Diagnose im Export bestehen. Fehlen für eine Version komplett die Routing-Logs, fällt der Guard mangels Daten auf reines n≥20-Verhalten zurück (pdf_overlap=None, dasselbe Fail-open-Verhalten wie beim fehlendenpdf_notes-Key).RED-Nachweis (TDD)
Neuer Test
test_build_data_uses_routing_corpus_not_eval_sample_for_overlapkonstruiert genau das Issue-Szenario: Routing-Corpus zwischen v1/v2 komplett disjunkt (je 25 geroutete Notes auf unterschiedlichen PDFs,accept_n>=20in beiden), Eval-Stichprobe (10 Notes je Version) trifft zufällig dieselbe PDF-Quelle.pdf_overlap == 1.0(eval-basiert, 100% "Überlappung") → RED, Assertion== 0.0schlug fehl.pdf_overlap == 0.0(routing-basiert, disjunkter Corpus) →reliable=False,reason="pdf_mix".Zweiter neuer Test
test_build_data_no_routing_logs_falls_back_to_n_guard_onlydokumentiert das Fail-open-Verhalten, wenn für eine Version gar keine Routing-Logs vorliegen. Bestehender Integrationstesttest_build_data_flags_pdf_mix_delta_via_kpi_trendum passende Routing-Log-Runs ergänzt (gleiche Zahlen wie vorher, jetzt über den korrekten Pfad verifiziert statt zufällig über die Eval-Zeilen).Suite-Zahlen
uv run pytest generative/tests/test_dashboard_delta_pdf_overlap.py -q→ 10 passeduv run pytest generative/tests/ -k dashboard -q→ 393 passed, 1337 deselecteduv run pytest generative lib/decision_engine/tests shared/tests -q→ 6183 passed, 3 skipped, 8 deselecteduv run ruff check .→ All checks passeduv run ruff format --check .→ 301 files already formattedGeänderte Dateien
generative/eval_dashboard_server.pygenerative/tests/test_dashboard_delta_pdf_overlap.pySperrzonen
orchestrator.py,agents/extractor.py,eval_quality_v4.py,tools/pdf_enrich.py,config.pynicht angefasst.