I build production-grade LLM systems — agents that call tools reliably, retrieval pipelines that are measured before they ship, and the guardrails that keep them from quietly spending your budget.
The through-line: I write the boring parts well. Retries, fallbacks, deterministic evals, append-only ledgers, and tests that run offline — the parts that decide whether an AI feature survives contact with production.
Agents that hold up under failure. Tool-calling loops with retries,
circuit breakers, provider fallback, and structured observability — not
prompt-in-a-loop.
→ agent-workflow-kit
— LLM agents with tool calling, multi-step workflows, and a reliability
layer (retries, timeouts, circuit breaker, provider failover). 70 offline
tests, ruff-clean, CI on 3.12/3.13/3.14.
RAG you can measure. A dependency-light retrieval-augmented pipeline
with chunking, embeddings, a flat vector store, extractive generation with
citations, and a built-in evaluation harness (Recall@k, MRR, answer hit-rate)
so you know how it's doing before the client does.
→ rag-pipeline
— offline eval ships in the box. Demo: R@1 = 1.00, MRR = 1.000.
Cost control for LLM workloads. Per-1M-token pricing with prompt-cache
discounts, an append-only JSONL ledger, and a budget guard that warns at
80% and blocks on overrun (total, per-model, and daily limits). The
boring, reliable answer to "what is this costing, and what happens when
it goes over?"
→ llm-cost-guard
— parser → ledger → guard → report. 65 offline tests.
| Language | Python 3.12 – 3.14 |
| LLM layer | OpenAI-compatible APIs (OpenAI, Azure, vLLM, Ollama, LiteLLM) |
| Data | pydantic models, JSONL persistence, flat cosine vector stores |
| Quality | pytest (offline, deterministic), ruff, GitHub Actions CI |
| Infra | self-hosted on an RTX 3090 (24 GB) for local inference + evals |
- Test-first on the important paths. Every repo above is 60–70 offline tests, no network, no secrets, deterministic.
- Offline demos. Each project has a
democommand that runs end-to-end on your machine with no API key. - Small, replaceable pieces. Providers, embedders, and generators are interfaces — swap a model or a vector store without rewriting the pipeline.
- The ledger never lies. Accounting and enforcement are separated, so spend stays auditable and replayable while policy stays swappable.
Building and shipping agent + RAG systems for clients. If your LLM feature needs to be reliable, measurable, and on budget — that's my lane.
Python · LLM agents · RAG · cost engineering