Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JD ATS Analyzer

A RAG-powered job description analysis and ATS scoring system built with LangGraph, Google ADK, and Groq (free tier LLMs only).

Upload your resume and job descriptions, then ask the AI agent to score your ATS match, find missing keywords, and rewrite your bullet points in the language of the JD.


Architecture

┌─────────────────────────────────────────────────────────┐
│                    Frontend (HTML/JS)                   │
│         Upload JDs + Resume  |  Chat Interface          │
└───────────────────┬─────────────────────────────────────┘
                    │ HTTP
┌───────────────────▼─────────────────────────────────────┐
│               FastAPI Backend                           │
│   /upload/jd  /upload/resume  /chat  /jds               │
└───────────────────┬─────────────────────────────────────┘
                    │
┌───────────────────▼─────────────────────────────────────┐
│           Google ADK Agent Layer                        │
│   Tools: analyze_ats_match | list_jds | answer_question │
│   Fallback: Direct LangGraph agent (no ADK key needed)  │
└───────────────────┬─────────────────────────────────────┘
                    │
┌───────────────────▼─────────────────────────────────────┐
│              LangGraph Stateful Graph                   │
│                                                         │
│  [classify] ──► [retrieve] ──► [score_ats] ──► [format] │
│      │                                                  │
│      └──────► [retrieve_qa] ──► [respond_qa]            │
│      │                                                  │
│      └──────► [respond_general]                         │
└───────────────────┬─────────────────────────────────────┘
                    │
┌───────────────────▼─────────────────────────────────────┐
│              RAG Layer                                  │
│   ChromaDB (persistent) + SentenceTransformers          │
│   (all-MiniLM-L6-v2 — runs locally, no API key)         │
│                                                         │
│   Collections: job_descriptions | resumes               │
└─────────────────────────────────────────────────────────┘
                    │
              Groq / Gemini
         (free tier LLM inference)

Key Design Decisions

Classifier Node

The LangGraph graph begins with a classifier node that categorises every query before routing. This makes the routing explicit and testable — instead of relying on prompt design to determine flow, each query type follows a predictable path with a single clear responsibility per node.

Query types: ats_score | jd_question | resume_question | general

Free-Tier LLMs Only

  • Groq (llama3-8b-8192) — default, very fast, free tier
  • Google Gemini (gemini-1.5-flash) — free tier, used by ADK agent
  • Switch via LLM_PROVIDER=groq|google in .env

Local Embeddings

sentence-transformers/all-MiniLM-L6-v2 runs entirely locally — no embedding API costs, no key required.

Google ADK as Orchestration Layer

The ADK agent wraps the LangGraph pipeline as a tool-using agent, adding session management and multi-turn conversation. If GOOGLE_API_KEY is not set, the system falls back to a direct LangGraph agent with identical capability.


Setup

git clone https://github.com/RitikaHiremath/jd-ats-analyzer
cd jd-ats-analyzer

python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate

pip install -r requirements.txt

cp .env.example .env
# Edit .env and add your API keys

API Keys (both free)


Run

python run.py
# Open http://localhost:8000

Usage

1. Upload a Job Description

  • Click "Upload JD" in the sidebar
  • Enter company name and role
  • Supports PDF, TXT, DOCX

2. Upload Your Resume

  • Click "Upload Resume"
  • Replaces any previously uploaded resume

3. Chat with the Agent

Example queries:

Score my resume against all uploaded JDs
What keywords am I missing for the Bosch role?
Rewrite my bullet points to match the SAP JD language
What are the must-have skills for the Google role?
Should I apply to JetBrains?

API Endpoints

Method Endpoint Description
POST /upload/jd Upload and index a JD
POST /upload/resume Upload and index resume
POST /chat Chat with ATS agent
GET /jds List indexed JDs
DELETE /session/{id} Clear conversation history
GET /health Health check

Tech Stack

Layer Technology
Graph orchestration LangGraph 0.2
Agent framework Google ADK
LLM inference Groq (llama3-8b) / Gemini 1.5 Flash
Vector DB ChromaDB (persistent)
Embeddings sentence-transformers (local)
Backend FastAPI + Uvicorn
Document parsing pypdf, python-docx
LangChain integration langchain-groq, langchain-google-genai

Project Structure

jd-ats-analyzer/
├── backend/
│   ├── rag/
│   │   └── core.py          # Document ingestion + retrieval
│   ├── graph/
│   │   ├── ats_graph.py     # LangGraph state machine
│   │   └── llm.py           # LLM abstraction (Groq / Gemini)
│   ├── agents/
│   │   └── adk_agent.py     # Google ADK agent + fallback
│   └── api/
│       └── main.py          # FastAPI app
├── frontend/
│   └── index.html           # Single-file UI
├── run.py
├── requirements.txt
└── .env.example

Author

Ritika Hiremathgithub.com/RitikaHiremath | linkedin.com/in/ritikahiremath

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages