File size: 5,752 Bytes
84cf435 64c20d6 84cf435 20c9151 3229634 84cf435 301476b 84cf435 |
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 |
import streamlit as st
import google.generativeai as genai
import os
import PyPDF2 as pdf
from dotenv import load_dotenv
from fpdf import FPDF
import tempfile
import re
load_dotenv()
genai.configure(api_key=("AIzaSyDziGvuT1woHnH4_S3L_zQZV55Yj-123A8"))
# gemini function
def get_gemini_response(input):
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content(input)
return response
# convert pdf to text
def input_pdf_text(uploaded_file):
reader = pdf.PdfReader(uploaded_file)
text = ""
for page in range(len(reader.pages)):
page = reader.pages[page]
text += str(page.extract_text())
return text
# prompt template
input_prompt = """
### As a skilled Application Tracking System(ATS) with advanced knowledge in technology and data science . your role is to meticulously evaluate a candidate's resume based on the provided job description.
### Your evaluation will involve analyzing the resume for relevant skills , experiences, and qualifications that align with the job requirements.Look for key buzzwords and specific criteria outlined in the job description to determine the candidate's suitability for the position.
### Provide a detailed assessment of how well the resume matches the job requiremnets ,highlighting strengths , weaknesses and any potential area of concern. Offer constructive feedback on how the condidate can enhance their resume to better align with the job description and improve their chances of securing the position.
### Your evaluation should be through, precise and objective,ensuring that the most qualified candidates are accurately identified based on their resume content in relation to the job criteria.
### Remember to utilize your expertise in technology and data science to conduct a comprehensive evaluation that optimizes the recruitment process for the hiring company. your insights will play a crucial role in determining the candidate's compatibility with the job role.
### parse data of job description and then make one list called Should do that is what candidate should do for that particular position.
### parse all CV of all candidates one time uploaded and then create one list called can do that is what candidate do.
### Now You should match all candidates can do generated list with should do list and give the report of each candidate with it's score and reasons of that score.
### Generate one pdf which contains Candidate name ,matching score ,can do list , should do list,matching and missing from resume,highlighting strengths,Weaknesses,Offer constructive feedback on how the condidate can enhance their resume to better align with the job description and improve their chances of securing the position and it should be the sequence of score card content.
resume = {text}
jd = {jd}
"""
# Function to generate PDF
class PDF(FPDF):
def header(self):
self.set_font('Arial', 'B', 12)
self.cell(0, 10, 'Career Metaverse Smart ATS - Evaluation Report', 0, 1, 'C')
def chapter_title(self, title):
self.set_font('Arial', 'B', 12)
self.cell(0, 10, title, 0, 1, 'L')
self.ln(10)
def chapter_body(self, body):
for line in body.split('\n'):
if line.startswith("**"):
self.set_font('Arial', 'B', 12)
self.multi_cell(0, 10, line.replace("**", "").strip())
else:
self.set_font('Arial', '', 12)
self.multi_cell(0, 10, line)
self.ln()
def add_chapter(self, title, body):
self.add_page()
self.chapter_title(title)
self.chapter_body(body)
def generate_pdf(response_content, candidate_name):
pdf = PDF()
pdf.add_chapter('Evaluation Output', response_content)
# Use tempfile to create a temporary file
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
pdf_output = tmp_file.name
pdf.output(pdf_output)
return pdf_output
# Extract candidate's name from the response content
def extract_candidate_name(response_content):
# Use a regular expression to find the candidate's name
# This assumes the candidate's name is mentioned at the beginning of the response
match = re.search(r"Candidate Name:\s*(\w+\s*\w*)", response_content)
if match:
return match.group(1).strip()
else:
return "Candidate"
# Streamlit App
st.title("Career Metaverse Smart ATS")
st.text("Improve your ATS system")
jd = st.text_area("Paste job description here")
uploaded_file = st.file_uploader("Upload your resume", type="pdf", help="Please upload the pdf")
submit = st.button('Generate Fitment Report')
if submit:
if uploaded_file is not None:
text = input_pdf_text(uploaded_file)
response = get_gemini_response(input_prompt.format(text=text, jd=jd))
# Parse and display response in a structured way
response_content = response.candidates[0].content.parts[0].text
st.subheader("Evaluation Output")
for line in response_content.split('\n'):
if line.startswith("**"):
st.markdown(f"**{line.replace('**', '').strip()}**")
else:
st.write(line)
# Extract candidate's name
candidate_name = extract_candidate_name(response_content)
# Generate PDF
pdf_path = generate_pdf(response_content, candidate_name)
with open(pdf_path, "rb") as file:
btn = st.download_button(
label="Download Report as PDF",
data=file,
file_name=f"{candidate_name}_evaluation_report.pdf",
mime="application/octet-stream"
)
|