Numan Farukh

AI engineer building systems where the model reads and software decides.

I'm Numan Farukh. I build LLM agents, retrieval and document-intelligence systems, ship them to AWS, and measure them with tests and evaluation gates. More than eight years of full-stack engineering sit underneath. I work remotely, with EU and US overlap.

Projects

FreightLens

Multi-tenant freight document intelligence. Deployed to AWS for testing, then torn down. All data is synthetic.

Upload a carrier quote and an invoice, and FreightLens reads the charges, checks the arithmetic and flags what needs a person. It follows one rule: the LLM only copies text out of messy documents, and plain code decides everything else.

  • A LangGraph pipeline with a repair loop. When the charge lines don't add up to the printed total, the extractor is re-prompted with the computed mismatch, never with the answer, for at most three reads.
  • A review step that pauses and resumes. The graph saves its state in Postgres and waits for a person to approve, correct or reject, so a paused review survives a server restart.
  • Tenant isolation in the database itself: row-level security on every table, composite (tenant_id, id) foreign keys and JWT auth, not only checks in application code.
  • Reconciliation in plain code with integer cents. It finds seven kinds of discrepancy, and when it can't tell which quote an invoice belongs to, it stops and asks instead of guessing.
  • A quality gate in CI. Every push runs the tests and the evaluation harness against a throwaway Postgres, and fails if any metric drops below its threshold.
  • Deployed with Terraform to ECS Fargate, ALB, RDS and S3, verified, then torn down, with a one-command redeploy.

Example: a misread total, caught by code

Ocean freight3,200.00
Terminal handling650.00
Documentation345.00
Total printed on the invoiceUSD 4 195.00
  1. Model

    Reads the total as 195.00.

  2. Code

    The lines add up to 4,195.00, not 195.00. Mismatch.

  3. Code

    Sends the model a hint made of facts only: the lines add up to 4,195.00.

  4. Model

    Reads the total again: 4,195.00.

  5. Code

    4,195.00 matches the lines. The check passes.

The repair loop in FreightLens, with simplified example numbers based on a synthetic test case. After three reads without a match, the document goes to a person.

Results on 90 synthetic documents

Charge extraction F1
78.5% to 100%
Invoices with a wrong total that were flagged
5 of 5
False alarms on correct invoices
0 of 40
Prompt-injection invoices that leaked into the output
0 of 7
Tests run on every push
235
Cost of a full evaluation run
about $0.03

The documents are synthetic: fictional carriers, generated by my own code with the correct answers saved, so every extracted field can be scored automatically. The scores are the baseline that the CI quality gate protects on every push.

Flow of the FreightLens agent: parse, classify, route, then extract the quote or invoice, validate the numbers with a re-read loop of up to three reads, human review that pauses with state saved in Postgres, and a separate code-only comparison with the quote.
How the agent works. Amber steps call the model and only read. Teal steps are plain code. Purple is a person.

TrailPeak Support Agent

RAG agent for a fictional outdoor-gear store. Deployed to AWS with Terraform and CI/CD.

A support chat that answers from the store's documents and live tools, never from the model's memory, and shows its work: the documents it searched, the stock checks it ran and the sources behind each answer.

  • A ReAct agent over retrieval and live price and stock tools, streamed to the browser over Server-Sent Events so users watch each step as it happens.
  • Follow-up questions on a stateless server: the browser sends the last three exchanges, and the app rewrites each follow-up into a standalone question before searching.
  • Photo questions: GPT-4o vision describes the image and the description drives the search. Photos are checked by file signature, treated as data, and never cached or stored.
  • Cost and abuse controls: a Redis semantic cache, Redis-backed rate limiting load-tested with Locust, per-request cost tracking, and CloudWatch alarms proven with a deliberate fire drill.
  • Three containers on ECS Fargate, built with Terraform and GitHub Actions. The OpenAI key lives in Secrets Manager and reaches the app through an IAM task role.
  • An evaluation harness with regression detection and prompt A/B testing, traced in LangSmith.

Latest evaluation on the golden set

Faithfulness
0.93
Answer relevancy
0.96
Context precision
1.00
Context recall
0.80
Tests
143

Scores come from the project's golden question set about a fictional store. I use them to catch regressions and compare prompts, not as a benchmark.

TrailPeak web UI: a customer attaches a photo of an orange tent and asks, Do you have something like this? The trail shows the photo being read and the store documents searched, and the answer recommends the AlpinePeak 2-Person Tent. The follow-up, yes what's the price, adds a live stock check and a product card showing $329.00 in stock, with source chips under each answer.
A photo question and a follow-up in the web UI. It shows each step the agent takes (reading the photo, searching the store documents, checking live stock) and the sources behind each answer.

More projects

InfoBud lead enrichment

Client proof of concept, code private

Built the full stack of a lead-enrichment and campaign-matching platform for 100Days. It imports leads from CSV, scrapes each company's website with Firecrawl, extracts structured company data with an LLM, and scores each lead against campaign profiles. Enrichment runs as async TaskIQ workers on Redis with LangGraph workflows, and progress streams to a React UI over Server-Sent Events.

Python, FastAPI, LangGraph, LangChain, Groq, Firecrawl, TaskIQ, Redis, PostgreSQL, React, Docker.

Magnifico voice agent

In progress, private repository

A real-time phone sales agent for a motorcycle leather-gear manufacturer. It answers calls on a Telnyx number and holds a live speech-to-text, LLM and text-to-speech conversation, with natural turn-taking and barge-in. The persona discloses that it is an AI, never quotes prices or lead times, and hands quotes to the sales team. Next: lead capture through tool calling and catalogue retrieval.

Python, Pipecat, Deepgram, OpenAI, Telnyx, Docker.

Automated examination evaluation system

Final-year project, 2020

Generates candidate-specific exam papers and grades multiple-choice answer sheets from scans using OpenCV, OCR and bubble-sheet detection. Grading was distributed with PySpark across 50+ lab computers, which returned results for 5–7k entry-test candidates in 2–3 hours instead of days. It matched manual grading almost exactly on past batches, with damaged sheets sent to a person, and graded 20,000+ papers.

Python, OpenCV, OCR, PySpark.

Experience

  1. Nov 2024 – now

    PodLead, LLM agent training data for Google Gemini

    NeuralFlex, remote contract

    Lead about 12 ML engineers who design agentic tool-use scenarios: a realistic user query, a case description, and initial and final assertions that define the expected end state. Each scenario is implemented as a Colab notebook that drives Slack and Google Docs APIs in a mock environment. I also co-build and update the automated reviewer that checks every scenario against the project guidelines before human sign-off. I joined in May 2024 as an ML engineer and was promoted after six months.

  2. Aug 2025 – Jan 2026

    Software engineer, contract

    100Days, Germany, remote

    Built the InfoBud lead-enrichment proof of concept end to end, from the Python and LangGraph workers to the React UI and the integration tests.

  3. May 2022 – Feb 2024

    Full stack developer

    100Days, Germany, remote

    Built core features of a German cash-desk SaaS with Django, Django REST Framework and Vue/Nuxt in a team of six, integrated the Fiskaly API for fiscal compliance, and wrote reusable DRF ViewSets and mixins shared across apps.

  4. Nov 2020 – Apr 2022

    Senior software engineer, contract

    Lemonade Stand, Batchbud, Loud Now Agency, N3 Digital and Drip Marketing, United States and Serbia

    Five successive engagements building client products with Django, GraphQL, Vue/Nuxt and Next.js: an e-commerce store and WordPress migration on Saleor, payments and JWT authentication, onboarding, chat and notifications, and Google API integrations, on AWS EC2 and S3.

  5. Mar 2018 – Oct 2020

    Full stack web developer

    FamCodings, Pakistan

    Built a large customizable e-commerce platform for a startup with live messaging and Google integrations, and rewrote a social-media site from Laravel to Django.

  6. 2016 – 2020

    BSc Information Technology

    Punjab University College of Information Technology, Lahore

    CGPA 3.90 out of 4.00, batch topper, multiple scholarships.

Skills

AI and LLM
RAG, hybrid search (BM25 and vectors with reciprocal rank fusion), cross-encoder re-ranking, ReAct agents, LangGraph, LangChain, structured output, vision models, evaluation (LLM-as-judge, regression and A/B tests), LangSmith, prompt-injection defence, semantic caching, real-time voice agents, OpenCV.
Backend
Python, FastAPI, Django and DRF, GraphQL, Celery, PostgreSQL (row-level security), Redis, TaskIQ, PySpark.
Frontend
TypeScript, React and Next.js, Vue and Nuxt.
Cloud and DevOps
AWS (ECS Fargate, ALB, RDS, ECR, S3, IAM, Secrets Manager, CloudWatch, Lambda), Terraform, Docker and Compose, GitHub Actions, Locust, Kubernetes basics with Minikube.

About

Portrait of Numan Farukh

I'm an AI engineer in Lahore with more than eight years of full-stack work behind me, for clients in the US, Germany, Canada and Serbia. Since 2024 my focus has been LLM systems: agents, retrieval, document extraction, and the evaluation that tells you whether they work.

At NeuralFlex I lead about 12 ML engineers designing and evaluating agentic tool-use data for Google Gemini. The projects above are where I practise the same discipline on my own: let the model read, let code decide, and measure everything.

I'm open to remote roles. I work from UTC+5 with flexible hours and can overlap with EU and US working hours.

Contact

If you're hiring for an AI engineer role, or want to talk about a project, email is the quickest way to reach me.

numanfarukh22@gmail.com