Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -4,7 +4,7 @@ import fitz # PyMuPDF
|
|
4 |
import torch
|
5 |
from transformers import pipeline, BloomForCausalLM, BloomTokenizerFast
|
6 |
from huggingface_hub import login
|
7 |
-
|
8 |
import os
|
9 |
|
10 |
hf_api_key = os.getenv("HF_API_KEY")
|
@@ -94,28 +94,52 @@ def evaluate_with_bloom(pdf_file, job_description):
|
|
94 |
|
95 |
ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
|
96 |
شرح شغل: {job_description}
|
97 |
-
رزومه: {resume_text}
|
98 |
-
|
99 |
-
من پاسخ را در یک رشته با ساختار زیر میخواهم:
|
100 |
-
{{"تطابق شرح شغل با رزومه فرد ":"%"، "تعداد کلمات کلیدی غیر منطبق ":""، "تعداد کلمات کلیدی منطبق ":""}}
|
101 |
-
"""
|
102 |
|
103 |
inputs = bloom_tokenizer(prompt, return_tensors="pt")
|
104 |
outputs = bloom_model.generate(inputs["input_ids"], max_length=2000)
|
105 |
return bloom_tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
|
106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
def evaluate_all_models(pdf_file, job_description):
|
108 |
gpt_result = evaluate_with_gpt(pdf_file, job_description)
|
109 |
gemma_result = evaluate_with_gemma(pdf_file, job_description)
|
110 |
bloom_result = evaluate_with_bloom(pdf_file, job_description)
|
111 |
-
|
|
|
112 |
|
113 |
iface = gr.Interface(
|
114 |
-
fn=lambda pdf, jd, model: evaluate_with_gpt(pdf, jd) if model == "GPT-4o" else evaluate_with_gemma(pdf, jd) if model == "Gemma" else evaluate_with_bloom(pdf, jd) if model == "Bloom" else evaluate_all_models(pdf, jd),
|
115 |
inputs=[
|
116 |
gr.File(label="Upload Resume PDF"),
|
117 |
gr.Textbox(lines=10, label="Job Description"),
|
118 |
-
gr.Radio(choices=["GPT-4o", "Gemma", "Bloom", "All"], label="Choose Model")
|
119 |
],
|
120 |
outputs="text",
|
121 |
title="Resume Evaluator"
|
|
|
4 |
import torch
|
5 |
from transformers import pipeline, BloomForCausalLM, BloomTokenizerFast
|
6 |
from huggingface_hub import login
|
7 |
+
import requests
|
8 |
import os
|
9 |
|
10 |
hf_api_key = os.getenv("HF_API_KEY")
|
|
|
94 |
|
95 |
ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
|
96 |
شرح شغل: {job_description}
|
97 |
+
رزومه: {resume_text}"""
|
|
|
|
|
|
|
|
|
98 |
|
99 |
inputs = bloom_tokenizer(prompt, return_tensors="pt")
|
100 |
outputs = bloom_model.generate(inputs["input_ids"], max_length=2000)
|
101 |
return bloom_tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
|
102 |
|
103 |
+
def evaluate_with_jabir(pdf_file, job_description):
|
104 |
+
resume_text = extract_text_from_pdf(pdf_file)
|
105 |
+
|
106 |
+
keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت
|
107 |
+
، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
|
108 |
+
|
109 |
+
prompt = f"""
|
110 |
+
به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
|
111 |
+
لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
|
112 |
+
|
113 |
+
ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
|
114 |
+
شرح شغل: {job_description}
|
115 |
+
رزومه: {resume_text}"""
|
116 |
+
|
117 |
+
base_url = "https://api.jabirproject.org/generate"
|
118 |
+
headers = {"apikey": "7471142a-deb4-4a70-8ee3-6603e21bcc1d"}
|
119 |
+
data = {
|
120 |
+
"messages": [{"role": "user", "content": prompt}]
|
121 |
+
}
|
122 |
+
|
123 |
+
response = requests.post(base_url, headers=headers, json=data)
|
124 |
+
|
125 |
+
if response.ok:
|
126 |
+
return response.json()
|
127 |
+
else:
|
128 |
+
return f"Error: {response.status_code}, {response.text}"
|
129 |
+
|
130 |
def evaluate_all_models(pdf_file, job_description):
|
131 |
gpt_result = evaluate_with_gpt(pdf_file, job_description)
|
132 |
gemma_result = evaluate_with_gemma(pdf_file, job_description)
|
133 |
bloom_result = evaluate_with_bloom(pdf_file, job_description)
|
134 |
+
new_model_result = evaluate_with_jabir(pdf_file, job_description)
|
135 |
+
return f"GPT-4o Result:\n{gpt_result}\n\nGemma Result:\n{gemma_result}\n\nBloom Result:\n{bloom_result}\n\njabir Result:\n{new_model_result}"
|
136 |
|
137 |
iface = gr.Interface(
|
138 |
+
fn=lambda pdf, jd, model: evaluate_with_gpt(pdf, jd) if model == "GPT-4o" else evaluate_with_gemma(pdf, jd) if model == "Gemma" else evaluate_with_bloom(pdf, jd) if model == "Bloom" else evaluate_with_jabir(pdf, jd) if model == "jabir" else evaluate_all_models(pdf, jd),
|
139 |
inputs=[
|
140 |
gr.File(label="Upload Resume PDF"),
|
141 |
gr.Textbox(lines=10, label="Job Description"),
|
142 |
+
gr.Radio(choices=["GPT-4o", "Gemma", "Bloom", "jabir", "All"], label="Choose Model")
|
143 |
],
|
144 |
outputs="text",
|
145 |
title="Resume Evaluator"
|