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>
44 lines
1.7 KiB
YAML
44 lines
1.7 KiB
YAML
services:
|
|
surrealdb:
|
|
image: surrealdb/surrealdb:v2
|
|
restart: always
|
|
pull_policy: always
|
|
command: start --log info --user ${SURREAL_USER:-root} --pass ${SURREAL_PASSWORD:-root} rocksdb:/mydata/mydatabase.db
|
|
user: root # Required for bind mounts on Linux
|
|
environment:
|
|
- SURREAL_EXPERIMENTAL_GRAPHQL=true
|
|
ports:
|
|
- "127.0.0.1:8000:8000"
|
|
volumes:
|
|
- ./surreal_data:/mydata
|
|
|
|
open_notebook:
|
|
image: lfnovo/open_notebook:v1-latest
|
|
restart: always
|
|
pull_policy: always
|
|
depends_on:
|
|
- surrealdb
|
|
ports:
|
|
- "127.0.0.1:8502:8502"
|
|
- "127.0.0.1:5055:5055"
|
|
environment:
|
|
- OPEN_NOTEBOOK_ENCRYPTION_KEY=${OPEN_NOTEBOOK_ENCRYPTION_KEY}
|
|
- SURREAL_URL=ws://surrealdb:8000/rpc
|
|
- SURREAL_USER=${SURREAL_USER:-root}
|
|
- SURREAL_PASSWORD=${SURREAL_PASSWORD:-root}
|
|
- SURREAL_NAMESPACE=open_notebook
|
|
- SURREAL_DATABASE=open_notebook
|
|
- OLLAMA_BASE_URL=http://host.docker.internal:11434
|
|
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
volumes:
|
|
- ./notebook_data:/app/data
|
|
# Podcast-Prompt-Vorlagen mit expliziter Sprachanweisung ({{ language }})
|
|
# und abgeschaltetem Thinking-Modus (/no_think), damit Podcasts in der
|
|
# eingestellten Sprache erzeugt werden (statt Englisch) und das JSON bei
|
|
# langen Segmenten nicht durch riesige Reasoning-Blöcke abgeschnitten wird.
|
|
# Verzeichnis-Mount (nicht Einzeldateien), damit Edits ohne Inode-Probleme
|
|
# nach einem Container-Neustart greifen. Der Ordner im Image enthält nur
|
|
# genau diese zwei Vorlagen.
|
|
- ./prompts/podcast:/app/prompts/podcast:ro
|