From RAG to an Agent — and the Guardrail That Failed Every Recency Question

Turning the scripted /chat pipeline into a tool-using agent, the layered guardrails that keep it honest, and a citation-verification bug my own eval harness caught — it false-failed every 'most recent paper' answer.

Migrating a Vector Store Off OpenSearch — by Measuring, Not Guessing

A provisioned OpenSearch cluster hit a real memory ceiling. A side-by-side evaluation — not a spec sheet — decided the move to Amazon S3 Vectors, cutting cost ~$120/mo to ~$0.20/mo with zero measured quality loss.

I Trained a Reranker in PyTorch. Cosine Similarity Beat It.

A two-stage retrieve-then-rerank experiment: an honest negative result on generic relevance, and a smaller, real win on recency ranking that shipped to production.

I Added Hybrid Search. It Made Things Worse.

An experiment with BM25 + vector search fusion on 624k arXiv abstracts. P@5 dropped from 0.98 to 0.68. Here's why, and when hybrid retrieval actually makes sense.

Adding Conversational Search — and the Problem That Came With It

Building a /chat endpoint on top of RAG exposed a retrieval problem that only appears once you start asking follow-ups. A two-stage query rewriting pipeline fixes it.

Building a Semantic Search Engine for arXiv ML Papers

How a simple question — can I search papers by meaning instead of keyword? — turned into a pipeline from Kaggle ingestion to a deployed RAG interface. The infrastructure decisions, the costs, and how /search became /rag.

Bash Functions for Yarn/NPM Projects That Will Save You Time.

Whether starting from a template or starter, you can save time by keeping some handy bash functions around to track down dependencies, find code references and more.

Docker Containers As Machine Learning Environments (Part One)

Why use containers at all? Containers can simplify your machine learning workflow and help you manage environments in a way that is easily configurable, shareable and fast.

Docker Containers As Machine Learning Environments (Part Two)

How to extend the official Python Docker image to create an ML image with specified dependencies. These practices could be extended to other kernels (e.g., R or Julia).