AI Engineer & Applied AI Engineer building production-grade multi-agent systems and decision-intelligence platforms. MEng CS @ University of Cincinnati (GPA 3.96).
A 4-agent business intelligence platform that routes questions across SQL, documents, and live web data — then cross-validates answers from different sources and tells you how confident it is.
Agents run in parallel via ThreadPoolExecutor. Fusion cross-validates SQL numbers against PDF text — within 1% = HIGH confidence, deterministic formatting (no LLM call). Results traced to AWS CloudWatch + local JSONL. 100,000-row Supabase DB · 43 PDFs (425 ChromaDB chunks) · 5 live product categories via 4 scraping techniques.
A "Q3 revenue" query returned a "Q4 Outlook" chunk ranked first — the Q4 section mentioned revenue more often, so cosine similarity put it top. Tried ChromaDB metadata filtering ($contains) — not supported. Tried filename-based filtering — missed data inside differently-named files.
✓ What workedHybrid BM25 + vector search. BM25 catches exact tokens ("Q3", "2024"), vector catches meaning. Accuracy jumped 33% → 100% on the benchmark set. The hybrid_search() function existed in the codebase but was never called — wiring it in was the fix.
All agent methods are synchronous. Full async rewrite = 500+ lines changed and introduced a Streamlit event loop conflict.
❌ multiprocessingCan't pickle LangChain objects. Each process re-initialises SentenceTransformer (80MB, 5–10s per process).
✓ ThreadPoolExecutorAll agents are I/O-bound. GIL doesn't block I/O threads. Zero agent code changes. ~60% latency reduction on multi-source queries.
When SQL and PDF numbers match within 1%, the Fusion agent formats the answer directly — 0 LLM calls, ~0.3ms. LLM synthesis only fires for conflicts or low-confidence cases. This made answers faster, more stable, and ~40% cheaper in token cost. The insight: the LLM is for resolving uncertainty, not for presenting facts that are already validated.
An ML-powered decision intelligence platform that transforms 534K e-commerce transactions into actionable retention, growth, and forecasting insights — in 30 seconds instead of 4 hours.
5 models: Random Forest churn (95% F1) · KMeans segmentation (k=5) · Isolation Forest anomalies · Prophet + ARIMA/ETS forecasting · RFM scoring. ML results stored back to DuckDB as queryable SQL tables — the entire team can query segments without touching Python. Groq LLM (LLaMA 3.3-70B) auto-generates 5 executive insight types from model outputs.
Initial Random Forest hit 100% accuracy on the test set. Immediately suspicious. Investigation found data leakage: recency features were computed using the full dataset before the train/test split, so the model saw future information during training.
✓ Fixed versionRecomputed recency features strictly from training-period data. Accuracy dropped to 95% F1 — still strong, now trustworthy. The lesson: a model that's too good is wrong, not exceptional. 95% on a clean split is worth more than 100% on a leaky one.
Traditional RFM requires manually setting thresholds and uses only 3 features. KMeans discovers natural clusters using 6 features: recency, frequency, monetary value, AOV, lifespan, quantity. This separated 18 ultra-VIP customers worth $96,614 each — customers RFM would have grouped with ordinary Champions.
k=5 rationalek=7 had a 5.5% better silhouette score. But k=2 → k=5 gave a 50% improvement. Diminishing returns. Five segments map cleanly to actionable personas: VIPs, Loyal, Potential Growers, At-Risk, Lost. Seven creates splits between similar groups that no marketing team will act on distinctly.
Every filter or refresh re-read and re-aggregated the full 534K row CSV. Dashboard cold load: 45 seconds. No columnar storage, no query cache, no optimisation.
✓ DuckDB + st.cache_dataDuckDB is OLAP-optimised — columnar storage, vectorised execution, embedded (zero server). Combined with @st.cache_data, repeat loads dropped from 45s to ~3s. 7.74× faster queries. ML results stored in DuckDB so the whole team can run SQL against segment data without Python.
Open to AI/ML Engineer, Applied AI Engineer, and Forward Deployed Engineer roles