The job
The same event gets reported many times, by different outlets, in video and in text, with names spelled differently and places described loosely. The task: collect those reports, extract the facts from each, and group the sources that describe the same case, with every claim linked back to where it came from.
Everything runs on one workstation with open weight models, at no cloud cost. Because the subject is real deaths, the dataset never leaves the lab and every case goes past a person before it counts.
Collection and extraction
An adaptive agent loop writes search queries, pulls YouTube and Google News, filters for relevance and checks coverage across 20 Texas cities, then asks again where coverage is thin, up to five rounds.
Articles are scraped; videos are transcribed with Faster-Whisper and cut to the discovery window. One LLaMA 3.2 3B call per source returns nine structured fields, and when confidence is low on a video, a Moondream2 pass reads three frames and is kept only if it does better.
A four pass cascade
Grouping runs four passes, each a fallback for the one before: names canonicalised with fuzzy matching, then a city and date fingerprint, then sentence embeddings with agglomerative clustering, then an LLM that reviews only the ambiguous pairs, capped at 500 calls a run.
Validation adds seven rule checks and a cross source agreement score. Anything that trips a flag lands in a human review queue; automation is pre screening only.
Results and what they taught
On 50 hand labelled sources and 44 true cases, grouping reached a B cubed F1 of 0.889 and a pairwise F1 of 0.615, against trivial baselines of 0.000 and 0.019. Recall was perfect; precision is the open work.
The lesson I keep: embedding similarity is the wrong final arbiter. It merged events that only shared topic words across different cities, so geography has to be a hard constraint, not a feature.