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"]