The Wire
An earnings call is a performance. Management picks every word carefully, sounds confident in the prepared remarks, and gets vaguer when the analysts start pushing in Q&A. I wanted something that reads the transcript the way a skeptical analyst would, pulling out the sentiment, the risk language, and the forward guidance, without a model that just makes quotes up. So the whole system is built around one rule: every claim has to be grounded in an exact quote from the call, or it gets thrown out. It runs entirely on a free local model, no API keys.
Highlights
- Three specialist agents (sentiment, risk, guidance) run in parallel, then a separate verifier agent re-checks every quote against the transcript and drops anything it can’t ground. A 7B model hallucinates, so this is what keeps the output trustworthy anyway. Grounding rate is the headline metric (100% on the bundled sample).
- Conviction is scaled by the grounding rate, so the thesis literally can’t be more confident than the evidence backing it.
- Separates prepared remarks from unscripted Q&A and flags when management gets more hedged live, a caution signal you’d miss reading top to bottom.
- Runs on a free local model (Ollama + Qwen2.5-7B) with a deterministic heuristic fallback so it always produces something. The model layer is provider-agnostic, so the same code swaps to Groq’s free tier in the cloud.
Tech Stack
- Python + FastAPI - Pipeline and API
- Ollama (Qwen2.5-7B) - Local, free LLM; provider-agnostic (Groq Llama-3.3-70B optional in the cloud)
- rapidfuzz - Fuzzy substring match that grounds every quote against the transcript
- Pydantic - Thin per-agent schemas kept small enough for a 7B to fill reliably
- SQLite - Thesis persistence
- Astro - Single-page UI
Notes
- The whole project is really one idea: don’t trust the model, verify it. An independent grounding pass turned an unreliable 7B into a pipeline I’d actually believe.
- Tuning the fuzzy-match threshold was the crux. Strict enough to catch a fabricated quote, loose enough to allow a light paraphrase. Too tight and real quotes get dropped, too loose and the grounding means nothing.
- Same generate-locally, display-in-cloud split as P4P. The 7B is free on my Mac but too big for a cheap VM, so generation runs locally and Fly.io just serves the stored theses.
- The heuristic fallback started as a test shim and became a real feature. The UI shows which mode produced each thesis.
- I’d like to pull in real market data next and check whether the stance actually predicts the post-call move.
Check it out: The Wire