v1.0 Β· Apache 2.0 Β· EN
JOB
SENSE
job_description.txt β structured.json
A fine-tuned 3B model that reads hiring intent and returns structured JSON β no regex, no patching.
βββββββββββββββ¬ββββββββββββββ¬ββββββββββββββ¬ββββββββββββββ
β 3B β 700 β 9 β EN β
β parameters β max_tokens β fields β language β
βββββββββββββββ΄ββββββββββββββ΄ββββββββββββββ΄ββββββββββββββ
01 β What it does
Paste a job description. JobSense reads hiring intent and returns clean, structured JSON.
No regex rules. No schema patching. No post-processing.
input β job_description.txt
output β structured.json
02 β Signal extraction
Job descriptions hide signals across multiple sentences. JobSense surfaces all of them:
signals:
- mandatory vs nice-to-have skills
- seniority inferred from responsibilities
- work mode: hybrid / remote / onsite
- relocation expectations
- immediate joining requirements
- salary language and compensation ranges
03 β Live example
Input
We are looking for an experienced Backend Developer to lead our team.
FastAPI is mandatory. MongoDB, httpx, Uvicorn are preferred.
Hybrid role in Delhi. 6-8 years exp. Immediate joiners preferred.
Competitive salary.
Output
{
"role": "Backend Developer",
"sub_role": "FastAPI Backend Dev",
"seniority": "senior",
"skills": [
{ "name": "FastAPI", "importance": "required" },
{ "name": "MongoDB", "importance": "preferred" },
{ "name": "httpx", "importance": "preferred" }
],
"experience": "6 to 8 years",
"location": "Delhi",
"work_mode": "hybrid",
"joining": "immediate",
"salary": "competitive"
}
04 β Response schema
Root fields
| field | type | values |
|---|---|---|
role |
string | primary job title |
sub_role |
string | specialization |
seniority |
string | junior Β· mid Β· senior Β· lead |
skills |
array | see skill object below |
experience |
string | years required |
location |
string | city / region / remote |
location_type |
string | city Β· region Β· country Β· remote |
work_mode |
string | hybrid Β· remote Β· onsite |
joining |
string | immediate Β· notice_period Β· flexible |
salary |
string | compensation signal |
Skill object
| field | type | values |
|---|---|---|
name |
string | skill name |
importance |
string | required Β· preferred Β· contextual |
category |
string | skill grouping |
05 β Quick start
Gradio API
pip install gradio_client
from gradio_client import Client
client = Client("mantraraval/jobsense-app")
result = client.predict(
text="YOUR JOB DESCRIPTION HERE",
api_name="/extract_jd",
)
print(result)
Local inference
pip install transformers peft accelerate torch
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
BASE = "unsloth/Qwen2.5-3B-Instruct"
JOBSENSE = "mantraraval/jobsense"
tokenizer = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(BASE, device_map="auto")
model = PeftModel.from_pretrained(model, JOBSENSE)
inputs = tokenizer("YOUR JOB DESCRIPTION HERE", return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=700)
print(tokenizer.decode(output[0]))
06 β Stack
base_model β Qwen2.5-3B
method β LoRA + PEFT
precision β float16
decoding β deterministic
07 β Constraints
- English only # multi-language on roadmap
- Short JDs # may return sparse fields
- GPU recommended # for production throughput
08 β Roadmap
[ ] multi-language support
[ ] confidence scores per field
[ ] GGUF quantized release
[ ] public dataset launch
Citation
@misc{raval2025jobsense,
author = {Mantra Raval},
title = {JobSense: Structured Information Extraction from Job Descriptions},
year = {2025},
publisher = {Hugging Face}
}
jobsense Β· hiring intelligence Β· by mantraraval
- Downloads last month
- 525