File size: 4,737 Bytes
8c1c0d8 d95323c 8c1c0d8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | # Shipping β resume / LinkedIn copy for Project 4
> Everything below is copy-paste ready. Quantified. Honest. No fluff.
---
## One-line resume bullet (tune length to your resume format)
**Preferred (single line, ~35 words):**
> Built a production-grade document-extraction service (invoices, receipts, SEC 10-Ks) β FastAPI + Pydantic + GPT-5 with schema-driven structured outputs, streaming SSE + async batch API, and a fine-tuning experimentation pipeline; 0.94 F1 on receipts at $0.012/doc, benchmarked 3 model tiers, deployed to Hugging Face Spaces.
**Alt (two lines, if you have room):**
> Built a production-grade LLM document-extraction service handling invoices, receipts, and SEC 10-K filings. FastAPI + Pydantic v2 + OpenAI structured outputs; React + R3F frontend; Docker + GitHub Actions CI.
> Benchmarked gpt-5-nano / mini / full on 10 records with a self-consistent P/R/F1 harness β nano is Pareto-optimal (0.896 micro F1, $0.012/doc). 96 tests. [Live demo](https://huggingface.co/spaces/aditya0103/structured-data-extractor) Β· [Code](https://github.com/adityapatel007-byte/structured-data-extractor).
---
## LinkedIn post (~230 words β the diagnose loop is the hook)
I just shipped a 3-week LLM project I actually want to talk about: an end-to-end
document extraction service (invoices, receipts, SEC 10-K filings β schema-validated
JSON).
The interesting part isn't the "it works" β it's the measurement.
Once the pipeline was live I built a small P/R/F1 evaluation harness. First run
on receipts: **micro F1 0.94, $0.012 per document, 6 seconds latency** on
gpt-5-nano. Solid baseline.
Then I benchmarked gpt-5-nano vs gpt-5-mini vs gpt-5 (full) at the same
reasoning-effort setting. Nano won on micro F1 β the bigger tiers only lead on
macro F1 (rarer fields). **Pareto-optimal at $0.36 total spend.** That's a
number I can defend in a review meeting.
10-Ks were the hard part. First live eval: F1 0.56 β well below receipts. The
per-field breakdown pointed at unit-of-measure ("in millions" β absolute
dollars) as the biggest miss. I wrote a targeted prompt fix with worked
examples, re-ran, watched the numbers.
Result: **revenue F1 doubled (0.25 β 0.50). total_equity went from 0.00 to 0.29.
Aggregate F1 flat β because filing_date regressed.**
That's the story I care about. Not "the model got better." The story is: I have
a harness that tells me exactly which of my hypotheses paid off and which
didn't, so v2.3 gets chosen from data instead of instinct.
**Stack**: FastAPI Β· Pydantic v2 Β· OpenAI structured outputs Β· React Β· Motion Β·
Three.js Β· Docker Β· GitHub Actions Β· Hugging Face Spaces.
Live: [huggingface.co/spaces/aditya0103/structured-data-extractor](https://huggingface.co/spaces/aditya0103/structured-data-extractor)
Code: [github.com/adityapatel007-byte/structured-data-extractor](https://github.com/adityapatel007-byte/structured-data-extractor)
#LLM #MLOps #Python #FastAPI #Hiring
---
## Two-paragraph project blurb (for a portfolio site / cover letter)
**Structured Data Extraction Service.** A production-grade LLM pipeline that
turns unstructured business documents β invoices, receipts, SEC 10-K filings β
into schema-validated JSON with per-field confidence, cost accounting, and a
reproducible evaluation harness. Built on FastAPI + Pydantic v2 + OpenAI
structured outputs; frontend in React + Motion + React Three Fiber ("Paper &
Ink" aesthetic, no generic AI-SaaS look); deployed to Hugging Face Spaces via
a single-container Docker build with a health-check-gated nginx front end.
**Why it's in my portfolio.** The eval harness is the point. On receipts, I
hit **micro F1 0.94 at $0.012/doc**, benchmarked three GPT-5 tiers and found
nano was Pareto-optimal (total spend $0.36 to definitively answer "which model
ships"). On 10-Ks, the first run came back at 0.56 β I diagnosed the failure
modes from the per-field table, made three targeted fixes, and watched some
of them pay off (revenue F1 doubled) and some regress (filing_date). That
iteration loop β hypothesis β intervention β measurement β is the shape of the
work I want to keep doing. 96 unit tests, GitHub Actions CI, section-based
chunking for long documents, and a genuinely usable UI.
---
## Suggested next social/portfolio drop (once v2.3 lands)
If two-pass extract-then-verify ships:
> Update on my document-extraction project β I shipped v2.3, a two-pass verifier
> that reads its own output and re-checks each money field against the source
> "in millions" header. Micro F1 went 0.56 β X.XX with zero new model calls
> per doc (verifier runs in the same completion). Details + code linked below.
Empty for now. Fill in when v2.3 numbers exist.
|