feat(262): NLI-only Modus (EXPO_PUBLIC_NLI_ONLY) für Kalibrierungs-Sessions #263

Merged
admin-mrrm merged 1 commit from feat/262-nli-only-calibration-mode into main 2026-05-14 20:06:33 +02:00
Owner

Closes #262.

Summary

  • Neuer Flag EXPO_PUBLIC_NLI_ONLY=1. Wenn gesetzt, gibt mailModelManager.suggest() bei NLI-Uncertain oder NLI-Fehler [] zurück, statt nach Llama zu greifen.
  • Tracking-Override (#255) und Verb-Heuristik bleiben aktiv.
  • Default-Verhalten unverändert.

Tests (TDD red→green)

  • 5 neue Tests in model-manager.spec.ts:
    • NLI uncertain + Flag → [], kein Llama
    • NLI throws + Flag → [], kein Llama
    • NLI confident + Flag → NLI-Tags wie sonst
    • Flag-Wert "true" wird akzeptiert
    • Flag unset → Fallback wie heute
  • pnpm --filter mobile test 41/41
  • pnpm --filter mobile typecheck

Test plan

  • EXPO_PUBLIC_NLI_ONLY=1 in apps/mobile/.env.local setzen, App neu starten
  • Folder kategorisieren → JSONL füllt sich, keine Llama-Logs
  • Im Logs kein Software caused connection abort / Failed to load model mehr während der Session
Closes #262. ## Summary - Neuer Flag `EXPO_PUBLIC_NLI_ONLY=1`. Wenn gesetzt, gibt `mailModelManager.suggest()` bei NLI-Uncertain oder NLI-Fehler `[]` zurück, statt nach Llama zu greifen. - Tracking-Override (#255) und Verb-Heuristik bleiben aktiv. - Default-Verhalten unverändert. ## Tests (TDD red→green) - 5 neue Tests in `model-manager.spec.ts`: - NLI uncertain + Flag → `[]`, kein Llama - NLI throws + Flag → `[]`, kein Llama - NLI confident + Flag → NLI-Tags wie sonst - Flag-Wert `"true"` wird akzeptiert - Flag unset → Fallback wie heute - `pnpm --filter mobile test` ✅ 41/41 - `pnpm --filter mobile typecheck` ✅ ## Test plan - [ ] `EXPO_PUBLIC_NLI_ONLY=1` in `apps/mobile/.env.local` setzen, App neu starten - [ ] Folder kategorisieren → JSONL füllt sich, keine Llama-Logs - [ ] Im Logs kein `Software caused connection abort` / `Failed to load model` mehr während der Session
feat(262): NLI-only Modus (EXPO_PUBLIC_NLI_ONLY) für Kalibrierungs-Sessions
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
e28aa808d5
Im Kalibrierungs-Lauf killt der Llama-Fallback regelmäßig die ganze
suggest()-Aufruf: jeder NLI-score < 0.30 triggert einen 2GB-Download,
der auf flakigem Mobile-Netz abreißt und in den 90s-Timeout des
mail-batch-categorizer läuft. Die NLI-Scores selbst wurden zwar
geloggt (sendNliDebugLog feuert vor dem Fallback), aber Mails ohne
Tag bleiben im UI als Fehler hängen — kein Progress, irreführend.

Neuer Flag `EXPO_PUBLIC_NLI_ONLY=1` (analog zu EXPO_PUBLIC_NLI_DEBUG_LOG):
suggest() gibt bei NLI-Uncertain oder NLI-Fehler einfach [] zurück, statt
Llama zu rufen. Tracking-Override (#255) und Verb-Heuristik bleiben aktiv.
Default-Verhalten unverändert — Flag muss explizit gesetzt werden.

Effekt für #251-Kalibrierung:
- NLI-Inferenz läuft zuverlässig durch, JSONL füllt sich linear
- Unsichere mails kriegen halt keinen Auto-Tag → manueller Tag, kein
  Schaden für das Calibration-Sample
- Kein 2GB-Download während der Session

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!263
No description provided.