Fix podcasts generating in English + failing with invalid JSON
Two root causes, both fixed in the bind-mounted podcast prompt templates
(prompts/podcast/*.jinja):
1. Language: the episode profile's `language` field IS passed to both
podcast_creator templates as {{ language }}, but the stock templates never
reference it — so podcasts came out English (driven only by the English
stock briefings/speakers), then read aloud by the German-locked Chatterbox
TTS = "English with a German accent". Added a CRITICAL LANGUAGE REQUIREMENT
block keyed on {{ language }} to both templates; now `language: "de"`
actually forces German. Verified end-to-end: a full run produced a 44-line
all-German transcript + audio.
2. Invalid json output failures: qwen3.5:27b is a thinking model; on long
segments the <think> block ate the response-token budget and truncated the
JSON. Prepended /no_think to both templates (~3x faster, valid JSON).
Templates are bind-mounted read-only via docker-compose (directory mount, so
edits survive a container restart without inode-staleness). Bundled briefings
and speaker backstories were also translated to German to reduce drift.
Known limitation documented: feeding an entire book (~70k tokens) as podcast
content makes each of the 6 LLM calls take ~3.5 min and is unreliable; use a
shorter source or summary. Confirmed working with concise content.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
e2fb113213
commit
054f867a8a
6 changed files with 304 additions and 18 deletions
|
|
@ -379,21 +379,36 @@ Das Episode- oder Sprecherprofil verweist auf ein Modell ohne konfiguriertes Cre
|
|||
`PUT /api/speaker-profiles/{id}` (`voice_model`) auf registrierte lokale/OpenRouter-Modelle
|
||||
umstellen — siehe `scripts/setup_models.sh` für die IDs der Standardmodelle.
|
||||
|
||||
### Podcast wird auf Englisch statt Deutsch erzeugt
|
||||
### Podcast wird auf Englisch statt Deutsch erzeugt (oder auf Englisch mit deutschem Akzent vorgelesen)
|
||||
|
||||
Das verwendete Episode-Profil hat kein `language`-Feld gesetzt — ohne Angabe generiert das
|
||||
Sprachmodell standardmäßig auf Englisch, unabhängig von der Sprache der Quelle. Prüfen und
|
||||
korrigieren:
|
||||
Das ist behoben: Die Podcast-Prompt-Vorlagen (`prompts/podcast/outline.jinja` und
|
||||
`transcript.jinja` in diesem Projekt) wurden um eine explizite Sprachanweisung ergänzt, die das
|
||||
`language`-Feld des Episode-Profils auswertet — sie werden per Bind-Mount aus `docker-compose.yml`
|
||||
in den Container eingehängt. Setzt du am Episode-Profil `language: "de"`, kommt der Podcast auf
|
||||
Deutsch. (Vorher hatte das `language`-Feld keine Wirkung, weil die mitgelieferten Vorlagen es
|
||||
ignorierten — daher englischer Text, der von der deutsch-fixierten TTS mit Akzent vorgelesen wurde.)
|
||||
|
||||
Falls doch wieder Englisch erscheint, prüfe das `language`-Feld:
|
||||
|
||||
```bash
|
||||
curl -s http://127.0.0.1:5055/api/episode-profiles | python3 -c \
|
||||
"import json,sys; [print(p['name'], p['language']) for p in json.load(sys.stdin)]"
|
||||
```
|
||||
|
||||
Fehlt `de`, per `PUT /api/episode-profiles/{id}` (vollständiger Body nötig, siehe oben)
|
||||
`"language": "de"` ergänzen. Die drei mitgelieferten Profile (`business_analysis`,
|
||||
`solo_expert`, `tech_discussion`) sind bereits korrigiert; bei neu angelegten eigenen Profilen
|
||||
selbst daran denken.
|
||||
Fehlt `de`/`de-DE`, per `PUT /api/episode-profiles/{id}` (vollständiger Body) ergänzen. Zusätzlich
|
||||
sind Briefing und Sprecherbeschreibungen der mitgelieferten Profile auf Deutsch übersetzt (hilft
|
||||
gegen Sprach-Drift, wenn der Quellinhalt englisch ist). **Wichtig:** Änderst du die
|
||||
Vorlagen-Dateien selbst, ist danach ein Container-Neustart nötig (`docker compose up -d
|
||||
--force-recreate open_notebook`), damit der Bind-Mount die neue Version übernimmt.
|
||||
|
||||
### Podcast-Erzeugung schlägt mit „Invalid json output" fehl
|
||||
|
||||
Das Textmodell hat ungültiges JSON geliefert — passierte bei `qwen3.5:27b` (einem „denkenden"
|
||||
Modell), wenn der gesamte Notebook-Inhalt (bei einem ganzen Buch ~70.000 Tokens) in jeden
|
||||
Transkript-Abschnitt gepackt wird: Der Denk-Block frisst dann das Antwort-Budget auf und das JSON
|
||||
wird abgeschnitten. Behoben durch `/no_think` als erste Zeile beider Podcast-Vorlagen (schaltet
|
||||
den Denkmodus ab, ~3× schneller, volles Budget fürs JSON). Falls es dennoch auftritt: kürzeren
|
||||
Quellinhalt verwenden (nicht das ganze Buch) oder die Generierung erneut starten.
|
||||
|
||||
### Weitere technische Details
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue