{"slug": "our-first-rag-pipeline-failed-on-day-one", "title": "Our First RAG Pipeline Failed on Day One", "summary": "A developer's RAG pipeline for MockEvalio failed on its first day when the embedding endpoint returned a 404, prompting a switch from Groq's nomic-embed-text-v1.5 to OpenAI's text-embedding-3-small. The fix also replaced silent failure with explicit exceptions. Additionally, the project pivoted to a self-hosted faster-whisper transcription service to reduce costs and external API dependencies.", "body_md": "At 15:53 on March 10 — the day after MockEvalio's second commit — I shipped a RAG system: job description upload with PDF, DOCX, and text extraction, a chunker, an embedding service, a vector search layer over pgvector, and a pipeline that turned an uploaded job description into five interview questions grounded in it. Seven hours later, the same evening, the step that turns text into embeddings stopped working.\n\nEarlier that day, the interview foundation had already been put in place; the afternoon work was about adding retrieval and voice capabilities on top of it. The shape of the new part: `RagJobDescription`\n\nand `RagJDChunk`\n\ntables in Postgres, with a 768-dimension vector column. Documents got split into 500–800 token chunks with 100 tokens of overlap. Each chunk got embedded and stored. A search step pulled back the closest chunks by cosine similarity, cached in Redis. A generation step combined those chunks with a user's profile and asked an LLM for five questions. The embedding step — the part that turns a chunk of text into that 768-dimension vector — called Groq's `nomic-embed-text-v1.5`\n\nendpoint.\n\nAt 22:57, the embedding endpoint returned a 404. The commit that fixed it recorded this at the time: the endpoint stopped responding as expected. That's the fact the evidence supports, and it's where I'm stopping — I don't know whether this was a provider-wide change, a deprecation, something specific to how the pipeline was calling it, or something else. I didn't monitor for this specifically before it happened, and I can't say now whether it was foreseeable.\n\nSwitching the embedding provider restored the pipeline. The change itself was small — 17 lines in one file: Groq's endpoint and model swapped for OpenAI's `text-embedding-3-small`\n\n, same 768-dimension output preserved through OpenAI's own `dimensions`\n\nparameter. That's the fix that got the pipeline working again at that point in the project. It isn't a claim that embedding-provider availability stopped being a dependency — whatever provider sits behind that call is still something the system relies on staying up and unchanged, and nothing about this fix proves that won't happen again with a different provider.\n\nOne more thing changed in the same diff, not planned separately: the old code's failure behavior was silent. If the API key was missing, it logged a warning and returned an array of zero-vectors — no error, just embeddings that would quietly corrupt every similarity search built on top of them. The new code throws an explicit exception instead. That improvement fell out of chasing the 404, not out of a dedicated reliability pass.\n\nSix minutes apart that evening, two things happened to voice transcription. First, OpenAI's Whisper API went in as the primary transcription path, with Groq's Whisper as a fallback. Then, a second commit added a self-hosted transcription service instead — `faster-whisper`\n\nbehind FastAPI, running as its own Docker container — and made that the default, with the cloud APIs demoted to fallback. The self-hosted service's own source comment states the reason directly: \"minimal cost, no external API calls.\" I'm treating that as the reason that's actually documented, not necessarily the whole reason — it's possible other factors played into a decision made that quickly, and I don't have evidence either way beyond what the code itself says.\n\nA few things I'm leaving open rather than filling in: why pgvector specifically, over other vector stores. Why Groq was the first choice for embeddings at all, given Groq's more established strength is inference speed rather than embeddings. Whether cost was the complete reason for the Whisper pivot, or just the documented one. Why the four interview personas that shipped that day — Friendly Mentor, Strict FAANG, Startup, Behavioral — were the initial set chosen. And whether the embeddings 404 was something I'd anticipated as a risk, or a genuine surprise found by using the thing I'd just built.\n\nI also want to be precise about what the fix itself proves. It restored a broken pipeline on March 10. It didn't make embedding-provider availability someone else's problem — that dependency is still there, on whichever provider sits behind the call today.\n\nThat's what building the AI part of \"AI-powered interview evaluation\" actually required, once the scaffold from the day before existed: not a plan that survived contact with a live provider, but a system that broke within hours of being built, and stayed up because of a fix, not because the underlying dependency went away.", "url": "https://wpnews.pro/news/our-first-rag-pipeline-failed-on-day-one", "canonical_source": "https://dev.to/amitesh0512/our-first-rag-pipeline-failed-on-day-one-2na5", "published_at": "2026-08-15 14:20:42+00:00", "updated_at": "2026-08-15 14:42:55.882575+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "large-language-models", "developer-tools"], "entities": ["MockEvalio", "Groq", "OpenAI", "pgvector", "Redis", "Whisper", "faster-whisper", "FastAPI"], "alternates": {"html": "https://wpnews.pro/news/our-first-rag-pipeline-failed-on-day-one", "markdown": "https://wpnews.pro/news/our-first-rag-pipeline-failed-on-day-one.md", "text": "https://wpnews.pro/news/our-first-rag-pipeline-failed-on-day-one.txt", "jsonld": "https://wpnews.pro/news/our-first-rag-pipeline-failed-on-day-one.jsonld"}}