|
import openai |
|
import os |
|
from paperqa import Docs |
|
import gradio as gr |
|
from langchain.document_loaders import PyPDFLoader |
|
from langchain.vectorstores import Chroma |
|
from langchain.embeddings.openai import OpenAIEmbeddings |
|
from langchain.document_loaders import UnstructuredPDFLoader |
|
from langchain.llms import OpenAI |
|
from langchain.chains.question_answering import load_qa_chain |
|
from langchain.chat_models import ChatOpenAI |
|
|
|
css_style = """ |
|
|
|
.gradio-container { |
|
font-family: "IBM Plex Mono"; |
|
} |
|
|
|
.answerText p { |
|
font-size: 24px !important; |
|
color: #8dbcfe !important; |
|
} |
|
""" |
|
|
|
|
|
def run(uploaded_files): |
|
all_files = [] |
|
if uploaded_files is None: |
|
return all_files |
|
for file in uploaded_files: |
|
if file.name.endswith('.pdf'): |
|
all_files.append(file.name) |
|
print(all_files) |
|
return all_files |
|
|
|
|
|
def createAnswer(files, designation, openaikey): |
|
os.environ['OPENAI_API_KEY'] = openaikey.strip() |
|
docs = Docs(llm='gpt-3.5-turbo') |
|
for d in files: |
|
docs.add(d.name) |
|
answer = docs.query( |
|
f"Who is the best canidate to hire for {designation}. Provide a list with the candidate name. If you don't know, simply say None of the canidates are suited for the Job role.") |
|
print(answer.formatted_answer) |
|
print(type(answer)) |
|
return answer.answer |
|
|
|
|
|
with gr.Blocks(css=css_style) as demo: |
|
gr.Markdown(f""" |
|
# HR-GPT - Filter & Find The Best Candidate for the Job using AI |
|
|
|
*By Amin Memon ([@AminMemon](https://twitter.com/AminMemon))* |
|
|
|
This tool will enable asking questions of your uploaded text, PDF documents,. |
|
It uses OpenAI's ChatGPT model & OpenAI Embeddings and thus you must enter your API key below. |
|
|
|
This tool is under active development and currently uses many tokens - up to 10,000 |
|
for a single query. That is $0.10-0.20 per query, so please be careful! |
|
Porting it to Llama.cpp soon for saved cost. |
|
|
|
1. Enter API Key ([What is that?](https://platform.openai.com/account/api-keys)) |
|
2. Upload your Resumes (Try a few resumes/cv to try < 5) |
|
3. Provide Designation for which you are hiring |
|
""") |
|
|
|
openaikey = gr.Text( |
|
label='Your OpenAI Api Key', value="") |
|
position = gr.Text( |
|
label='Position/Designation for which you are hiring for', value="") |
|
|
|
with gr.Tab('File Upload'): |
|
uploaded_files = gr.File( |
|
label="Resume Upload - ONLY PDF. (Doc File Support Coming Soon)", file_count="multiple", show_progress=True) |
|
|
|
uploaded_files.change( |
|
fn=run, inputs=[uploaded_files], outputs=[uploaded_files]) |
|
ask = gr.Button("Find Top Candidate") |
|
answer = gr.Markdown(label="Result", elem_classes='answerText') |
|
ask.click(fn=createAnswer, inputs=[ |
|
uploaded_files, position, openaikey], outputs=[answer]) |
|
|
|
demo.queue(concurrency_count=20) |
|
demo.launch(show_error=True) |
|
|