Split the book into narration/dialogue spans from its own quotation marks and ask the LLM only who speaks each dialogue span (POST /api/attribute-spans), so text can no longer be fused, dropped or duplicated and a novel takes ~10 min instead of ~4 h. Book 1 vs the hand-corrected reference: every-word-right 87.0% -> 92.3%, type agreement 93.6% -> 97.4%; Books 2/3 (not tuned on) 90.8% / 89.9%. - static/js/audiobook-spans.js (pure, unit-tested) + audiobook-cast-spans.js - core/attribution_spans.py, route, tests; scripts/score_attribution.py - default on; localStorage ab-span-mode=0 restores the classic engine - architecture/audiobook-attribution.md, Manual, CHANGELOG 1.32.0, TODO Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| attribution_spans.py | ||
| audio.py | ||
| config.py | ||
| constants.py | ||
| database.py | ||
| docker_client.py | ||
| magazine.py | ||
| presets.py | ||
| provider_health.py | ||
| registry.py | ||
| retry.py | ||
| routing.py | ||
| tts_helpers.py | ||
| validation.py | ||
| voice_index.py | ||
| voice.py | ||