sahithipaladi/local-ai-resume-parser-skill-extractor
Local AI Resume Parser & Skill Extractor
An AI-powered Streamlit application that parses resumes, extracts skills, and provides structured insights using local AI models.
Features
- ๐ Upload resumes (PDF)
- ๐ค AI-powered resume parsing
- ๐ ๏ธ Skill extraction
- ๐ Structured output
- ๐ Runs locally without external AI APIs
Tech Stack
- Python
- Streamlit
- Ollama
- Sentence Transformers
- Scikit-learn
- PyMuPDF
- PDFPlumber
Run Locally
pip install -r requirements.txt
streamlit run app.pyDeployment
This project is deployed using Hugging Face Spaces with the Streamlit SDK.
TalentLens AI
TalentLens AI is an offline-first resume intelligence app. It extracts text from PDF/DOCX resumes, asks a local model to produce structured JSON, scores ATS readiness, compares the resume against a job description, and exports the result.
Features
- PDF and DOCX resume upload
- Local text extraction with PyMuPDF and python-docx
- Local LLM parsing through Ollama or llama.cpp-compatible models
- ATS scoring, job-description matching, and improvement feedback
- Streamlit UI and FastAPI API entry points
- SQLite persistence for parsed resume data
- JSON report export
- Offline fallback parsing when Ollama is unavailable
- Local-first quality gates for formatting, linting, typing, tests, dependency audit, secret scanning, and Conventional Commits
- AGPLv3 licensing and repository health files required for compliance checks
Requirements
- Python 3.11 or newer
- A local Ollama runtime for LLM parsing
- A local model such as
qwen2.5:3b - GitLab Runner registered on your machine with the
localtag - Optional local binaries for full parity with the CI hooks:
gitleaksandgit-cliff
Setup
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt -r requirements-dev.txt
pre-commit install
pre-commit install --hook-type commit-msgPull the default model:
ollama pull qwen2.5:3bRun the Streamlit app:
streamlit run app.pyRun the API:
uvicorn api:app --reloadRun with Docker:
docker build -t talentlens-ai .
docker run --rm -p 8501:8501 talentlens-aiOpen http://localhost:8501.
Offline Operation
TalentLens AI does not require cloud APIs or network connectivity at runtime. By default, the Streamlit app and FastAPI endpoint use local PDF/DOCX text extraction, heuristic profile/skill/section parsing, ATS scoring, job-description matching, and JSON export.
Ollama is optional. To enable local LLM parsing for richer extraction, run Ollama locally and set TALENTLENS_USE_OLLAMA=true before starting the app:
ollama pull qwen2.5:3b
$env:TALENTLENS_USE_OLLAMA = "true"
streamlit run app.pyIf Ollama is not enabled or not running, the app still demonstrates the core workflow offline. No resume data, extracted text, model responses, databases, reports, or uploads should be committed to git.
Deployment
This project is a web application. A Dockerfile and Render blueprint are included for public deployment:
Dockerfile
render.yamlAfter deploying to a public host, copy the live URL into a GitLab CI/CD variable named LIVE_APP_URL. Then run the manual deploy_environment job in GitLab CI. That job creates or updates the GitLab Environment:
- Environment name:
production - Environment URL:
$LIVE_APP_URL
Reviewers should use the GitLab environment URL under Operate -> Environments.
Phase 2 Review Checklist
For final submission, complete these GitLab-hosted steps after the public deployment exists:
- Confirm the deployed URL is public and does not require reviewer authentication.
- Add the URL to GitLab as
LIVE_APP_URLunder CI/CD variables. - Run the manual
deploy_environmentpipeline job. - Confirm GitLab lists
productionunderOperate -> Environmentswith the same URL. - Test the core workflow from that URL: upload a PDF/DOCX resume, optionally paste a job description, review ATS/match results, and download the JSON report.
The CLI/package and mobile APK release requirements are not applicable to this repository's primary submission type. TalentLens AI is submitted as a web application.
Quality Gates
The repository defines more than ten local checks through pre-commit and GitLab CI:
- trailing whitespace
- end-of-file normalization
- YAML validation
- TOML validation
- JSON validation
- merge-conflict detection
- large-file protection
- mixed-line-ending normalization
- debug statement detection
- private-key detection
- requirements sorting
- Black formatting
- isort import sorting
- Ruff linting
- mypy type checking
- Pylint linting
- Flake8 linting
- Vulture dead-code analysis
- Pyupgrade syntax modernization
- pytest with coverage
- Bandit static security scan
- Semgrep static security scan
- detect-secrets secret scan
- Gitleaks secret scan configuration
- pip-audit dependency scan
- Safety dependency scan
- Git-Cliff changelog configuration
- Conventional Commit validation
Run everything locally:
pre-commit run --all-files
pytestGitLab CI
.gitlab-ci.yml is configured for a local GitLab Runner using the local tag. Register a runner on the same machine and give it that tag, or update the tags value in the CI file to match your runner.
Pipeline stages:
validate: metadata build, dependency consistency, semantic commit titleformat: Ruff format, Black, and isort checkslint: pre-commit, Ruff, Flake8, Pylint, Vulture, and Pyupgradetype_check: mypysecurity: Bandit, dependency audits, secret scanningtest: pytestcoverage: pytest coverage report and Cobertura artifactdeploy: GitLab Environment registration fromLIVE_APP_URL
Conventional Commits
Commit messages must use this format:
type(optional-scope): short summaryExamples:
feat(parser): support docx uploads
fix(ci): install dev dependencies
docs: add runner setup notesAllowed types are build, chore, ci, docs, feat, fix, perf, refactor, revert, style, and test.
Privacy
TalentLens AI is designed to run without cloud LLM APIs. Resume files, extracted text, model responses, SQLite data, and generated reports stay local unless you explicitly move or publish them.
Compliance Files
The repository includes LICENSE, CONTRIBUTING.md, USER_MANUAL.md, AGENTS.md, SECURITY.md, CODE_OF_CONDUCT.md, .editorconfig, .env.example, Dockerfile, .dockerignore, .gitlab-ci.yml, .pre-commit-config.yaml, cliff.toml, .gitleaks.toml, .semgrep.yml, and Spec-Kit files under .specify/ and specs/.
