CUMDEV News Anchor
The Threads "news anchor" persona for CUMDEV's
trading bots (Kalshi perps, Alpaca stocks/crypto/options). This repo hosts
the persona's live configuration -- system prompts, per-task generation
settings, a curated few-shot example library, and the base model it wraps
-- as persona_config.json. The bots pull this file at runtime (cached,
with a safe fallback to a known-good default if the pull fails or is
stale), so editing this file changes the bot's voice on Threads without a
code redeploy.
What this is (and isn't)
This is a prompt-engineered persona, not a custom-trained model. It
wraps an existing, capable instruction-tuned model
(meta-llama/Llama-3.3-70B-Instruct, called via
HF Inference Providers)
with a carefully written system prompt per task, rather than fine-tuning
new weights. That's a deliberate choice: a real fine-tune needs a curated
training dataset, GPU training infrastructure, and an ongoing paid
dedicated inference endpoint to host the resulting checkpoint -- a real
recurring cost this project has deliberately deferred. Prompt-engineering a
strong base model, backed by a genuinely large curated example library (see
below), is the practical way to get most of the quality uplift of a real
fine-tune -- consistent voice, format, and tone -- at zero added
infrastructure cost.
Two levers, both free on the same router/token
- A bigger base model. Upgraded from
meta-llama/Llama-3.1-8B-Instructtometa-llama/Llama-3.3-70B-Instruct(v1.2.0) -- confirmed live, side-by-side, to produce noticeably more natural phrasing and to actually honor format constraints (like "no quotes") the smaller model sometimes dropped. Same free HF Inference Providers router, same token, zero added cost. - A large few-shot example library. Each task below carries a curated
examplesarray -- real(user, assistant)pairs written to demonstrate the exact voice, covering crypto, stocks, macro, and a range of tones. The calling code samples a fresh handful of these per real call and inserts them as genuine conversation turns between the system prompt and the real request (not text pasted into the system prompt) -- this is what actually teaches the model the pattern to imitate, on top of the written instructions. The library is deliberately larger than any one call needs, so it can keep growing over time (by editing this file) without touching any calling code.
Tasks
persona_config.json defines, per task, a system prompt, max_tokens/
temperature, and an examples library:
anchor_rewrite_headline-- rewrites a raw RSS/news headline into a short, punchy "breaking news" anchor line before it's posted (as a generated image card or text fallback). One post is always one story -- see the calling code's own "one post, one story" discipline.anchor_commentary-- genuine analysis/reaction/"take" on a story, distinct from the headline rewrite -- used when the account has already covered a story (so re-posting the same headline would be a duplicate) but there's still something real to say about it, or as an engaging fallback on a slow news day.anchor_draft_reply-- drafts a reply to another Threads post in the same voice, mentioning CUMDEV's own site only when it's actually relevant, never as reflexive self-promotion, always closing with 1-2 real hashtags.
Every task shares the same hard rule: never invent facts, numbers, or details not present in the source material -- only the delivery is restyled/generated, never the substance.
Usage
Consumed by src/data/threads_persona.py in the
bettor repo. Not intended to be
called directly by third parties, though the config format is simple
enough to reuse: fetch persona_config.json, pick a task, sample a few
examples pairs, and send the system prompt + sampled examples (as
alternating user/assistant turns) + your own final user-turn content to
any OpenAI-compatible chat-completions endpoint running the base_model
above (or a comparable instruction-tuned model).