Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ResumeSight

A resume parser/ATS simulation to show you what the machine sees and give actionable quality and bias exposure mitigation insights

Python Streamlit Ollama

Setup

System requirements

  • python 3.9+
  • Ollama (for local LLM inference)

Step 1: Clone the Repository

git clone https://github.com/yourusername/ResumeSight.git
cd ResumeSight

Step 2: Create Virtual Environment

# create
python -m venv .venv

# activate
source .venv/bin/activate 

Step 3: Install Dependencies

pip install -r requirements.txt

Step 4: Download SpaCy Model

python -m spacy download en_core_web_sm

Step 5: Install and Start Ollama

Install Ollama

brew install ollama

# can also download from https://ollama.com/download

Start Ollama Server

ollama serve

Note: Keep this running in a separate terminal.

Download a Model

# recommended default
ollama pull phi4

# other options available in the UI
ollama pull phi3
ollama pull gemma2:2b
ollama pull llama3.2
ollama pull llama3.2:1b
ollama pull qwen2.5:1.5b
ollama pull mistral

Step 6: Run ResumeSight

streamlit run app.py

The app will open in your browser at http://localhost:8501

What is ResumeSight?

ResumeSight aims to helps job seekers/students better understand how their resume could be perceived by an ATS system. In particular the system aims to help users:

  • Identify information that could lead to discrimination (gender, age, race, political views, social class, etc.)
  • Get a score for their resume using a mathematical scoring system (0-100)
  • Get actionable feedback on resume quality and structure
  • Identify skill gaps for specific target roles
  • Visualize issues with highlighted PDF annotations

All analysis runs locally using Ollama and SpaCy, ensuring your resume data never leaves your machine and doesn't end up in a recruiter's hands before it's ready!


Architecture

  • streamlit monolith: app.py orchestrates upload, analysis, rendering, and UI toggles
  • pdf layer: utils/pdf_processor.py extracts text, finds coordinates, renders annotated pages to images
  • fast NER: utils/ner_processor.py uses spacy for explicit PII and nationality/age indicators
  • LLM layer: utils/llm_engine.py uses langchain-ollama for bias, quality, and skill-gap analysis with pydantic validation
  • scoring: utils/scorer.py applies deterministic checklist weights for quality and bias risk
  • evidence: utils/checklist_finder.py finds evidence for checklist items to box in the PDF
  • runtime: local-only, Ollama + SpaCy model, no external calls
ResumeSight/
├── app.py                     # streamlit UI and orchestration
├── requirements.txt           # Python dependencies
├── README.md                  # this file
├── spec.txt                   # project specification
├── assets/                    # static assets (images)
├── check_ollama.py            # connection checker script
└── utils/
    ├── __init__.py
    ├── pdf_processor.py       # PyMuPDF text/coords/render
    ├── llm_engine.py          # LangChain + Ollama prompts/parsing
    ├── scorer.py              # deterministic scoring
    ├── ner_processor.py       # spacy NER/regex PII detection
    └── checklist_finder.py    # evidence boxing for checklist items

Open-source code, changes, and new work

  • Imported libraries: streamlit, PyMuPDF (fitz), Pillow, spacy, langchain, langchain-ollama, ollama, thefuzz + python-Levenshtein, pydantic. All used under their standard licenses, no third-party application code was copied
  • Significant changes vs. base libs: none of these libraries were forked, all behavior customizations are done via code in this repo (parsing, scoring, PDF rendering, UI)
  • New code implemented here:
    • app.py: full streamlit UI, two-page flow, toggles, rendering paths, score display, bias/quality/skills tabs
    • utils/pdf_processor.py: PDF text extraction, coordinate search, server-side annotation rendering (boxes, highlights, underlines) to images
    • utils/llm_engine.py: structured LLM prompts for bias, quality, skills. As well as pydantic models, robust JSON cleaning/parsing, Ollama connectivity checks
    • utils/ner_processor.py: spacy NER with regex filters, tech blocklist, foreign location detection, age indicators
    • utils/scorer.py: deterministic scoring for quality and bias risk using checklist weights
    • utils/checklist_finder.py: logic for finding evidence snippets for checklist items to box on the PDF
    • check_ollama.py: basic cli tool to verify Ollama installation, server, models, and inference
    • README.md, assets/: documentation and diagrams; design_guidelines/dataflow images

Data Flow

Data flow

Design Guidelines

Design guidelines

Technologies


Support/Development

I intend to maintain this project in a runnable state for some time, if you encounter issues please document them in a github issue and I will do my best to address them promptly :)


Built as a Final Project for CMU's 05-318: Human-AI Interaction

About

A resume parser/ATS simulation to show you what the machine sees and give you actionable quality and bias exposure mitigation insights

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages