Spaces:
Sleeping
Sleeping
File size: 3,258 Bytes
bfb0909 |
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 |
import os
from dotenv import load_dotenv
import streamlit as st
from PIL import Image
import pdf2image
import google.generativeai as genai
import base64
import io
# Load environment variables from .env file
load_dotenv()
# Set the Google API key
genai.configure(api_key=os.getenv('GOOGLE_API_KEY'))
# Function to extract the content from the uploaded PDF
def input_pdf_setup(uploaded_file):
# Check if file is uploaded
if not uploaded_file:
raise FileNotFoundError("No file uploaded")
# Convert the PDF to images using pdf2image
images = pdf2image.convert_from_bytes(uploaded_file.read(), poppler_path=r"C:\Program Files (x86)\poppler\library\bin")
first_page = images[0]
# Convert the first page image to 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 base64
}
]
return pdf_parts
# Function to interact with Google's Gemini AI model
def get_gemini_response(input_text, pdf_content, prompt):
model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content([input_text, pdf_content[0], prompt])
return response.text
# Streamlit app setup
st.set_page_config(page_title="ATS")
st.header("ATS Tracking System")
# User inputs
input_text = st.text_area("Job Description: ", key="input")
uploaded_file = st.file_uploader("Upload PDF File", type=["pdf"])
if uploaded_file is not None:
st.write("PDF Uploaded Successfully")
# Submission buttons
submit1 = st.button("Tell Me About the Resume")
submit3 = st.button("Percentage Match")
# Prompts for the AI model
input_prompt1 = """
You are an experienced Technical Human Resource Manager focused on hiring team leads and managers. Your task is to review the provided resume against the job description for the uploaded resume.
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_prompt3 = """
You are a skilled ATS (Applicant Tracking System) scanner with a deep understanding of Management and Team Leadership roles and the years of experience required for the mentioned roles regarding the uploaded resume and ATS functionality.
Your task is to evaluate the resume against the provided job description. Provide a match percentage, followed by missing keywords, and conclude with final thoughts.
"""
# Handle button submissions
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("Response:")
st.write(response)
else:
st.warning("Please upload the resume")
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("Response:")
st.write(response)
else:
st.warning("Please upload the resume")
|