Spaces:
Runtime error
Runtime error
File size: 3,606 Bytes
9054137 752610d 9054137 90d9fe0 752610d 9054137 f9a51f1 9054137 f9a51f1 9054137 f9a51f1 9054137 f9a51f1 9054137 f9a51f1 9054137 f9a51f1 9054137 f9a51f1 6ec818e 9054137 6ec818e 9054137 f9a51f1 9054137 6ec818e 9054137 6ec818e 9054137 6ec818e 9054137 6ec818e 9054137 e8060ec 9054137 e8060ec 9054137 b63876a 9054137 6ec818e 9054137 b63876a 6ec818e 9054137 6ec818e 9054137 f73474f 3c631fa 6ec818e |
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
import gradio as gr
import os
import time
from langchain.document_loaders import OnlinePDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.llms import OpenAI
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import ConversationalRetrievalChain
def loading_pdf():
print("loading_pdf")
return "Loading..."
def pdf_changes(pdf_doc, open_ai_key):
print("pdf_change")
if openai_key is not None:
os.environ['OPENAI_API_KEY'] = open_ai_key
loader = OnlinePDFLoader(pdf_doc.name)
print(loader)
documents = loader.load()
print(documents)
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
print(text_splitter)
texts = text_splitter.split_documents(documents)
print(texts)
embeddings = OpenAIEmbeddings()
print(embeddings)
db = Chroma.from_documents(texts, embeddings)
print(db)
retriever = db.as_retriever()
print(retriever)
global qa
qa = ConversationalRetrievalChain.from_llm(
llm=OpenAI(temperature=0.5),
retriever=retriever,
return_source_documents=False)
return "Ready"
else:
return "You forgot OpenAI API key"
def add_text(history, text):
history = history + [(text, None)]
print(history)
return history, ""
def bot(history):
response = infer(history[-1][0], history)
history[-1][1] = ""
for character in response:
history[-1][1] += character
time.sleep(0.05)
yield history
def infer(question, history):
res = []
for human, ai in history[:-1]:
pair = (human, ai)
res.append(pair)
chat_history = res
#print(chat_history)
query = question
result = qa({"question": query, "chat_history": chat_history})
#print(result)
print(result["answer"])
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 • OpenAI</h1>
<p style="text-align: center;">Upload a .PDF from your computer, click the "Load PDF" button, <br />
when everything is ready, you can start asking questions about the pdf <br />
This version is set to store chat history, and uses OpenAI as LLM, don't forget to copy/paste your OpenAI API key</p>
</div>
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.HTML(title)
with gr.Column():
openai_key = gr.Textbox(label="You OpenAI API key", type="password")
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")
chatbot = gr.Chatbot([], elem_id="chatbot").style(height=350)
question = gr.Textbox(label="Question", placeholder="Type your question and hit Enter ")
submit_btn = gr.Button("Send Message")
load_pdf.click(loading_pdf, None, langchain_status, queue=False)
load_pdf.click(pdf_changes, inputs=[pdf_doc, openai_key], outputs=[langchain_status], queue=False)
question.submit(add_text, [chatbot, question], [chatbot, question]).then(
bot, chatbot, chatbot
)
submit_btn.click(add_text, [chatbot, question], [chatbot, question]).then(
bot, chatbot, chatbot)
demo.launch()
|