halimbahae's picture
Update app.py
976c3d7 verified
raw
history blame
5.12 kB
import gradio as gr
from huggingface_hub import InferenceClient
from PyPDF2 import PdfReader
import requests
from bs4 import BeautifulSoup
# Initialize the Inference Client
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
def extract_text_from_pdf(file):
if file is None:
return ""
reader = PdfReader(file)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
def ats_friendly_checker(file):
resume_text = extract_text_from_pdf(file)
system_message = "Evaluate the following resume for ATS-friendliness and provide feedback."
message = resume_text
response = client.chat_completion(
[{"role": "system", "content": system_message}, {"role": "user", "content": message}],
max_tokens=512,
temperature=0.7,
top_p=0.95
).choices[0].message.content
feedback = response
return feedback
def scrape_job_description(url):
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
job_description = soup.get_text(separator=" ", strip=True)
return job_description
except requests.exceptions.RequestException as e:
return f"Error accessing job description: {e}"
def resume_match_checker(file, job_url):
resume_text = extract_text_from_pdf(file)
job_description = scrape_job_description(job_url)
if job_description.startswith("Error accessing job description:"):
return job_description
system_message = "Compare the following resume with the job description and provide feedback."
message = f"Resume: {resume_text}\n\nJob Description: {job_description}"
response = client.chat_completion(
[{"role": "system", "content": system_message}, {"role": "user", "content": message}],
max_tokens=512,
temperature=0.7,
top_p=0.95
).choices[0].message.content
feedback = response
return feedback
def resume_quality_score(file):
resume_text = extract_text_from_pdf(file)
system_message = "Evaluate the following resume for overall quality and provide feedback."
message = resume_text
response = client.chat_completion(
[{"role": "system", "content": system_message}, {"role": "user", "content": message}],
max_tokens=512,
temperature=0.7,
top_p=0.95
).choices[0].message.content
interpretation = response
return interpretation
def text_to_overleaf(resume_text):
system_message = "Convert the following resume text to Overleaf code."
message = resume_text
response = client.chat_completion(
[{"role": "system", "content": system_message}, {"role": "user", "content": message}],
max_tokens=512,
temperature=0.7,
top_p=0.95
).choices[0].message.content
overleaf_code = response
return overleaf_code
# Define the Gradio interface
with gr.Blocks() as demo:
gr.Markdown("""
# Resume Enhancement Tool πŸš€
Welcome to the Resume Enhancement Tool! This tool offers several features to help you enhance your resume, ensuring it's ATS-friendly, matches job descriptions, and is of high quality. You can also convert your resume text to Overleaf code for a polished, professional look.
""")
with gr.Tab("ATS-Friendly Checker πŸ“"):
with gr.Row():
resume = gr.File(label="Upload your Resume (PDF)")
feedback = gr.Textbox(label="Feedback", interactive=False, lines=15, max_lines=50)
resume.upload(ats_friendly_checker, resume, feedback)
with gr.Tab("Resume Match Checker πŸ”"):
with gr.Row():
resume = gr.File(label="Upload your Resume (PDF)")
job_url = gr.Textbox(label="Job Description URL")
feedback = gr.Textbox(label="Feedback", interactive=False, lines=15, max_lines=50)
gr.Button("Check Match").click(resume_match_checker, [resume, job_url], feedback)
with gr.Tab("Resume Quality Score 🌟"):
with gr.Row():
resume = gr.File(label="Upload your Resume (PDF)")
interpretation = gr.Textbox(label="Interpretation", interactive=False, lines=15, max_lines=50)
resume.upload(resume_quality_score, resume, interpretation)
with gr.Tab("Text to Overleaf Code πŸ–‹οΈ"):
with gr.Row():
resume_text = gr.Textbox(label="Resume Text", placeholder="Enter your resume text here or paste the example below:\n\nJohn Doe\n\nExperience\n- Software Engineer at Company A\n- Data Scientist at Company B\n\nEducation\n- BSc in Computer Science")
overleaf_code = gr.Textbox(label="Overleaf Code", interactive=False, lines=15, max_lines=50)
resume_text.submit(text_to_overleaf, resume_text, overleaf_code)
gr.Markdown("Paste the generated code into [Overleaf](https://www.overleaf.com/) to create your resume.")
gr.Markdown("---\nBuilt with love by [Bahae Eddine HALIM](https://www.linkedin.com/in/halimbahae/)")
if __name__ == "__main__":
demo.launch(share=True)