Devon own stem/track/channel, per-category LLM routing, settings UI cleanup

Audio:
- Devon gets own stem, Reaper track (Input 17), and configurable channel
- play_caller_audio accepts stem_name + channel_override params
- Reaper script checks 4 voice tracks (Host, Devon, Live Caller, AI Caller)
- postprod.py includes devon stem in gap detection

Cost optimization:
- Per-category model routing: Sonnet for caller dialog, Gemini Flash for everything else
- Estimated 65% cost reduction ($4.32 → ~$1.50/show)
- Category models configurable from settings UI

Frontend:
- Settings panel: clean routing grid for output channels, model routing grid for LLM categories
- Devon channel added to audio routing
- Share icon SVG fill fix (currentColor)
- Website homepage iterations

Publishing:
- Revert Castopod API workaround (API re-enabled)
- Fix container media path

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-16 17:05:19 -06:00
parent 0b091a1afd
commit 164cad456c
11 changed files with 201 additions and 73 deletions
+14 -1
View File
@@ -29,10 +29,23 @@ class Settings(BaseSettings):
# LLM Settings
llm_provider: str = "openrouter" # "openrouter" or "ollama"
openrouter_model: str = "anthropic/claude-sonnet-4-5"
openrouter_model: str = "anthropic/claude-sonnet-4-5" # primary/default model
ollama_model: str = "llama3.2"
ollama_host: str = "http://localhost:11434"
# Per-category model routing — cheaper models for non-critical tasks
# Categories: caller_dialog, devon_monitor, devon_ask, background_gen,
# call_summary, news_summary, topic_gen, unknown
category_models: dict = {
"caller_dialog": "anthropic/claude-sonnet-4-5", # quality matters — this IS the show
"devon_ask": "google/gemini-2.5-flash", # Devon direct questions
"devon_monitor": "google/gemini-2.5-flash", # Devon polling — biggest cost saver
"background_gen": "google/gemini-2.5-flash", # JSON caller backgrounds
"call_summary": "google/gemini-2.5-flash", # post-call summaries
"news_summary": "google/gemini-2.5-flash", # news digests
"topic_gen": "google/gemini-2.5-flash", # topic generation
}
# TTS Settings
tts_provider: str = "inworld" # "kokoro", "elevenlabs", "inworld", "vits", or "bark"