Files
ai-podcast/docs/plans/2026-06-02-caller-variety-and-devon-search-design.md
T
lukeandClaude Opus 5 9071ed36d3 Track design and implementation plans
Seven plan documents covering the website JS infrastructure, show theme, caller
quality overhaul, cost dashboard, the Alpine relocation, and caller variety plus
Devon's search — the record of why the current architecture looks the way it
does. Plus the press release draft.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 04:23:53 -05:00

2.7 KiB
Raw Blame History

Caller Variety, Movable Callers, and Devon Search Fix

Date: 2026-06-02 Status: Approved, implementing

Problems

  1. Callers feel formulaic — too many deep moral dilemmas; the roster prompt enforces it ("at least half moral dilemmas" + "NEVER generate callers who are just enthusiastic about a hobby").
  2. Callers circle forever — they don't take advice, restating the same moral issue until the host cuts them off. The live dialog prompt gives a situation
    • secret_want but no mechanic to be moved, persuaded, or reach resolution.
  3. Devon's search fails — SearXNG at localhost:8888 is unreachable whenever the laptop's Docker Desktop isn't running. Fragile.

Changes

A. Roster variety — backend/services/caller_gen.py (BATCH_SYSTEM_PROMPT)

  • Remove the absolute ban on hobby/job/story callers.
  • Replace "at least half moral dilemmas" with an explicit distribution for a 10-caller roster (dilemmas still lead):
    • 45 moral dilemmas / confessions / betrayals — keep the STAKES language.
    • 23 storytellers & enthusiasts — a wild thing that happened, a fascinating niche obsession or fact, a vivid slice-of-life. No deep dilemma required.
    • 12 believers / chaos — earnest UFO/cryptid/conspiracy callers (Coast-to-Coast sincerity) or a big eccentric personality on a rant.
  • Keep the anti-collision rule, "reason they HAD to call tonight," and "even lighter callers need energy and specificity."

B. Movable callers — backend/main.py (get_caller_prompt)

Add a concise conversational-arc block for every caller:

  • You have a position/want, but you're a real person — if Luke makes a good point, genuinely react: agree, change your mind, soften, dig in, or decide.
  • Don't restate a point/dilemma you've already made; the conversation must move. You can reach a resolution, a decision, or an emotional turn. You are not required to stay stuck.

Stacks on the existing "don't restate facts / move the story forward" rule. Must keep get_caller_prompt output under the 3500-char test cap.

C. SearXNG → NAS — backend/config.py, backend/services/news.py

  • Deploy SearXNG to mmgnas as an always-on container (deploy-nas-docker).
  • Add searxng_url to config.py (env-overridable), default to the NAS URL.
  • news.py reads settings.searxng_url instead of the hardcoded constant; intern.py imports SEARXNG_URL from news.py, so Devon, headlines, and caller news-grounding all follow.

Verification

  • Run test suite (note: 2 pre-existing stale test_caller_gen.py failures).
  • Live caller-gen batch → review the roster mix.
  • Devon end-to-end: a web_search against the NAS SearXNG returns real results.