File size: 5,851 Bytes
d1b141e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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")