File size: 2,583 Bytes
c68dfb5 e80297a c68dfb5 e80297a c68dfb5 e80297a f4cb80a e80297a c68dfb5 8c871de e80297a 8c871de e80297a 8c871de 6123c8c f4cb80a 6123c8c e80297a 6123c8c f4cb80a 8c871de 6123c8c 8c871de f4cb80a e80297a 6123c8c 8c871de f4cb80a bf6416a f4cb80a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import os
import gradio as gr
import requests
from langchain.chains import RetrievalQA
from langchain.document_loaders import PDFMinerLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.llms import OpenAI
def set_openai_key(raw_key):
# Check if the API is valid
headers = {"Authorization": f"Bearer {raw_key}"}
response = requests.get("https://api.openai.com/v1/engines", headers=headers)
if response.status_code != 200:
raise gr.Error("API key is not valid. Check the key and try again.")
os.environ["OPENAI_API_KEY"] = raw_key
return gr.File.update(interactive=True), gr.Button.update(interactive=True)
def create_langchain(pdf_object):
loader = PDFMinerLoader(pdf_object.name)
index_creator = VectorstoreIndexCreator()
docsearch = index_creator.from_loaders([loader])
chain = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=docsearch.vectorstore.as_retriever(),
input_key="question",
verbose=True,
return_source_documents=True,
)
return chain, gr.Button.update(interactive=True)
def ask_question(chain, question_text):
return chain({"question": question_text})["result"]
with gr.Blocks() as demo:
# Sate objects
chain_state = gr.State()
# Layout
oai_token = gr.Textbox(
label="OpenAI Token",
placeholder="Lm-iIas452gaw3erGtPar26gERGSA5RVkFJQST23WEG524EWEl",
)
pdf_object = gr.File(
label="Upload your CV in PDF format",
file_count="single",
type="file",
interactive=False,
)
gr.Examples(
examples=[
os.path.join(os.path.abspath(""), "sample_data", "CV_AITOR_MIRA.pdf")
],
inputs=pdf_object,
label="Example CV",
)
create_chain_btn = gr.Button(value="Create CVchat", interactive=False)
question_placeholder = """Enumerate the candidate's top 5 hard skills and rate them by importance from 0 to 5.
Example:
- Algebra 5/5"""
question_box = gr.Textbox(label="Question", value=question_placeholder)
qa_button = gr.Button(value="Submit question", interactive=False)
# Actions
oai_token.change(
set_openai_key, inputs=oai_token, outputs=[pdf_object, create_chain_btn]
)
lchain = create_chain_btn.click(
create_langchain, inputs=pdf_object, outputs=[chain_state, qa_button]
)
qa_button.click(
ask_question,
inputs=[chain_state, question_box],
outputs=gr.Textbox(label="Answer"),
)
demo.launch(debug=True)
|