Spaces:
Running
Running
File size: 9,659 Bytes
873fa0c de1d69b b290b44 95a2907 b290b44 084ea41 b290b44 ff187b9 fb1e7b8 e49c40e 61cd157 a953b7a e49c40e b290b44 fbefaaa b290b44 7ddc00d b290b44 24f2b6a 1440e91 24f2b6a b290b44 96524f3 b290b44 0b67a15 61af7dd 0b67a15 b290b44 4dfd652 b290b44 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
import gradio as gr
import openai
import fitz # PyMuPDF
import torch
from transformers import pipeline, BloomForCausalLM, BloomTokenizerFast
from huggingface_hub import login
import requests
import os
import transformers
hf_api_key = os.getenv("HF_API_KEY")
login(token=hf_api_key)
# Set OpenAI and Hugging Face API keys
openai.api_key = os.getenv("openai")
def extract_text_from_pdf(pdf_file):
document = fitz.open(pdf_file)
text = ""
for page_num in range(len(document)):
page = document.load_page(page_num)
text += page.get_text()
return text
# Initialize the Gemma model
gemma_pipe = pipeline(
"text-generation",
model="google/gemma-2-2b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cpu"
)
# Initialize the Bloom model
bloom_model = BloomForCausalLM.from_pretrained("bigscience/bloom-560m")
bloom_tokenizer = BloomTokenizerFast.from_pretrained("bigscience/bloom-560m")
def evaluate_with_gpt(resume_text, job_description):
prompt = f"""من یک مسءول استخدام هستم و میخوام درصد تطابق عنوان شغلی فرد با شرح شغلی را
برای من محاسبه کنی. لطفا درصد تطابق بین نمونه کار کارجو و نمونه کار ذکرشده در شرح شغلی را بدست بیار و دقیق 0یا 1 را محاسبه کن.
میخوام خودت به عنوان یک مدل زبانی 0یا 1 بدی .
عنوان شغلی: {resume_text}
شرح شغل: {job_description}
"""
try:
response = openai.ChatCompletion.create(
model="gpt-4o-mini", # یا مدل دیگر
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
],
temperature=0 # دما ثابت است
)
return response.choices[0].message['content']
except Exception as e:
return f"Error during resume evaluation: {e}"
def evaluate_with_gemma(pdf_file, job_description):
resume_text = extract_text_from_pdf(pdf_file)
keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
prompt = f"""
به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
شرح شغل: {job_description}
رزومه: {resume_text}
من پاسخ را در یک رشته با ساختار زیر میخواهم:
{{"تطابق شرح شغل با رزومه فرد ":"%"، "تعداد کلمات کلیدی غیر منطبق ":""، "تعداد کلمات کلیدی منطبق ":""}}
"""
outputs = gemma_pipe(prompt, max_new_tokens=256)
return outputs[0]["generated_text"].strip()
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
def evaluate_with_qwen(resume_text, job_description):
# بارگذاری مدل و توکنایزر
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2-1.5B-Instruct",
torch_dtype="auto",
device_map="auto"
).to("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-72B-Instruct")
# تعریف پرامپت
prompt = f"""
من یک مسءول استخدام هستم و میخوام درصد تطابق رزومه فرد با شرح شغلی را
برای من محاسبه کنی لطفا درصد تطابق بین رزومه و شرح شغلی را بدست بیار. لطفا دقیق این درصد را محاسبه کن.
میخوام خودت به عنوان یک مدل زبانی درصد تطابق را برای من محاسبه کنی.
شرح شغل: {job_description}
رزومه: {resume_text}
"""
# آمادهسازی پیام برای مدل
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")
# تولید پاسخ
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
)
# حذف توکنهای ورودی از پاسخ تولید شده
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
# تبدیل پاسخ به متن
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
return response
def evaluate_with_bloom(pdf_file, job_description):
resume_text = extract_text_from_pdf(pdf_file)
keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
prompt = f"""
به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
شرح شغل: {job_description}
رزومه: {resume_text}"""
inputs = bloom_tokenizer(prompt, return_tensors="pt")
outputs = bloom_model.generate(inputs["input_ids"], max_length=2000)
return bloom_tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
def evaluate_with_jabir(resume_text, job_description):
#resume_text = extract_text_from_pdf(pdf_file)
prompt = f"""من یک مسءول استخدام هستم و میخوام درصد تطابق رزومه فرد با شرح شغلی را برای من محاسبه کنی لطفا درصد تطابق بین رزومه و شرح شغلی را بدست بیارلطفا دقیق این درصد را محاسبه کن
شرح شغل: {job_description}
رزومه: {resume_text}"""
base_url = "https://api.jabirproject.org/generate"
headers = {"apikey": "7471142a-deb4-4a70-8ee3-6603e21bcc1d"}
data = {
"messages": [{"role": "user", "content": prompt}]
}
response = requests.post(base_url, headers=headers, json=data)
if response.ok:
return response.json()
else:
return f"Error: {response.status_code}, {response.text}"
hf_api_key = os.getenv("HF_API_KEY1")
login(token=hf_api_key)
model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device_map="auto",
)
def evaluate_with_llama(resume_text, job_description):
keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
prompt = f"""
به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
شرح شغل: {job_description}
رزومه: {resume_text}
من پاسخ را در یک رشته با ساختار زیر میخواهم:
{{"تطابق شرح شغل با رزومه فرد ":"%", "تعداد کلمات کلیدی غیر منطبق ":"", "تعداد کلمات کلیدی منطبق ":""}}
"""
outputs = pipeline(
prompt,
max_new_tokens=256,
)
return outputs[0]["generated_text"] |