Commit Graph

29 Commits

Author SHA1 Message Date
marcus 08ec021b5f feat: AP-A Token-Tracking Fundament - Schema, Adapter, Use Cases, GUI (#74)
Erste Stufe der V3.3-Spezifikation: Token- und Kosten-Tracking-Fundament.

Schema und Persistenz:
- Neue Flyway-Migration V2__token_tracking.sql mit sechs Token-/Preis-Snapshot-
  Spalten in processing_attempt, neuer model_price-Tabelle (Composite-Key
  provider+model_name) und Default-Preisen fuer beide Provider-Familien.
- SqliteModelPriceRepositoryAdapter mit UPSERT, transaktionalem Batch und
  invalidUpdatedAt-Mapping.
- Zentrale SqliteConnectionFactory; alle direkten DriverManager.getConnection-
  Stellen in den Repository-Adaptern (Document, Attempt, History, UnitOfWork)
  auf die Factory umgezogen, damit WAL und busy_timeout pro Connection greifen.

Application und Domain:
- Neue DTOs AiUsageMetadata, ModelPriceEntry/View/Key/ChangeSet, CostResult.
- AiInvocationSuccess um usageMetadata erweitert; AiAttemptContext um vier
  nullable Token-Felder.
- ProcessingAttempt um sechs Token-/Preis-Snapshot-Felder erweitert
  (Convenience-Konstruktor und withoutAiFields-Factory unveraendert).
- ModelPriceRepository-Port mit Schreib-/Lese-Trennung.
- DefaultManageModelPricesUseCase mit ChangeSet-Konfliktvalidierung,
  Provider-Whitelist und Clock-Stempel.
- CostCalculator (formatRow + calculateAttempt; formatTotal als Stub fuer AP-B).

KI-Adapter:
- AnthropicClaudeHttpAdapter und OpenAiHttpAdapter extrahieren Token-Daten
  aus den Response-Bodies inklusive Validierung (negativ, > 10 Mio., nicht
  numerisch -> NULL + WARN-Log).

BatchRunProcessingUseCase-Hook:
- DocumentProcessingCoordinator erhaelt optional ModelPriceRepository und ein
  Headless-Flag. Beim Bau eines KI-Versuchs wird der Snapshot-Preis fuer
  (Provider, Modell) geladen und mit den Token-Daten am ProcessingAttempt
  persistiert. Lookup-Fehler verlieren keinen Attempt.

GUI:
- Neuer Tab "Modell-Preise" (TableView mit Editierfeldern, Add-Dialog,
  Loesch-Bestaetigung, Konvertierung Nano-USD <-> $/1M Tokens).
- History-Tab um drei Spalten erweitert: Input-Tokens, Output-Tokens, Kosten.
- Summary-Banner um Token-, Kosten- und Cache-only-Zeile erweitert
  (Default-Werte; AP-B liefert spaeter die echten Aggregate).
- Konfigurations-Tab warnt beim Speichern, wenn das aktive Modell keinen
  Preis-Eintrag hat.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 09:49:50 +02:00
marcus 18f9c33bbb #78: NO_USABLE_TEXT (Foto-PDF) finalisiert sofort zu FAILED_FINAL
Bisher wurde NO_USABLE_TEXT (kein OCR-Text im PDF) wie alle anderen
deterministischen Inhaltsfehler mit der 1-Retry-Regel behandelt und
landete beim ersten Auftreten in FAILED_RETRYABLE. Da ein Bild-Scan ohne
OCR-Text sich zwischen Läufen nicht verändert, ist ein Wiederholversuch
sinnlos – der Status muss sofort FAILED_FINAL sein.

Geändert: ProcessingOutcomeTransition erkennt NO_USABLE_TEXT als
Sonderfall und liefert ohne Retry-Prüfung FAILED_FINAL. PAGE_LIMIT_EXCEEDED
und CONTENT_NOT_EXTRACTABLE behalten die 1-Retry-Regel.

Tests angepasst: Bestehende Tests, die FAILED_RETRYABLE für NO_USABLE_TEXT
erwarteten, wurden auf das korrekte Verhalten umgestellt oder auf
PAGE_LIMIT_EXCEEDED umgeschrieben. Neue Lifecycle-Tests für NO_USABLE_TEXT
(sofort FAILED_FINAL → SKIPPED_FINAL_FAILURE) hinzugefügt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 15:08:01 +02:00
marcus 9fd5bd5a52 V2.8: Selektive Wiederverarbeitung und Statusreset in der GUI
- Mehrfachauswahl mit CheckBox-Spalte und Master-Tri-State-Checkbox
- Gezielter Mini-Lauf über ausgewählte Einträge (unabhängig vom Status)
- Statusreset für ausgewählte Einträge (Stammsatz + Versuchshistorie)
- Fehlende Quelldatei im Mini-Lauf wird als FAILED_PERMANENT synthetisiert
- Identische Zieldatei wird als SUCCESS ohne erneute KI-Verarbeitung erkannt
- Weiche Stop-Semantik erhält zurückgesetzte Einträge unverändert
- Nicht-ausgewählte Einträge bleiben in allen Pfaden unberührt
- Buttons reagieren jetzt korrekt auf Auswahländerungen

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-23 12:04:22 +02:00
marcus 8286d0f0e5 Titellänge nun parametrisierbar 2026-04-22 09:53:03 +02:00
van Elst, Marcus 202088d1d3 Removed unused imports 2026-04-21 10:31:47 +02:00
marcus 03689802dd M8 Abschlussdokumentation und Betriebsdoku final geschärft 2026-04-08 17:09:53 +02:00
marcus e9e9b2d17a Umsetzung von Meilenstein M7 2026-04-07 17:26:02 +02:00
marcus 8bcd80d70a M6 komplett umgesetzt 2026-04-07 13:36:35 +02:00
marcus 506f5ac32e Build-Fehler durch JaCoCo korrigiert und Jenkins-Pipeline gegen
Fehlarchivierung gehärtet
2026-04-07 01:30:39 +02:00
marcus c77a6f06af M5 AP-001 Parsebares KI-Antwortmodell ergänzt und Meilenstein-Bezüge
entfernt
2026-04-06 23:17:16 +02:00
marcus cd2389f3e1 M5 AP-001 Kernobjekte, Statusmodell und KI-Port-Verträge präzisiert 2026-04-06 23:05:12 +02:00
marcus 9ba29aaba5 Nachbearbeitung: Meilensteinbezüge aus Produktiv-JavaDoc und
package-info entfernt
2026-04-04 11:24:06 +02:00
marcus 5441d15b41 M4 AP-001 Kernobjekte, Statusmodell und Port-Verträge präzisieren 2026-04-02 19:24:00 +02:00
marcus 1655ab567e PreCheckFailureReason durch gezielte Tests abgesichert 2026-04-02 18:23:24 +02:00
marcus 7eb8e70f07 RunIdTest 2026-04-02 18:11:54 +02:00
marcus 5995efa3f6 PdfPageCount durch gezielte Tests abgesichert 2026-04-02 18:06:07 +02:00
marcus ceee085055 Package-Dokumentation an aktuellen Stand angepasst 2026-04-02 16:56:17 +02:00
marcus 19c2f42ed7 JavaDoc von PreCheckFailed konsistent bereinigt 2026-04-02 16:18:41 +02:00
marcus 4ab21d14f3 PreCheckFailed: JavaDoc fix 2026-04-02 16:15:30 +02:00
marcus a703eca5a4 PreCheckFailed auf strukturierten Fehlergrund umgestellt 2026-04-02 15:49:42 +02:00
marcus 7d5c21f14c Meilenstein-Präfixe aus Klassennamen entfernt 2026-04-02 09:11:52 +02:00
marcus 4d769643d4 M3-AP-006: Fehlerklassifikation vereinfacht und Logging auf korrekte
Ergebnisfälle ausgerichtet
2026-04-01 21:45:06 +02:00
marcus c482b20df9 M3-AP-004: Vorprüfung auf Unicode-fähigen brauchbaren Text korrigiert 2026-04-01 19:07:03 +02:00
marcus a9407aaba2 M3-APP-03: PDFBox-Extraktion technisch sauber abgegrenzt und
Fehlersemantik korrigiert
2026-04-01 18:54:35 +02:00
marcus 8f138d4cfa M3-Quellordneradapter korrigiert und leere PDF-Kandidaten zugelassen 2026-04-01 18:35:28 +02:00
marcus dd282e8f7b M3-Kernobjekte und Ports für Quellkandidaten und PDF-Auslese eingeführt 2026-04-01 18:11:35 +02:00
marcus c17cb4a70c M2 freigegeben 2026-04-01 08:25:51 +02:00
marcus 9d66a446b3 Implementierung für M2 vorläufig abgeschlossen 2026-03-31 21:52:48 +02:00
marcus ea83f8fa8c M1 Vollständiger Grundstand mit Build, Konfiguration, Tests und Smoke-Tests 2026-03-31 14:04:47 +02:00