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

57 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.