
Fact-Checking Agent
A ReAct agent vs. a single-shot RAG baseline, on 58 real claims
An LLM agent that investigates a claim end to end - it plans its own fact-check, deciding what to search, which sources to trust, and when it has gathered enough evidence, then produces a verdict with a full reasoning trace. Evaluated head-to-head against a single-shot RAG baseline (same tools, one search, one answer, no loop) over 58 real claims with PolitiFact-sourced ground truth, to answer one question: does agentic autonomy earn its cost, or does it just add latency and expense without matching quality?
Highlights
- ReAct loop - reason, act, observe - over search, page fetch, source-credibility, and claim-comparison tools, capped at 15 steps and gated by a submit-verdict tool the agent can't call without evidence
- That guardrail is a double-edged sword: it drives the accuracy edge over the baseline, but also causes 19% of investigations to hit the step cap with no verdict, scored as automatically wrong
- Root-caused the stall: true claims get stuck most often (26.3%) because the guardrail demands disconfirming evidence that, for a true claim, may not exist to find
- ~485-domain source credibility and bias table backing the agent’s own source-assessment tool
- Resumable eval harness scoring accuracy, evidence-seeking behavior, cost, and failure attribution against real Anthropic and Tavily API calls, not mocks
Semantic Wikipedia Search
End-to-end semantic retrieval over 4.4M Wikipedia articles
A full retrieval stack built from the raw Wikipedia dump up: PySpark ingests and cleans the corpus, SentenceTransformers embeds individual paragraphs rather than whole articles, and a FAISS IVF-PQ index serves them behind a Gradio front end. The most useful result was a negative one - a carefully measured fine-tune failed to beat the off-the-shelf baseline, and instrumenting why turned up an inverted training signal that no amount of extra training would have fixed.
Highlights
- Paragraph-level embeddings served from a FAISS IVF-PQ index, with SQLite metadata written alongside it under a manifest so index and metadata cannot silently drift apart
- Retrieval pipeline: FAISS candidates → cosine rerank → per-article dedupe → heuristic rerank on title match and backlink authority
- Heuristic reranking alone lifted MRR from 0.38 to 0.79 - a larger gain than any change to the model itself
- Fine-tuning post-mortem found 40% of extracted paragraphs were structural noise and 66% of mined hard negatives were more relevant than the positives they were paired against
- Typer CLI and Pydantic config throughout, with a Dockerised Gradio app for the hosted demo
More Projects
AI Color Harmonizer
Palette extraction, mood inference, and harmony generation
Upload any image and get back its dominant palette, an inferred mood, and color harmonies tuned to match. Clustering runs in CIE Lab so perceptual distance is meaningful, near-identical clusters merge by ΔE, and every parameter is exposed live in the sidebar.
Highlights
- K-means in CIE Lab with silhouette-based K selection, ΔE cluster merging, and small-cluster pruning
- Rule-based mood inference - calming, energetic, cozy, minimal, dramatic, pastel, vibrant - with warm/cool and brightness tags
- Complementary, analogous, triadic, and split-complementary harmonies, adjusted to the image’s own saturation and brightness
- Accent detection scored on hue distance, saturation, and salience
- Grid, uniform, and SLIC superpixel sampling, plus JSON export of the full analysis
GLCM X-ray Classifier
Texture features vs. raw pixels on COVID-19 chest X-rays
Classifies chest X-rays as COVID-19, normal, or pneumonia, and asks whether 36 GLCM texture features can replace 262,144 raw pixels. They effectively can: the texture model lands within 0.56 points of the pixel baseline while shedding 99.99% of the dimensionality - the difference between a model that deploys and one that does not.
Highlights
- GLCM texture extraction benchmarked head-to-head against a flattened-pixel baseline
- Logistic Regression, Random Forest, SVC, and k-NN tuned with GridSearchCV and 5-fold cross-validation
- Roboflow API preprocessing to strip annotation artifacts from 603 source images
- Confusion matrices, per-class metrics, and feature-importance analysis for every model
ASL Fingerspelling Classifier
CNN recognition of the American Sign Language alphabet
A CNN trained to read the ASL alphabet from a raised hand: 26 letters plus "space" and "nothing," classified from 200x200 images. Right now this one is mid-refactor - the original single notebook is being split into a proper asl_classifier package with YAML-driven configs, which is why there is no live demo yet.
Highlights
- CNN with 3 convolutional blocks, dropout regularization, and a softmax head over 28 classes
- Manual hyperparameter search across filter counts, dense width, dropout rate, and network depth
- Baseline-vs-optimized model comparison with confusion-matrix and misclassification analysis
- Actively being restructured from a single notebook into an installable package with staged notebooks and YAML configs
- Planned: real-time webcam recognition and a Gradio/Streamlit demo
Interested in collaborating or have a project in mind?
Get In Touch