Fariddvp commited on
Commit
0f4ef22
·
verified ·
1 Parent(s): 0409782

Create models.py

Browse files
Files changed (1) hide show
  1. models.py +167 -0
models.py ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import openai
3
+ import fitz # PyMuPDF
4
+ import torch
5
+ from transformers import pipeline, BloomForCausalLM, BloomTokenizerFast
6
+ from huggingface_hub import login
7
+ import requests
8
+ import os
9
+ import transformers
10
+ hf_api_key = os.getenv("HF_API_KEY")
11
+ login(token=hf_api_key)
12
+
13
+ # Set OpenAI and Hugging Face API keys
14
+ openai.api_key = "sk-1E6ExsyFb-cdU8jPNDP1dsEq_ra_bazU-EXQZQ86pJT3BlbkFJ4zURsV0t--3qNM7A-P57NUqZIBosrL7POwzpjR5EQA"
15
+
16
+ def extract_text_from_pdf(pdf_file):
17
+ document = fitz.open(pdf_file)
18
+ text = ""
19
+ for page_num in range(len(document)):
20
+ page = document.load_page(page_num)
21
+ text += page.get_text()
22
+ return text
23
+
24
+ # Initialize the Gemma model
25
+ gemma_pipe = pipeline(
26
+ "text-generation",
27
+ model="google/gemma-2-2b-it",
28
+ model_kwargs={"torch_dtype": torch.bfloat16},
29
+ device="cpu"
30
+ )
31
+
32
+ # Initialize the Bloom model
33
+ bloom_model = BloomForCausalLM.from_pretrained("bigscience/bloom-560m")
34
+ bloom_tokenizer = BloomTokenizerFast.from_pretrained("bigscience/bloom-560m")
35
+
36
+
37
+
38
+ def evaluate_with_gpt(pdf_file, job_description):
39
+ resume_text = extract_text_from_pdf(pdf_file)
40
+
41
+ keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
42
+
43
+ prompt = f"""
44
+ به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
45
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
46
+
47
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
48
+ شرح شغل: {job_description}
49
+ رزومه: {resume_text}
50
+
51
+ من پاسخ را در یک رشته با ساختار زیر می‌خواهم:
52
+ {{"تطابق شرح شغل با رزومه فرد ":"%"، "تعداد کلمات کلیدی غیر منطبق ":""، "تعداد کلمات کلیدی منطبق ":""}}
53
+ """
54
+
55
+ try:
56
+ response = openai.ChatCompletion.create(
57
+ model="gpt-4o",
58
+ messages=[
59
+ {"role": "system", "content": "You are a helpful assistant."},
60
+ {"role": "user", "content": prompt}
61
+ ],
62
+ temperature=0
63
+ )
64
+ return response.choices[0].message['content']
65
+ except Exception as e:
66
+ return f"Error during resume evaluation: {e}"
67
+
68
+ def evaluate_with_gemma(pdf_file, job_description):
69
+ resume_text = extract_text_from_pdf(pdf_file)
70
+
71
+ keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
72
+
73
+ prompt = f"""
74
+ به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
75
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
76
+
77
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
78
+ شرح شغل: {job_description}
79
+ رزومه: {resume_text}
80
+
81
+ من پاسخ را در یک رشته با ساختار زیر می‌خواهم:
82
+ {{"تطابق شرح شغل با رزومه فرد ":"%"، "تعداد کلمات کلیدی غیر منطبق ":""، "تعداد کلمات کلیدی منطبق ":""}}
83
+ """
84
+
85
+ outputs = gemma_pipe(prompt, max_new_tokens=256)
86
+ return outputs[0]["generated_text"].strip()
87
+
88
+ def evaluate_with_bloom(pdf_file, job_description):
89
+ resume_text = extract_text_from_pdf(pdf_file)
90
+
91
+ keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
92
+
93
+ prompt = f"""
94
+ به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
95
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
96
+
97
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
98
+ شرح شغل: {job_description}
99
+ رزومه: {resume_text}"""
100
+
101
+ inputs = bloom_tokenizer(prompt, return_tensors="pt")
102
+ outputs = bloom_model.generate(inputs["input_ids"], max_length=2000)
103
+ return bloom_tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
104
+
105
+ def evaluate_with_jabir(pdf_file, job_description):
106
+ resume_text = extract_text_from_pdf(pdf_file)
107
+
108
+ keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
109
+
110
+ prompt = f"""
111
+ به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
112
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
113
+
114
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
115
+ شرح شغل: {job_description}
116
+ رزومه: {resume_text}"""
117
+
118
+ base_url = "https://api.jabirproject.org/generate"
119
+ headers = {"apikey": "7471142a-deb4-4a70-8ee3-6603e21bcc1d"}
120
+ data = {
121
+ "messages": [{"role": "user", "content": prompt}]
122
+ }
123
+
124
+ response = requests.post(base_url, headers=headers, json=data)
125
+
126
+ if response.ok:
127
+ return response.json()
128
+ else:
129
+ return f"Error: {response.status_code}, {response.text}"
130
+
131
+
132
+ hf_api_key = os.getenv("HF_API_KEY1")
133
+ login(token=hf_api_key)
134
+
135
+
136
+
137
+
138
+
139
+ model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
140
+
141
+ pipeline = transformers.pipeline(
142
+ "text-generation",
143
+ model=model_id,
144
+ model_kwargs={"torch_dtype": torch.bfloat16},
145
+ device_map="auto",
146
+ )
147
+
148
+ def evaluate_with_llama(resume_text, job_description):
149
+ keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
150
+
151
+ prompt = f"""
152
+ به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
153
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
154
+
155
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
156
+ شرح شغل: {job_description}
157
+ رزومه: {resume_text}
158
+
159
+ من پاسخ را در یک رشته با ساختار زیر می‌خواهم:
160
+ {{"تطابق شرح شغل با رزومه فرد ":"%", "تعداد کلمات کلیدی غیر منطبق ":"", "تعداد کلمات کلیدی منطبق ":""}}
161
+ """
162
+
163
+ outputs = pipeline(
164
+ prompt,
165
+ max_new_tokens=256,
166
+ )
167
+ return outputs[0]["generated_text"]