Self-host guide

Run Parselex yourself

Turn a resume PDF into structured JSON — no LLM, no API key, no per-resume cost. Everything runs on your own CPU. There's no hosted demo; clone the repo, download the model weights, and run the engine locally.

1

Clone the repo

Everything lives at github.com/karan-963/parselex.

git clone https://github.com/karan-963/parselex.git
cd parselex
2

Download model weights

Required either way (UI or API-only). Follow model_weights/README.md in the repo: download from Google Drive and drop files into model_weights/<stage>/. ~2.5GB total (fp32 + int8 checkpoints across 13 stages).

3

Run the engine

cd engine
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8000

Verify it's up:

curl localhost:8000/health   # {"status":"ok"}

This alone is enough for API-only usage — skip the UI step below if you just want JSON out.

4

(Optional) run the web UI

cd web
npm install
cp .env.local.example .env.local
npm run dev

Open http://localhost:3000 — redirects to /inference-v2. Upload a resume PDF, or click “run default” to try the bundled demo resume. FASTAPI_URL in .env.local points the UI at the engine (defaults to localhost:8000).

5

Parse a resume via the API

One HTTP call, blocks until the full 13-stage pipeline finishes, returns structured JSON:

curl -X POST "http://localhost:8000/inference-v2/parse" \
  -F "[email protected]"

Optional ?precision=fp32|int8 query param (default fp32). Response includes personal info, a summary, work history grouped by job, projects, and a skills list — each field individually labeled with a confidence score. Takes ~5–10s per resume on CPU.

Before you wire it into a real workflow

  • Trained on a limited, tech-resume-skewed dataset — expect more misclassifications on unusual layouts or non-English resumes.
  • Single-column resumes only; two-column layouts produce scrambled section/field assignment, not a clean error.
  • No overall resume score or ATS-match ranking — Parselex extracts and labels fields, nothing more.
  • Confidence scores flag low-confidence extractions for review, but a high-confidence field can still be wrong.