agharsallah commited on
Commit Β·
26bc5b9
1
Parent(s): f637227
feat(commentary): refine rafters-critic persona and improve commentary prompt for humor
Browse files- config/agents/rafters-critic.yaml +6 -4
- modal/catalogue.py +8 -2
- src/agents/commentator.py +15 -4
config/agents/rafters-critic.yaml
CHANGED
|
@@ -3,10 +3,12 @@ role: observer
|
|
| 3 |
handler: commentator
|
| 4 |
persona: >
|
| 5 |
You are the Heckler in the Rafters β a washed-up theater critic who wandered into
|
| 6 |
-
the show one season, never left, and now
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
|
|
|
|
|
|
| 10 |
# Scenario-agnostic: this critic summarises only the public ledger, so it drops into any
|
| 11 |
# cast (a scene, a debate, a mystery, a guessing game) with no engine edits.
|
| 12 |
# Never event-woken (subscribes_to: []) so it can never re-trigger on its own remark;
|
|
|
|
| 3 |
handler: commentator
|
| 4 |
persona: >
|
| 5 |
You are the Heckler in the Rafters β a washed-up theater critic who wandered into
|
| 6 |
+
the show one season, never left, and now roasts whatever the cast conjures from the
|
| 7 |
+
cheap seats. Your voice is quick and deadpan, half snarky sports announcer, half
|
| 8 |
+
exhausted regular who has seen this exact nonsense before: you find the one absurd
|
| 9 |
+
detail in a scene and skewer it with a comparison nobody saw coming. Funny first,
|
| 10 |
+
affectionate always, never cruel, and you never break the spell of the show β you
|
| 11 |
+
don't narrate the plot or describe "the scene," you land one perfect line and sit back down.
|
| 12 |
# Scenario-agnostic: this critic summarises only the public ledger, so it drops into any
|
| 13 |
# cast (a scene, a debate, a mystery, a guessing game) with no engine edits.
|
| 14 |
# Never event-woken (subscribes_to: []) so it can never re-trigger on its own remark;
|
modal/catalogue.py
CHANGED
|
@@ -283,8 +283,14 @@ GOOGLE_MODELS: tuple[ModelConfig, ...] = (
|
|
| 283 |
# Standard gemma4 MoE arch (NOT the unified 12B path): served by a native
|
| 284 |
# vLLM class on the pinned stable release (0.19.1+), so NO nightly, no
|
| 285 |
# transformers pin, and CUDA graphs + async scheduling work β defaults stand.
|
| 286 |
-
# Text-only in the cast
|
| 287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 288 |
),
|
| 289 |
)
|
| 290 |
|
|
|
|
| 283 |
# Standard gemma4 MoE arch (NOT the unified 12B path): served by a native
|
| 284 |
# vLLM class on the pinned stable release (0.19.1+), so NO nightly, no
|
| 285 |
# transformers pin, and CUDA graphs + async scheduling work β defaults stand.
|
| 286 |
+
# Text-only in the cast, but image is this model's ONLY modality: zeroing it
|
| 287 |
+
# (as the 12B does for image+audio) empties the active-modality set, and vLLM
|
| 288 |
+
# 0.21.0's MultiModalBudget then calls max() on an empty sequence and crashes
|
| 289 |
+
# on boot (compute_mm_encoder_budget). The 12B escapes this only because its
|
| 290 |
+
# nightly wheel carries the defensive fix; on the stable pin we can't zero the
|
| 291 |
+
# last modality. So keep one image slot: the vision encoder warmup is tiny and
|
| 292 |
+
# the cast never sends images. Don't drop this to 0 without bumping vLLM.
|
| 293 |
+
mm_limits={"image": 1},
|
| 294 |
),
|
| 295 |
)
|
| 296 |
|
src/agents/commentator.py
CHANGED
|
@@ -124,12 +124,23 @@ class Commentator(ManifestAgent):
|
|
| 124 |
# ββ prompt steering βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 125 |
|
| 126 |
def _build_extra_prompt(self, projection: StageProjection, recent_events: tuple[Event, ...]) -> str:
|
| 127 |
-
"""Steer the model toward a
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
return (
|
| 129 |
"YOUR JOB\n"
|
| 130 |
-
"
|
| 131 |
-
"
|
| 132 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
)
|
| 134 |
|
| 135 |
# ββ turn ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
| 124 |
# ββ prompt steering βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 125 |
|
| 126 |
def _build_extra_prompt(self, projection: StageProjection, recent_events: tuple[Event, ...]) -> str:
|
| 127 |
+
"""Steer the model toward a genuinely funny one-line heckle of the beat.
|
| 128 |
+
|
| 129 |
+
Small models can't be funny on the word "funny" alone β they default to
|
| 130 |
+
cheerful narration. So we hand them a comedian's recipe: latch onto one
|
| 131 |
+
concrete detail, then break it with a twist (absurd comparison, deadpan
|
| 132 |
+
undercut, or mock-serious overreaction). Specific + surprising = the laugh."""
|
| 133 |
return (
|
| 134 |
"YOUR JOB\n"
|
| 135 |
+
"Heckle the beat above with ONE short, funny line β the kind that gets a laugh, "
|
| 136 |
+
"not a polite nod. Work the bit like this:\n"
|
| 137 |
+
"- Grab ONE specific thing the cast just did β a prop, a word, a choice β and make "
|
| 138 |
+
"THAT the target. Never a vague 'well, that happened'.\n"
|
| 139 |
+
"- Then break it: an absurd comparison, a deadpan undercut, or a mock-serious "
|
| 140 |
+
"overreaction. The twist is where the laugh lives β surprise beats cleverness.\n"
|
| 141 |
+
"- Punch up at the drama, never down at a person. Affectionate, never cruel.\n"
|
| 142 |
+
"- ONE sentence. No narration, no stage directions, no quotation marks, no lists, "
|
| 143 |
+
"no emoji, no setup-then-punchline. Just the line, like you shouted it from the rafters."
|
| 144 |
)
|
| 145 |
|
| 146 |
# ββ turn ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|