Systems that remember, pipelines that stream, and agents that cite their
sources. Nine experiments, written up.
Investigation memory
Forensic LLM Wiki
RAG retrieves; a wiki remembers. This system compiles raw evidence into an
evolving, Obsidian-compatible case wiki — hypotheses, contradictions,
and open questions included. Replaying six evidence drops takes the eval
score from 2/16 to 16/16 as knowledge compounds.
move your cursor — the case graph follows
how it works
Evidence links live on a hash-indexed directed graph with content-hash deduplication
Every answer cites the maintained case state, not raw snippets
Lint rules flag unsupported claims and contradictions before they land
13 tools exposed to agents over the Model Context Protocol
requirements it meets
Functional: ingest evidence drops, query with citations, draft the final report, export to Obsidian
Non-functional: deterministic mock mode (no API key), CI on every push, outputs validated by a Pydantic schema layer
A research-paper agent that answers cross-paper questions with page-anchored
citations. Hybrid retrieval seeds candidates with embeddings and BM25 fused
by reciprocal rank, then expands across papers with k-hop BFS over a
knowledge graph — lifting cross-paper linkage from 0% to 19.2%.
how it works
Reciprocal rank fusion merges lexical and semantic candidates before the graph hop
Entity canonicalization via a regex/alias table keeps the graph clean
A fuzzy-match filter drops fabricated citations; quotes must match the source literally or nearly
A second LLM grades every claim for faithfulness before the answer ships
requirements it meets
Functional: upload PDFs or arXiv URLs, take notes, browse the graph, ask cross-paper questions
Non-functional: ~3 LLM calls per question, single Docker container on Hugging Face Spaces, state persisted and restorable
Your documents never leave your machine. Ollama for inference, Qdrant for
vector search, Spring Boot on top — with enforced citations and an
explicit refusal when retrieval comes up empty, instead of a made-up answer.
two-finger drag inside the screen — up leans in, down pulls back, slowly
Students search by intent — “where’s free food?” —
while event listings speak administrative English. WolfieDex bridges the gap
for Stony Brook: HyDE query expansion, vector retrieval over live SB Engaged
data, and answers grounded only in what was retrieved.
how it works
A background worker continuously scrapes listings and rewrites them into search-oriented summaries
HyDE expands vague student queries into hypothetical listings before embedding
MongoDB Atlas Vector Search retrieves; the answer cites only retrieved events
requirements it meets
Functional: natural-language questions, strongest matches plus similar events, direct answers
Non-functional: deployed live on Vercel with serverless APIs; grounded-only responses
Batch ETL shows you yesterday; I wanted minutes. Ticks stream through Kafka
into object storage, Airflow loads the warehouse, dbt refines bronze into
silver into gold, and a dashboard renders it — 3k+ records/sec at 96%
pipeline reliability, sub-minute from market event to chart.
hover to inspect the dashboard up close
how it works
Medallion architecture: raw bronze, validated silver, business-ready gold
Warehouse cold-starts were tripping tight DAG timeouts; warmup queries stabilized runs at 96%
Kafka over Kinesis for cost, MinIO over S3 for local dev, dbt for tested, version-controlled SQL
requirements it meets
Functional: 1-minute polling across 100–600 tickers, 5 analytical views for strategy work
Non-functional: fault-tolerant messaging, 16x latency reduction over the batch baseline
SUB-MINUTE
EVENT → CHART — <60 S THROUGHPUT — 3K REC/S DAG RUNS — 24/25 GREEN
A classifier that can abstain. Monte-Carlo dropout estimates predictive
uncertainty, a tri-gate routes each image to accept, abstain, or flag, and
the out-of-distribution thresholds are calibrated against SVHN so confident
nonsense gets caught before it ships.
The actual retail game on Steam — not a clone. One button, one square,
instant death on contact. Agents train in a simulator 2,000× faster than
real time, then a custom C++ mod drives the real game, reading state and
pressing jump live.
how it works
Training in the real game means waiting days at 60 fps; the simulator turns that into seconds
PPO — the trendy default — got stuck, refusing the first risky jump. DQN and a genetic algorithm cleared every level
A policy that had only ever seen the simulator then jumped real spikes in the real game
results
A full official level cleared start to finish, learned from a human demonstration
Custom C++ mod bridges policy and game: state out, button press in, every frame
The lesson: the best algorithm depends on the problem, not the hype
A four-hour training job has to finish by morning. Which four hours? Carbon
intensity and electricity price both swing through the day, and the New York
grid publishes a day-ahead guess at each. GridShift learns where that guess
goes wrong, then picks the window.
how it works
The schedule is fixed before the day begins, so no feature is allowed to look inside it
Daylight saving handled by hand: the repeated autumn hour, the missing spring one
XGBoost with hand-built lags races a causal TCN given the raw week
Conformal intervals put a 90% band on every forecast, which the risk-aware policy schedules against
what it found
Moving the job off the first available window cut the carbon score by 8.3%
But the model did not beat the grid’s own forecast at picking windows. It was 0.72% worse
My selection rule chose the TCN; XGBoost was better on the holdout. Both are published
Moving the job between zones beat moving it between hours — 13.5% lower
CARBON −8.3%
DATA — 96,360 NYISO ZONE-HOURS INTERVALS — 94% COVERAGE AT 90% NOMINAL BEST POSSIBLE — −13.4%
You can only call 200 customers this week. Which 200? Ranking churn risk
isn’t an accuracy contest, it’s triage under a budget. RetentionLab turns
calibrated probabilities into a call list, then sizes the trial you’d need to
prove the calls actually worked.
how it works
PR-AUC picks the model, not accuracy — churners are only a quarter of the base
Calibration is fitted on the training split alone and judged on validation
The test set is opened once, after the model and the calibrator are frozen
Served as a typed API over a checksum-verified model, with drift monitoring
what it found
Calling the riskiest 20% reaches 143 of 280 churners. Calling at random reaches 56
Precision falls from 76% to 58% as the budget grows, which is the shape you plan around
Calibration helped, but barely — Brier 0.13919 to 0.13809. Reported either way
The data can’t prove the calls work, so it sizes the trial that could: 3,915 per arm
LIFT 2.55×
TOP 20% — 143 OF 280 CHURNERS TEST ROC-AUC — 0.855 SCORED ONCE — 1,057 HELD-OUT