Commit Graph

6 Commits

Author SHA1 Message Date
895d7c56a1 feat: Placeholder in der Auto-Generierung + Token-Leak-Fix
- Pair-Generierung markiert Nomen per [surface|lemma]-Markup und löst sie zu
  {{label.o:objectId}} / {{label.w:wordId}} auf (Words werden auto-erstellt)
- Pipeline übersetzt + vertont Placeholder-Wörter aus den Sätzen mit
- translateText halluziniert keine ⟦PHn⟧-Tokens mehr (kein Token-Prompt ohne
  Tokens, defensives Strippen); TTS/Review lösen geleakte Tokens auf
- POST /api/pipeline/repair-tokens repariert bestehende Sätze + Audios

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 22:43:39 +02:00
ddbd879dab feat: KI-Review-Schritt in der Pipeline (Korrekturlesen vor Audio)
Alle Pairs eines Bildes (de/en/sv) gehen zusammen mit dem Bild an Sonnet
zur Prüfung von Rechtschreibung, Übersetzungs-Konsistenz und Plausibilität.
Korrekturen werden vor der Audio-Erzeugung angewendet; vorhandene Audios
korrigierter Zellen werden invalidiert. Review-Fehler sind nicht fatal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 21:41:20 +02:00
985119bb03 fix: Übersetzungs-Retry + robuster Translate-Step + Nachhol-Endpoints
- callClaude: Retry mit Backoff bei Überlast/Rate-Limit/Netzfehler
  (429/500/503/529) — wahrscheinliche Ursache der fehlenden SV-Übersetzung
- Translate-Step pro Pair gekapselt: ein Fehler reißt nicht mehr den ganzen
  Lauf ab, Fehlversuche werden gezählt (pipeline_progress.translateFailures)
- translatePair als wiederverwendbarer Helfer extrahiert
- POST /pipeline/picture/:id/translate-fill: fehlende Übersetzungen
  (Sätze + Antwort-Wörter) eines Bildes nachholen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 22:03:11 +02:00
6af2428df5 feat: automatische Content-Pipeline (release → pairs → übersetzen → audio → ready)
- pictures.pipeline_* Spalten + app_settings Tabelle (Migration)
- lib/placeholders.js: Placeholder-Auflösung; TTS spricht keine UUIDs mehr
- lib/pairContent.js: geteilte Pair-Logik (Readiness mit Skip-Optionen)
- lib/generatePairs.js: Claude-Generierung (konfigurierbare Anzahl, nur
  Nomen/Adjektive bei word-Pairs) + serverseitige Persistenz inkl. object_pairs
- lib/pipeline.js: In-Process-Runner, idempotente Schritte, Boot-Resume
- routes/pipeline.js: release/retry/overview/bundle/settings + Bild-Publish
  (kaskadiert Fragen/Statements/Pairs/Wörter/Objekte/Bild)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 20:52:11 +02:00
29a260e351 feat: bessere Übersetzungsqualität (Sonnet + Wörter mit Kontext)
- Übersetzungs-Modell auf Sonnet (env TRANSLATE_MODEL, Default claude-sonnet-4-5).
- Neue translateWords(): übersetzt die Wörter eines word-Pairs gemeinsam in
  einem Call, mit der Frage als Kontext → korrekte Bedeutung mehrdeutiger
  Wörter (z.B. 'Ranke' → 'ranka' statt 'klänge'), konsistente Gruppe.
- POST /pairs/:id/translate nutzt translateWordGroup für word-Typ und nimmt
  { overwrite:true } entgegen, um falsche bestehende Zielsprachen neu zu
  übersetzen (Quellsprache bleibt unangetastet); fillMissingRow erhält
  overwrite-Flag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 21:29:11 +02:00
8f9a48fa5a feat: Pro-Pair-Übersetzung + Review-Kaskade auf Objekt/Bild
- Übersetzungs-Kern (Claude + Platzhalter-Schutz) nach src/lib/translate.js
  ausgelagert; claude.js importiert von dort (Endpoints unverändert).
- Neuer Endpoint POST /pairs/:id/translate: füllt fehlende Sprachen für
  Frage, Statements bzw. (bei word-Typ) verlinkte Wörter und liefert das
  3-sprachige Inhalts-Bündel fürs Review-Modal.
- POST /pairs/:id/review hebt verlinkte Objekte + Bilder zusätzlich auf
  'reviewed' (idempotent).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 14:27:52 +02:00