ResumeParser / app.py
mehdirabiee
together
c20b0a2
import io
import os
from typing import Union
import gradio as gr
from gradio_pdf import PDF
from dotenv import load_dotenv
load_dotenv()
from resume_parser import ResumeParser, StructuredResumeParser, pdf_to_string
from resume_template import Resume
from pathlib import Path
def parse_resume(resume_data:Union[bytes, str], use_openai=False, openai_key=""):
p = StructuredResumeParser(use_openai, openai_key)
resume_text = pdf_to_string(resume_data)
resume = p.extract_resume_fields(resume_text)
if isinstance(resume, Resume):
resume = resume.json()
return resume
def match_resume_job(resume_data:Union[bytes, str], job_text, use_openai=False, openai_key=""):
p = StructuredResumeParser(use_openai, openai_key)
resume_text = pdf_to_string(resume_data)
res = p.match_resume_with_job_description(resume_text, job_text)
return res
def change_openai_checkbox(openai_key:str):
if openai_key.startswith("sk-") or "OPENAI_API_KEY" in os.environ:
return gr.Checkbox(label="Use OpenAI", interactive=True)
else:
return gr.Checkbox(label="Use OpenAI", interactive=False, value=False)
with gr.Blocks() as demo:
with gr.Tab(label="Parser"):
with gr.Row():
with gr.Column():
#pdf_file_txt = PDF(label="Resume File (pdf)", interactive=True)
pdf_file_txt = gr.File(label="Resume File (pdf)", type='binary', interactive=True)
use_openai_chk = change_openai_checkbox("")
openai_key_txt = gr.Text(label="OpenAI Token", placeholder="openAI token or env[OPENAI_API_KEY]")
parse_btn = gr.Button("Parse Resume")
with gr.Column():
parse_out_txt = gr.JSON(label="Structured Output")
examples0 = gr.Examples(examples=[[f"samples/{fname}"] for fname in os.listdir("samples") if fname.endswith(".pdf")],
inputs=[pdf_file_txt])
with gr.Tab(label="Job Matcher"):
with gr.Row():
with gr.Column():
job_file_txt = gr.Text(label="Job Description", interactive=True)
match_btn = gr.Button("Match Resume")
with gr.Column():
match_out_txt = gr.Text(label="Match Output")
examples1 = gr.Examples(
examples=[[Path(f"samples/jobs/{fname}").read_text()] for fname in os.listdir("samples/jobs") if fname.endswith(".txt")],
inputs=[job_file_txt])
clear_btn = gr.ClearButton(components=[pdf_file_txt, use_openai_chk, openai_key_txt, parse_out_txt, job_file_txt, match_out_txt])
openai_key_txt.change(change_openai_checkbox, inputs=openai_key_txt, outputs=use_openai_chk)
parse_btn.click(parse_resume, inputs=[pdf_file_txt, use_openai_chk, openai_key_txt], outputs=[parse_out_txt])
match_btn.click(match_resume_job, inputs=[pdf_file_txt, job_file_txt, use_openai_chk, openai_key_txt], outputs=[match_out_txt])
'''
demo = gr.Interface(
fn=parse_resume,
inputs=[PDF(label="Upload a PDF", interactive=True), gr.Checkbox(label="Use OpenAI"), gr.Text(label="OpenAI Token")],
outputs=[gr.JSON()],
examples=[[f"samples/{fname}"] for fname in os.listdir("samples") if fname.endswith(".pdf")]
)
'''
demo.launch()