CoolFace
Apppublic

sahithipaladi/local-ai-resume-parser-skill-extractor

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
App README

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

bash
pip install -r requirements.txt
streamlit run app.py

Deployment

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 local tag
  • โ€”Optional local binaries for full parity with the CI hooks: gitleaks and git-cliff

Setup

powershell
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-msg

Pull the default model:

powershell
ollama pull qwen2.5:3b

Run the Streamlit app:

powershell
streamlit run app.py

Run the API:

powershell
uvicorn api:app --reload

Run with Docker:

powershell
docker build -t talentlens-ai .
docker run --rm -p 8501:8501 talentlens-ai

Open 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:

powershell
ollama pull qwen2.5:3b
$env:TALENTLENS_USE_OLLAMA = "true"
streamlit run app.py

If 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:

text
Dockerfile
render.yaml

After 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:

  1. 1.Confirm the deployed URL is public and does not require reviewer authentication.
  2. 2.Add the URL to GitLab as LIVE_APP_URL under CI/CD variables.
  3. 3.Run the manual deploy_environment pipeline job.
  4. 4.Confirm GitLab lists production under Operate -> Environments with the same URL.
  5. 5.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:

powershell
pre-commit run --all-files
pytest

GitLab 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 title
  • โ€”format: Ruff format, Black, and isort checks
  • โ€”lint: pre-commit, Ruff, Flake8, Pylint, Vulture, and Pyupgrade
  • โ€”type_check: mypy
  • โ€”security: Bandit, dependency audits, secret scanning
  • โ€”test: pytest
  • โ€”coverage: pytest coverage report and Cobertura artifact
  • โ€”deploy: GitLab Environment registration from LIVE_APP_URL

Conventional Commits

Commit messages must use this format:

text
type(optional-scope): short summary

Examples:

text
feat(parser): support docx uploads
fix(ci): install dev dependencies
docs: add runner setup notes

Allowed 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/.