Spaces:
Running
Running
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| from PyPDF2 import PdfReader | |
| # 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 resume_match_checker(file, job_description): | |
| resume_text = extract_text_from_pdf(file) | |
| 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 π"): | |
| 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 π"): | |
| with gr.Row(): | |
| resume = gr.File(label="Upload your Resume (PDF)") | |
| job_description = gr.Textbox(label="Job Description", lines=15) | |
| feedback = gr.Textbox(label="Feedback", interactive=False, lines=15, max_lines=50) | |
| gr.Button("Check Match").click(resume_match_checker, [resume, job_description], feedback) | |
| with gr.Tab("Resume Quality π"): | |
| 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 ποΈ"): | |
| with gr.Row(): | |
| resume_text = gr.Textbox(label="Resume Text", lines=15, 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 β€οΈ by [Bahae Eddine HALIM](https://www.linkedin.com/in/halimbahae/)") | |
| if __name__ == "__main__": | |
| demo.launch(share=True) | |