| title | Resume_modifier_agent |
|---|---|
| app_file | main.py |
| sdk | gradio |
| sdk_version | 4.44.1 |
This project leverages LangGraph to build an agentic pipeline that automatically parses job descriptions, selects relevant resume content, evaluates it via ATS, refines it if needed, and generates a LaTeX resume.
This system directly modifies my Overleaf project (as this is for my personal use). [If you want to use this please connect your Overleaf project repo to this and update your .env with OpenAI keys, Overleaf project ID and auth keys.]
The system uses multiple LangGraph agents (nodes) to perform specialized tasks. The workflow is automated, adaptive, and loops until an ATS-optimized resume is produced.
| Node (Agent) | Role / Function |
|---|---|
| JD Parser | Parses job descriptions (jd.txt) and extracts keywords to structure the state. |
| Resume Selector | Picks relevant experiences and projects from resume.json based on JD keywords. |
| Recruiter Evaluator | Scores the resume in an ATS-like manner; stores ats_score in state. |
| Refiner | Refines content, keywords, and formatting when ATS score < threshold; loops back to ATS Evaluator. |
| LaTeX Updater | Generates the LaTeX resume (main.tex) from the final state and optionally pushes to Overleaf. |
-
Entry Point:
JD Parser- Input:
jd.txt - Output: structured keywords and JD data in state.
- Input:
-
Resume Selection:
Resume Selector- Input:
statefrom JD Parser +resume.json - Output: selected experiences/projects in state.
- Input:
-
Recruiter Evaluation:
ATS Evaluator- Computes ATS score (
ats_score) for the current resume state.
- Computes ATS score (
-
Conditional Decision Logic:
- If
ats_score < 70and retries <MAX_RETRIES→ Refiner - Else → LaTeX Updater
- If
-
Refinement Loop:
Refiner → ATS Evaluator- Refiner improves resume content
- ATS Evaluator rescans
- Loops until score ≥ 70 or max retries reached
-
Final Node:
LaTeX Updater- Updates LaTeX template (
main.tex) with finalized resume - Optionally pushes to Overleaf via Git
- Updates LaTeX template (
graph TD
Start([Start]) --> A[JD Parser]
A --> B[Resume Selector]
B --> C[ATS Evaluator]
C -->|ATS score < 70 & retries < MAX| D[Refiner]
C -->|ATS score >= 70 or retries >= MAX| E[LaTeX Updater]
D --> C
E --> End([End])