from dotenv import load_dotenv load_dotenv() import base64 import streamlit as st import os import io from PIL import Image import pdf2image import google.generativeai as genai genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) def get_gemini_response(input_text, pdf_content, prompt): model = genai.GenerativeModel('gemini-pro-vision') response = model.generate_content([input_text, pdf_content, prompt]) return response.text def input_pdf_setup(uploaded_file): if not uploaded_file: st.warning("Please upload a PDF file.") st.stop() # Convert PDF to images images = pdf2image.convert_from_bytes(uploaded_file.read()) first_page = images[0] # Convert first page to bytes img_byte_arr = io.BytesIO() first_page.save(img_byte_arr, format='JPEG') img_byte_arr = img_byte_arr.getvalue() # Encode as base64 pdf_parts = [{ "mime_type": "image/jpeg", "data": base64.b64encode(img_byte_arr).decode() }] return pdf_parts # 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 your resume (PDF)...", type=["pdf"]) if uploaded_file: st.success("PDF Uploaded Successfully") submit1 = st.button("Tell Me About the Resume") submit3 = st.button("Percentage Match") input_prompt1 = """ You are an experienced Technical Human Resource Manager. Your task is to review the provided resume against the job description. 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 expertise in data science and ATS functionality. Your task is to evaluate the resume against the provided job description. Provide a percentage match if the resume aligns with the job description. First, output the percentage match. Then, list missing keywords, followed by final thoughts. """ if submit1 and not submit3: if uploaded_file: 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 and not submit1: if uploaded_file: 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.")