This project aims to analyze a resume against a job description and provide an overall matching score along with some recommendations and actionable insights to better tailor the resume to the job described and suggest skills and courses to bridge the skill gap.
Resume-Job-Description-Ranking
├── src
│ ├── data_structures # Package containing data structures (Pydantic models) for resume, job description, and model response
│ │ ├── __init__.py # Package initialization
│ │ ├── jd_data.py # Pydantic model for structured data from job description
│ │ ├── resume_data.py # Pydantic model for structured data from resume
│ │ └── analysis_data.py # Pydantic model for analysis data generated by model as a structured output
│ │
│ └── distillation # Folder containing distillation logic
│ │ └──distill.py # Logic for distilling the model response to generate synthetic data
│ │
│ └── fine-tuning # Folder containing fine-tuning logic
│ │ ├── prepare_finetune_data.py # Logic for preparing the fine-tuning data
│ │ ├── upload_files.py # Logic for uploading the fine-tuning data to together.ai
│ │ └── create_finetune_job.py # Logic for creating the fine-tuning job using [together.ai API](https://docs.together.ai/docs/fine-tuning-quickstart) (Python SDK)
│ │
│ └── inference # Folder containing inference logic
│ │ ├── lora_inference.py # Logic for inference on a local GPU or any runtime using LoRA
│ │ └── rank_resume.py # Logic for ranking resumes using the fine-tuned model against job descriptions
│ │
│ └── utils # Package containing helper functions
│ │ ├── __init__.py # Package initialization
│ │ ├── get_teacher_response.py # helper function to get the response from teacher model using together.ai API
│ │ ├── get_resume_analysis.py # helper function to get the resume analysis data from the fine-tunedmodel using together.ai API
│ │ ├── parse_resume.py # helper function to parse the resume and convert it to markdown format
│ │ └── prompts.py # helper function that contains the prompts used for distillation and inference
│ │
│ └── evaluation # Folder containing evaluation logic
│ └── evaluate.py # Logic for evaluating the performance of the fine-tuned model or inference results
│
├── data # Folder containing datasets and results
│ ├── train.csv # Training dataset for distillation or synthetic data generation
│ ├── test.csv # Test dataset for testing
│ ├── results # Folder containing results from distillation and inference
│ ├── fine-tuning # Folder containing fine-tuning data
│ └── annotations.json # File containing annotations from two human annotators
├── requirements.txt # Project dependencies
└── README.md # Project documentation
-
Clone the repository:
git clone <repository-url> cd src
-
Create a virtual environment:
python -m venv venv source venv/bin/activate # On Windows use `venv\Scripts\activate`
-
Install the required dependencies:
pip install -r requirements.txt
Use
uv pip install -r requirements.txtfor faster installation if you already have uv installed.If not, run
pip install uvfirst. -
Set up environment variables: Set the API keys for the model of your choice. This code works with the APIs of OpenAI, Gemini, and Together.ai
Linux/macOS
export API_KEY="xxxxxxxx"
Windows
$env:API_KEY="xxxxxxxxx"
To run the code with default values for the baseline condition(without the self-refine step), execute the following command:
@misc{kadapala2025resume-jd-ranking,
title = {Knowledge Distillation and LoRA Fine-Tuning of LLMs for Structured Resume-Job Description Ranking},
author = {Nikhil Kadapala},
year = {2025},
howpublished = {\url{https://github.com/Nikhil-Kadapala/Resume-Job-Description-Ranking}}
}Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.
This project is licensed under the MIT License. See the LICENSE file for more details.