Files
Table with columns: File, Use| File | Use |
|---|
recruitsheriff-lora-f16.gguf | adapter for llama.cpp (66 MB), used by the app |
adapter_model.safetensors, adapter_config.json | the same adapter for PEFT / transformers |
loss_curve.png | training and validation loss |
Run with llama.cpp (base GGUF from unsloth/Qwen3-4B-Instruct-2507-GGUF):
llama-server -m Qwen3-4B-Instruct-2507-Q4_K_M.gguf --lora recruitsheriff-lora-f16.gguf -c 8192
The app sends a JSON schema with each request, so the answer is always valid JSON.
Training
- Three tasks: job description -> requirement checklist, resume -> verdicts with quotes, verdicts -> interview questions.
- Data: 100 Indian job descriptions and 780 synthetic resumes (from strong matches to
mismatches, plus tricky ones) graded by a larger teacher model (DeepSeek V4 Flash): 1,128 examples, 1,063 for
training and 65 for validation. No real resumes.
- QLoRA with Unsloth: r=16, alpha=32, 2 epochs, lr 2e-4 cosine, batch 1 x 8, max length 4096, loss on answers only.
88 minutes on one RTX 4060 laptop GPU (8 GB). Validation loss 0.483 -> 0.430 and never went up.
Results
Held-out test set: 10 job descriptions the model never saw, 58 synthetic resumes, labels from the teacher and
then reviewed by hand.
Table with columns: System, Verdicts correct, Fake quotes, Score error (points), Fit label correct, Ranking (Spearman)| System | Verdicts correct | Fake quotes | Score error (points) | Fit label correct | Ranking (Spearman) |
|---|
| This adapter | 92% | 2% | 3.1 | 97% | 0.93 |
| Qwen3-4B base, same prompt | 80% | 6% | 9.4 | 78% | 0.83 |
| Teacher (upper bound) | 99% |
- Bias check: swapping only the candidate's name (gender or community) moved scores by -0.3 and -0.1 points on
average, so no direction; single borderline resumes moved by up to 11 points, and 1 fit label flipped.
- 5 real resumes (shared with consent, never used for training) x 2 real job descriptions: 74% of verdicts agreed
with labels made from the resume text alone (base model: 68%), 0 fake-quote claims (base: 6). The labels came
from a second AI reviewer, not a recruiter, and the sample is tiny.
Limits
- Made for English resumes and Indian job descriptions; a student project, not a hiring decision tool.
- Weak on requirements with several parts ("communication, teamwork and leadership"), and sometimes marks a skill
"met" when it only appears in a skills list.
- A human should read the quotes before deciding anything about a candidate.