Synthetic Data Generation Pipeline
I built a pipeline that generates synthetic training data, validates it with an LLM judge, and self-corrects until every record passes. Started with a 20% failure rate, ended at zero.
Engineering Manager · Principal Applied AI Engineer I lead AI engineering in a regulated enterprise and build the systems myself.
I spent the last two decades leading engineering teams at State Street, Centene, and EY. Building products that handle real money, real patient data, and real regulatory scrutiny. The kind of work where downtime means someone's claim doesn't get processed and a bad deployment means financial loss.
Today I am the lead AI engineer on State Street's Enterprise Knowledge Agent, a RAG system on AWS Bedrock with Claude models, orchestrated in LangGraph, over product documentation, runbooks, and release notes. It returns cited answers. Releases are gated on golden-set evaluation in CI. The AI governance committee approved it and it is in pilot with internal and customer users. Alongside that, I have built 9 AI systems of my own covering RAG pipelines, embedding fine-tuning, and multi-agent orchestration. Each one has evaluation frameworks, architecture decision records, and metrics I would trust in a code review.
Leadership
Technical
What I'm building
I built a pipeline that generates synthetic training data, validates it with an LLM judge, and self-corrects until every record passes. Started with a 20% failure rate, ended at zero.
I tested 16 RAG configurations and found that semantic chunking + OpenAI embeddings + Cohere reranking gets 0.747 Recall@5 on structured Markdown docs. This is how I got there.
I fine-tuned all-MiniLM-L6-v2 on 1,475 dating profile pairs and flipped Spearman from -0.22 to +0.85. LoRA got 96.9% of that using 0.32% of the parameters.
I generated 250 synthetic resumes across 5 fit levels, labeled them for 5 failure modes with zero LLM calls, and found that writing template choice accounts for a 66-percentage-point difference in failure rates (chi-squared=32.74, p<0.001).
I built a RAG system from scratch with no LangChain, tested 46 configurations across 5 chunking strategies, 4 embedding models, and 3 retrieval methods, and found that heading-aware chunking + OpenAI embeddings hits NDCG@5 = 0.896 and Recall@5 = 1.0.
Multi-agent system that answers CS questions in the voice of Linus Torvalds or Greg Kroah-Hartman, with a deterministic gate that declines rather than hallucinates. 78.6% and 81.0% in-domain deliver rates, 11 of 12 out-of-domain queries correctly refused, zero hallucinations.
Choosing a groundedness metric when no leaderboard covers your corpus, every candidate fails your gates, and the bias you ship has to be documented instead of hidden.
10 min read
I was two days from rewriting a working system to fix a deficit that did not exist. Cosine similarity was scoring vocabulary reuse, not truth.
7 min read
My ship gate came back 0 for 14, three passes, zero variance. The thresholds existed only as text inside a prompt, and the LLM reading them could not do arithmetic.
9 min read
More about my background