Spaces:
Runtime error
Runtime error
File size: 8,304 Bytes
0f4ef22 ef8c898 2427f9f 0f4ef22 2427f9f 21658d3 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f be2d789 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 7b72472 0f4ef22 7b72472 0f4ef22 7b72472 0f4ef22 7b72472 3bb8d7b 7b72472 0f4ef22 7b72472 0f4ef22 7b72472 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 2f5f872 2427f9f 2f5f872 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 2427f9f 0f4ef22 56cd4cb 0f4ef22 56cd4cb 91a26ac 56cd4cb 0f4ef22 56cd4cb 0f4ef22 56cd4cb 0f4ef22 56cd4cb 0f4ef22 56cd4cb 0f4ef22 56cd4cb 0f4ef22 56cd4cb |
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 |
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('API_KEY_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(pdf_file, job_description):
resume_text = extract_text_from_pdf(pdf_file)
keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
prompt = f"""
به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، اطلاعات کلیدی رزومه و شرح شغل را به صورت جداگانه استخراج کن. این اطلاعات شامل مواردی است که در {keywords} آمده است.
شرح شغل: {job_description}
رزومه: {resume_text}
من پاسخ را در یک فایل json میخواهم
"""
try:
response = openai.ChatCompletion.create(
model="gpt-4o",
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}
# من پاسخ را در یک فایل json میخواهم
# """
# outputs = gemma_pipe(prompt, max_new_tokens=256)
# return outputs[0]["generated_text"].strip()
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(pdf_file, job_description):
resume_text = extract_text_from_pdf(pdf_file)
keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
prompt = f"""
به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، اطلاعات کلیدی رزومه و شرح شغل را به صورت جداگانه استخراج کن. این اطلاعات شامل مواردی است که در {keywords} آمده است.
شرح شغل: {job_description}
رزومه: {resume_text}
من پاسخ را در یک فایل json میخواهم
"""
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"
model_config = transformers.LlamaConfig.from_pretrained(model_id)
model_config.rope_scaling = {"type": "llama3", "factor": 8.0,'low_freq_factor': 1.0, 'high_freq_factor': 4.0, 'original_max_position_embeddings': 8192}
model = transformers.AutoModelForCausalLM.from_pretrained(model_id, config=model_config)
pipeline = transformers.pipeline(
"text-generation",
model=model,
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"] |