HTF2024 / app.py
Lord-Champaklal's picture
Upload 4 files
d1b141e verified
raw
history blame
5.85 kB
from dotenv import load_dotenv
load_dotenv()
import streamlit as st
import os
import io
import base64
from PIL import Image
import pdf2image
import google.generativeai as genai
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
os.environ["PATH"] += os.pathsep + "/usr/bin"
def get_gemini_response(input, pdf_content, prompt):
model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content([input, pdf_content[0], prompt])
return response.text
def input_pdf_setup(uploaded_file):
# Converting the PDF to Image
if uploaded_file is not None:
images = pdf2image.convert_from_bytes(uploaded_file.read(), poppler_path="/usr/bin")
first_page = images[0]
# Convert into Bytes
img_byte_arr = io.BytesIO()
first_page.save(img_byte_arr, format='JPEG')
img_byte_arr = img_byte_arr.getvalue()
pdf_parts = [
{
"mime_type": "image/jpeg",
"data": base64.b64encode(img_byte_arr).decode() # encode to base 64
}
]
return pdf_parts
else:
raise FileNotFoundError("No file uploaded")
## StreamLit App
st.set_page_config(page_title="ATS Resume Expert")
st.header("ATS Tracking System")
input_text = st.text_area("Job Description: ", key="input")
uploaded_file = st.file_uploader("Upload a Resume (PDF)", type="pdf")
if uploaded_file is not None:
st.write("PDF uploaded successfully")
## THE 4 BUTTONS OF THE APPLICATION:
submit1 = st.button("Review My Resume")
submit2 = st.button("How can I improvise my skills")
submit3 = st.button("Percentage Match")
submit4 = st.button("What are the Keywords that are Missing?")
submit5 = st.button("Technical Skills")
# for the above buttons, we have an example input prompt:
input_prompt1 = """
You are an experienced HR with Tech Experience in the field of Data Science, Full Stack Web Development,
Devops, Data Analyst, your task is to review the provided resume
against the job description for these profiles. Please share your professional evaluation on
whether the candidate's profile aligns with the role.
Highlight the strengths and weaknesses of the applicant in relation to the specified job requirements.
"""
input_prompt2 = """
You are an experienced and skilled ATS (Application Tracking System) scanner with a deep understanding of
data science, full stack web development, devops, data analyst, and deep ATS functionality. Your task is
to evaluate the resume and then provide the candidate with insights on how they can improvise
their skills according to the job description provided. Jot down bullet points on how the candidate can
improvise their skills so that they can align with the job description.
"""
input_prompt3 = """
You are a skilled ATS (Applicant Tracking System) scanner with a deep understanding of Data Science,
Full Stack Web Development, Devops, Data Analyst, and deep ATS functionality, your task is to
evaluate the resume against the provided job description. Give me the percentage of match if the resume
matches the job description. First the output should come as percentage and then keywords missing and
last final thoughts.
"""
input_prompt4 = """
You are a skilled ATS (Applicant Tracking System) scanner with a deep understanding of Data Science,
Full Stack Web Development, DevOps, and Data Analyst roles. The job description has several keywords
that are important for the role. Your task is to evaluate the resume against the provided job description
and then provide the candidate with insights on the keywords that are missing in the resume.
Provide the candidate with the missing keywords and how they can improvise their resume to
align with the job description.
Jot down the missing keywords along with reasons why they are important for the role in a list manner."""
input_prompt5 = """
You are a skilled ATS (Applicant Tracking System) scanner with a deep understanding of Data Science and
Full Stack Web Development roles. Your task is to filter out the technical skills from the resume and
then mention them in bullet points in the output. There should be no other information in the output.
"""
if submit1:
if uploaded_file is not None:
pdf_content = input_pdf_setup(uploaded_file)
response = get_gemini_response(input_prompt1, pdf_content, input_text)
st.subheader("Recommendation by the A.I.")
st.write(response)
else:
st.write("Please upload the Resume PDF")
elif submit2:
if uploaded_file is not None:
pdf_content = input_pdf_setup(uploaded_file)
response = get_gemini_response(input_prompt2, pdf_content, input_text)
st.subheader("Recommendation by the A.I.")
st.write(response)
else:
st.write("Please upload the Resume PDF")
elif submit3:
if uploaded_file is not None:
pdf_content = input_pdf_setup(uploaded_file)
response = get_gemini_response(input_prompt3, pdf_content, input_text)
st.subheader("Recommendation by the A.I.")
st.write(response)
else:
st.write("Please upload the Resume PDF")
elif submit4:
if uploaded_file is not None:
pdf_content = input_pdf_setup(uploaded_file)
response = get_gemini_response(input_prompt4, pdf_content, input_text)
st.subheader("Recommendation by the A.I.")
st.write(response)
else:
st.write("Please upload the Resume PDF")
elif submit5:
if uploaded_file is not None:
pdf_content = input_pdf_setup(uploaded_file)
response = get_gemini_response(input_prompt5, pdf_content, input_text)
st.subheader("Here is a list of your Technical Skills")
st.write(response)
else:
st.write("Please upload the Resume PDF")