Levi's RAG — AI Due Diligence Copilot

Solo project, inspired by findings from a prior team analytics practicum report · 2026 · deployed

#llm#rag#deployed#python#nlp

Key Result

85.0% Recall@10 (51/60) on the retrieval evaluation set, with 63/64 tests passing.

Overview

Doing quick, evidence-backed due diligence on a public company usually means manually digging through dozens of dense SEC filings to find one number, or trusting a generic chatbot’s answer with no way to verify where it came from. This tool sits in between: it answers a natural-language financial question about Levi Strauss & Co. (SEC CIK 0000094845) using only its official 10-K, 10-Q, and 8-K filings, and shows exactly which filing, section, and sentence the answer came from.

The idea grew directly out of a BUAN 6390 Analytics Practicum equity research report (Group 7, May 2026) that analyzed a proposed $50M strategic transformation for Levi Strauss, including several market-trend and strategic claims about the brand. Reports like that make claims that sound plausible but aren’t always checked against the company’s own primary evidence — this project tests that idea directly, as an individual build.

Target user: an equity research associate or analyst doing single-name due diligence, who needs a fast answer but still has to trust and verify it before using it in real work.

Architecture

SEC EDGAR filings (10-K, 10-Q, 8-K)
  -> Document parsing & metadata-aware chunking
  -> Retrieval index
  -> Query -> retrieval -> LLM answer generation
  -> Evidence-tier classification
  -> FastAPI backend (Render) <-> Next.js frontend (Vercel)

Every answer is tagged with one of four evidence tiers, so the user knows how much weight to put on it:

  • Verified-from-filing — stated directly in a filing
  • Management-qualitative-statement — said by management, not a hard number
  • Third-party-benchmark — sourced from an external report or vendor claim
  • Model-inference — the system’s own calculation or conclusion

Results

Retrieval quality: 85.0% Recall@10 (51/60) on the evaluation set. Test suite: 63/64 passing. The app and API are both live — GET /health and POST /query on the backend, full UI on the frontend.

Code Highlights

The evidence-tier classifier is the load-bearing safety feature: instead of letting the LLM present every answer with equal confidence, each response is routed through a tier check before being shown, so a model-inferred estimate is never presented with the same weight as a number stated directly in a 10-K.

What I'd Improve

Evidence tiering is the core safety mechanism here, but it depends on the retrieval step surfacing the right chunk in the first place; the 15% recall gap is where a wrong or missing citation could still slip through, so expanding the evaluation set and tightening chunk-level retrieval is the highest-leverage next step.