Files changed (1) hide show
  1. app.py +36 -12
app.py CHANGED
@@ -2,7 +2,7 @@ import gradio as gr
2
  import openai
3
  import fitz # PyMuPDF
4
  import torch
5
- from transformers import pipeline
6
  from huggingface_hub import login
7
 
8
  import os
@@ -21,6 +21,10 @@ gemma_pipe = pipeline(
21
  device="cpu"
22
  )
23
 
 
 
 
 
24
  def extract_text_from_pdf(pdf_file):
25
  document = fitz.open(pdf_file)
26
  text = ""
@@ -32,14 +36,13 @@ def extract_text_from_pdf(pdf_file):
32
  def evaluate_with_gpt(pdf_file, job_description):
33
  resume_text = extract_text_from_pdf(pdf_file)
34
 
35
- # اینجا شما لیست کلمات کلیدی مورد نظر خود را تعیین می‌کنید
36
  keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
37
 
38
  prompt = f"""
39
  به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
40
- لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
41
 
42
- ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
43
  شرح شغل: {job_description}
44
  رزومه: {resume_text}
45
 
@@ -63,14 +66,13 @@ def evaluate_with_gpt(pdf_file, job_description):
63
  def evaluate_with_gemma(pdf_file, job_description):
64
  resume_text = extract_text_from_pdf(pdf_file)
65
 
66
- # اینجا شما لیست کلمات کلیدی مورد نظر خود را تعیین می‌کنید
67
  keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
68
 
69
  prompt = f"""
70
  به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
71
- لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
72
 
73
- ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
74
  شرح شغل: {job_description}
75
  رزومه: {resume_text}
76
 
@@ -81,20 +83,42 @@ def evaluate_with_gemma(pdf_file, job_description):
81
  outputs = gemma_pipe(prompt, max_new_tokens=256)
82
  return outputs[0]["generated_text"].strip()
83
 
84
- def evaluate_both_models(pdf_file, job_description):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  gpt_result = evaluate_with_gpt(pdf_file, job_description)
86
  gemma_result = evaluate_with_gemma(pdf_file, job_description)
87
- return f"GPT-4o Result:\n{gpt_result}\n\nGemma Result:\n{gemma_result}"
 
88
 
89
  iface = gr.Interface(
90
- 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_both_models(pdf, jd),
91
  inputs=[
92
  gr.File(label="Upload Resume PDF"),
93
  gr.Textbox(lines=10, label="Job Description"),
94
- gr.Radio(choices=["GPT-4o", "Gemma", "Both"], label="Choose Model")
95
  ],
96
  outputs="text",
97
  title="Resume Evaluator"
98
  )
99
 
100
- iface.launch()
 
2
  import openai
3
  import fitz # PyMuPDF
4
  import torch
5
+ from transformers import pipeline, BloomForCausalLM, BloomTokenizerFast
6
  from huggingface_hub import login
7
 
8
  import os
 
21
  device="cpu"
22
  )
23
 
24
+ # Initialize the Bloom model
25
+ bloom_model = BloomForCausalLM.from_pretrained("bigscience/bloom-1b3")
26
+ bloom_tokenizer = BloomTokenizerFast.from_pretrained("bigscience/bloom-1b3")
27
+
28
  def extract_text_from_pdf(pdf_file):
29
  document = fitz.open(pdf_file)
30
  text = ""
 
36
  def evaluate_with_gpt(pdf_file, job_description):
37
  resume_text = extract_text_from_pdf(pdf_file)
38
 
 
39
  keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
40
 
41
  prompt = f"""
42
  به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
43
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
44
 
45
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
46
  شرح شغل: {job_description}
47
  رزومه: {resume_text}
48
 
 
66
  def evaluate_with_gemma(pdf_file, job_description):
67
  resume_text = extract_text_from_pdf(pdf_file)
68
 
 
69
  keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
70
 
71
  prompt = f"""
72
  به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
73
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
74
 
75
+ ارزیابی را بر اساس دقیقا این کلمات کلیدی {keywords} محاسبه کن.
76
  شرح شغل: {job_description}
77
  رزومه: {resume_text}
78
 
 
83
  outputs = gemma_pipe(prompt, max_new_tokens=256)
84
  return outputs[0]["generated_text"].strip()
85
 
86
+ def evaluate_with_bloom(pdf_file, job_description):
87
+ resume_text = extract_text_from_pdf(pdf_file)
88
+
89
+ keywords = "وضعیت خدمت سربازی، سن، محل سکونت، محدوده حقوق پرداختی، میزان سابقه کار مدیریتی، میزان سابقه کار مرتبط با گروه شغلی مشابه، میزان سابقه کار در صنعت، میزان تحصیلات، مهارت زبان، مهارت های نرم افزاری"
90
+
91
+ prompt = f"""
92
+ به عنوان یک تحلیلگر با تجربه سیستم ردیابی متقاضی (ATS)، نقش شما شامل ارزیابی رزومه نسبت به شرح شغل و کلمات کلیدی مشخصی است.
93
+ لطفاً رزومه فرد را با در نظر گرفتن کلمات کلیدی تعیین شده مطابقت دهید و درصد تطابق را بر اساس معیارهای کلیدی و همچنین تعداد کلمات کلیدی گمشده و منطبق محاسبه کنید.
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=256)
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
+ return f"GPT-4o Result:\n{gpt_result}\n\nGemma Result:\n{gemma_result}\n\nBloom Result:\n{bloom_result}"
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"
122
  )
123
 
124
+ iface.launch()