KI-Backend: deutsches Datumsformat fixen, Fortschrittsanzeige + Nachfassen im Dialog
Live-Test lieferte JsonException: DateOnly/TimeOnly hatten keinen Converter fürs im Systemprompt dokumentierte deutsche Format (TT.MM.JJJJ/HH:mm), .NET nutzte stattdessen ISO 8601 in beide Richtungen. Neue Converter mit Fallback aufs allgemeine Parsen. AiAssistDialog: indeterminierter ProgressBar statt nur Text während der Anfrage. Neuer Button "Erneut anfragen" erlaubt Nachfassen mit geänderter Anweisung, ohne den Dialog neu zu starten — schickt die aktuell angehakten Vorschläge als Entwurfskontext mit (AiPlanningService.MergeDraft), damit die KI auf dem noch ungespeicherten Stand aufbaut. Side-by-side-Vergleich beider Entwürfe als 4.5.18 zurückgestellt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -690,6 +690,20 @@ folgenden Punkte gehören direkt in `LehrerApp.Desktop`:
|
||||
ob Anthropic zuverlässig valides JSON im erwarteten Schema liefert, ob die berechneten
|
||||
Kosten exakt mit der echten Abrechnung übereinstimmen, sowie die komplette Kette
|
||||
Desktop → Backend → Anthropic unter echten Netzwerkbedingungen.
|
||||
|
||||
**Nachtrag (Bugfix, aus echtem Live-Test):** Erste echte Planungsanfrage lieferte beim
|
||||
Verarbeiten der Antwort eine `JsonException`. Ursache: `AiPlanningService.JsonOptions` hatte
|
||||
keinen Converter für `DateOnly`/`TimeOnly` registriert, sodass .NETs Standardformat (ISO 8601,
|
||||
z.B. "2026-12-24") verwendet wurde — der Systemprompt in `plan.php` dokumentiert aber
|
||||
durchgängig deutsches Format ("TT.MM.JJJJ"/"HH:mm"). Das betraf beide Richtungen: die
|
||||
ausgehende Anfrage wurde entgegen der Prompt-Dokumentation im ISO-Format gesendet, und eine
|
||||
dem Prompt folgende KI-Antwort im deutschen Format scheiterte beim Deserialisieren. Behoben
|
||||
durch `GermanDateOnlyJsonConverter`/`GermanTimeOnlyJsonConverter` (in `AiPlanningService.cs`),
|
||||
die deutsches Format schreiben und beim Lesen zuerst deutsches Format, dann defensiv
|
||||
allgemeines Parsen (u.a. ISO) versuchen — LLMs weichen erfahrungsgemäß gelegentlich vom
|
||||
dokumentierten Format ab, ein harter Fehlschlag bei kleinen Abweichungen wäre unnötig
|
||||
fragil. Abgesichert durch `GermanDateTimeJsonConverterTests.cs`, u.a. mit dem konkreten
|
||||
nullable-Feld-Fall (`AiLesson.Date`/`StartTime`), der den ursprünglichen Bug ausgelöst hat.
|
||||
- [ ] **4.5.10** Falls doch ein schlanker Companion-/WebApp-Client entstehen soll: bewusst
|
||||
**minimaler** Funktionsumfang — nur Wochenraster ansehen, eine Stunde verschieben, oder eine
|
||||
Stunde als "Umplanung nötig" flaggen. Kein Editor für Einheiten/Kompetenzen/KI-Planung dort.
|
||||
@@ -762,6 +776,24 @@ folgenden Punkte gehören direkt in `LehrerApp.Desktop`:
|
||||
**Nicht ohne echten API-Key verifizierbar**, ob Caching tatsächlich greift — nur an
|
||||
`cache_read_input_tokens > 0` in `transactions` bei einer zweiten Anfrage innerhalb der
|
||||
TTL beobachtbar (siehe `ai-backend/README.md`).
|
||||
- [x] **4.5.17** Fortschrittsanzeige + einfaches Nachfassen im `AiAssistDialog` (Nutzer-Feedback
|
||||
nach erstem echten Live-Test: Dialog wirkte während der Anfrage "aufgehängt", und eine
|
||||
geänderte Anweisung erforderte bisher komplettes Abbrechen/Neustarten). **Umsetzung:**
|
||||
indeterminierter `ProgressBar` unter "Anfrage läuft…". Das Anweisungsfeld bleibt nach der
|
||||
ersten Antwort sichtbar (statt zu verschwinden); ein zweiter Button "Erneut anfragen" sendet
|
||||
eine geänderte/ergänzte Anweisung erneut, wobei die aktuell angehakten Vorschläge der letzten
|
||||
Runde als Entwurfskontext mitgeschickt werden (`AiPlanningService.MergeDraft`: ersetzt
|
||||
Lessons mit passender Id im tatsächlichen Datenbankstand durch die Entwurfsversion, hängt
|
||||
neue Vorschläge ohne Id an) — die KI baut so auf dem bereits gezeigten, noch nicht
|
||||
gespeicherten Stand auf, ohne dass dafür etwas in der Datenbank landen muss. Ergebnisliste
|
||||
wird bei jeder Runde einfach ersetzt, **kein** Seite-an-Seite-Vergleich zwischen den Runden
|
||||
(das wäre 4.5.18). Bewusst einfacherer erster Schritt statt des größeren Umbaus.
|
||||
- [ ] **4.5.18** (Zurückgestellt, Nutzer-Idee zu 4.5.17) Statt die Ergebnisliste beim Nachfassen
|
||||
einfach zu ersetzen: alten und neuen KI-Entwurf gegenüberstellen und den Nutzer pro Stunde
|
||||
(oder insgesamt) wählen lassen, mit welchem Stand weitergemacht wird. Größerer Umbau als
|
||||
4.5.17 (zwei Entwürfe parallel im Speicher halten, Seite-an-Seite-UI, Entscheidung je Stunde
|
||||
statt nur global) — deshalb erst mal zurückgestellt, bis sich zeigt, ob das einfache
|
||||
Nachfassen aus 4.5.17 in der Praxis schon ausreicht.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user