File size: 2,756 Bytes
5e8e8f0 302b34f 5e8e8f0 302b34f 5e8e8f0 28f9d4d 5bfa5bd 5e8e8f0 5bfa5bd 5e8e8f0 28f9d4d 28d750d 28f9d4d 5e8e8f0 4b82b7b 9750f10 5e8e8f0 4b82b7b 4a9ac6b 37e534a 0335ad6 2645c4d 0335ad6 2645c4d 0335ad6 37e534a 5e8e8f0 28f9d4d 243253e 28f9d4d 5e8e8f0 |
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 87 88 89 |
import gradio as gr
from langchain.document_loaders import OnlinePDFLoader
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=350, chunk_overlap=0)
from langchain.llms import OpenAI
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
from langchain.vectorstores import Chroma
from langchain.chains import ConversationalRetrievalChain
def loading_pdf():
return "Loading..."
def pdf_changes(pdf_doc):
loader = OnlinePDFLoader(pdf_doc.name)
documents = loader.load()
texts = text_splitter.split_documents(documents)
db = Chroma.from_documents(texts, embeddings)
retriever = db.as_retriever()
global qa
qa = ConversationalRetrievalChain.from_llm(
llm=OpenAI(temperature=0.5),
retriever=retriever,
return_source_documents=False)
return "Ready"
def add_text(history, text):
history = history + [(text, None)]
return history, ""
def bot(history):
response = infer(history[-1][0], history)
history[-1][1] = response
return history
def infer(question, history):
print(history[-1])
res = []
for human, ai in history[:-1]:
pair = f"Human:{human}\nAI:{ai}"
res.append(pair)
res = ["\n".join(res)]
chat_history = res
print(chat_history)
query = question
result = qa({"question": query, "chat_history": chat_history})
print(result)
return result["answer"]
css="""
#col-container {max-width: 700px; margin-left: auto; margin-right: auto;}
"""
title = """
<div style="text-align: center;max-width: 700px;">
<h1>Chat with PDF</h1>
<p style="text-align: center;">Upload a .PDF from your computer, click the "Load PDF to LangChain" button, <br />
when everything is ready, you can start asking questions about the pdf ;)</p>
</div>
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.HTML(title)
with gr.Column():
pdf_doc = gr.File(label="Load a pdf", file_types=['.pdf'], type="file")
with gr.Row():
langchain_status = gr.Textbox(label="Status", placeholder="", interactive=False)
load_pdf = gr.Button("Load pdf to langchain")
chatbot = gr.Chatbot([], elem_id="chatbot").style(height=350)
with gr.Row():
question = gr.Textbox(label="Question", placeholder="Type your question and hit Enter ")
load_pdf.click(loading_pdf, None, langchain_status, queue=False)
load_pdf.click(pdf_changes, pdf_doc, langchain_status, queue=False)
question.submit(add_text, [chatbot, question], [chatbot, question]).then(
bot, chatbot, chatbot
)
demo.launch() |