File size: 2,473 Bytes
e80297a f4cb80a e80297a f4cb80a e80297a f4cb80a e80297a f4cb80a e80297a f4cb80a e80297a 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 |
import gradio as gr
import logging
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import PDFMinerLoader
from langchain.indexes import VectorstoreIndexCreator
import os
def set_openai_key(raw_key):
logging.warning(raw_key)
os.environ["OPENAI_API_KEY"] = raw_key
def create_langchain(pdf_object):
logging.info(f"Creating langchain for {pdf_object.name}")
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):
logging.info(type(chain))
return chain({"question": question_text})["result"]
def create_ask(pdf_object, question_text):
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({"question": question_text})["result"]
with gr.Blocks() as demo:
# pdf_button = gr.Button(value="pdf_button")
oai_token = gr.Textbox(
label="OpenAI Token",
placeholder="Lm-iIas452gaw3erGtPar26gERGSA5RVkFJQST23WEG524EWEl",
)
oai_token.change(set_openai_key, oai_token)
pdf_object = gr.File(
label="Upload your CV in PDF format", file_count="single", type="file"
)
chain_state = gr.State()
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)
lchain = pdf_object.change(
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)
|