| """Scripted, pre-generated beats. |
| |
| These lines are fixed, so their audio is generated *once* (in parallel via |
| Modal `.map()` at deploy/warm time — see modal_app.py) and cached on a Volume. |
| That keeps the dramatic moments — especially the witness's **voice crack** — |
| off the per-turn latency path and lets us pick the best take of the climax. |
| |
| The break line has several takes precisely because VoxCPM2's expressive style |
| varies run-to-run; we generate many and keep the one that cracks best (PRD §10). |
| """ |
| from __future__ import annotations |
|
|
| from witnessbox.witness import WITNESS_NAME |
|
|
| |
| INTRO_NARRATION = ( |
| "The witness is sworn. Marcus Reid, Chief Financial Officer of Halcyon " |
| "Dynamics. Twelve million dollars left the company for a vendor named " |
| "Meridian Atlantic. You have the floor, counselor. Mind how you say it — " |
| "he listens for doubt." |
| ) |
|
|
| |
| WITNESS_OPENING = ( |
| "Counselor. I've answered these questions for the auditors, the board, and " |
| "two regulators. Ask what you like — I have nothing to hide." |
| ) |
|
|
| |
| |
| BREAK_LINE = ( |
| "No— that's… that isn't… I signed it. I knew them. I knew the dates. " |
| "I signed it." |
| ) |
| BREAK_LINE_TAKES = 32 |
|
|
| |
| WIN_EPILOGUE = ( |
| "The witness is excused. The record will reflect the contradictions: the " |
| "timeline, the authorization, the relationship. Well examined, counselor." |
| ) |
|
|
| |
| LOSE_LINE = ( |
| "The bench has heard enough speculation, counselor. The witness is excused — " |
| "and so are you. Mr. Reid keeps his composure, and his story." |
| ) |
|
|
|
|
| def scripted_beats() -> dict[str, dict]: |
| """All fixed lines + the voice style each should be rendered in. |
| |
| Returned as a plain dict so modal_app.py can fan it out over `.map()`. |
| """ |
| return { |
| "intro": {"text": INTRO_NARRATION, "style": "calm, formal, courtroom narrator", "takes": 1}, |
| "opening": {"text": WITNESS_OPENING, "style": "calm, composed, faintly condescending", "takes": 1}, |
| "break": {"text": BREAK_LINE, "style": "voice unsteady and cracking, composure gone", "takes": BREAK_LINE_TAKES}, |
| "win": {"text": WIN_EPILOGUE, "style": "calm, formal, courtroom narrator", "takes": 1}, |
| "lose": {"text": LOSE_LINE, "style": "calm, formal, courtroom narrator", "takes": 1}, |
| } |
|
|
|
|
| __all__ = [ |
| "INTRO_NARRATION", |
| "WITNESS_OPENING", |
| "BREAK_LINE", |
| "BREAK_LINE_TAKES", |
| "WIN_EPILOGUE", |
| "LOSE_LINE", |
| "scripted_beats", |
| "WITNESS_NAME", |
| ] |
|
|