Spaces:
Sleeping
Sleeping
import gradio as gr | |
from langchain.llms import Replicate | |
from langchain.vectorstores import Pinecone | |
from langchain.text_splitter import CharacterTextSplitter | |
from langchain.document_loaders import PyPDFLoader | |
from langchain.llms import HuggingFaceHub | |
from langchain.vectorstores import Chroma | |
from langchain.embeddings import HuggingFaceEmbeddings | |
from langchain.chains import ConversationalRetrievalChain | |
from datasets import load_dataset | |
import os | |
key = os.environ.get('API') | |
os.environ["REPLICATE_API_TOKEN"] = key | |
import sentence_transformers | |
def loading_pdf(): | |
return "Loading..." | |
def pdf_changes(pdf_doc): | |
loader = PyPDFLoader(pdf_doc.name) | |
documents = loader.load() | |
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) | |
texts = text_splitter.split_documents(documents) | |
embeddings = HuggingFaceEmbeddings() | |
db = Chroma.from_documents(texts, embeddings) | |
retriever = db.as_retriever(search_kwargs={'k': 2}) | |
llm = Replicate( | |
model="a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5", | |
input={"temperature": 0.2, "max_length": 3000, "length_penalty":0.5, "num_beams":3} | |
) | |
global qa | |
qa = ConversationalRetrievalChain.from_llm( | |
llm, | |
retriever, | |
return_source_documents=True | |
) | |
return "Ready" | |
def text(history, text): | |
result = qa({'question': text, 'chat_history': history}) | |
history.append((text, result['answer'])) | |
return history,"" | |
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> | |
""" | |
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") | |
load_pdf = gr.Button("Load PDF") | |
langchain_status = gr.Textbox(label="Status", placeholder="", interactive=False) | |
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(pdf_changes, inputs=[pdf_doc], outputs=[langchain_status], queue=False) | |
question.submit(text, [chatbot, question], [chatbot, question]) | |
submit_btn.click(text, [chatbot, question], [chatbot, question]) | |
demo.launch() | |