Spaces:
Running
Running
| import gradio as gr | |
| from langchain.document_loaders import PyMuPDFLoader # for loading the pdf | |
| from langchain.embeddings import OpenAIEmbeddings # for creating embeddings | |
| from langchain.vectorstores import Chroma # for the vectorization part | |
| from langchain.chains import ChatVectorDBChain # for chatting with the pdf | |
| from langchain.llms import OpenAI # the LLM model we'll use (CHatGPT) | |
| class Chat: | |
| def __init__(self, pdf, api_input): | |
| self.api = api_input | |
| loader = PyMuPDFLoader(pdf) | |
| pages = loader.load_and_split() | |
| embeddings = OpenAIEmbeddings(openai_api_key=self.api) | |
| vectordb = Chroma.from_documents(pages, embedding=embeddings, persist_directory=".") | |
| vectordb.persist() | |
| self.pdf_qa = ChatVectorDBChain.from_llm(OpenAI(temperature=0.9, model_name="gpt-3.5-turbo", | |
| openai_api_key=self.api), | |
| vectordb, return_source_documents=True) | |
| def question(self, query): | |
| result = self.pdf_qa({"question": "请使用中文回答" + query, "chat_history": ""}) | |
| print("Answer:") | |
| print(result["answer"]) | |
| return result["answer"] | |
| def analyse(pdf_file, api_input): | |
| print(pdf_file.name) | |
| session = Chat(pdf_file.name, api_input) | |
| return session, "文章分析完成" | |
| def ask_question(data, question): | |
| if data == "": | |
| return "Please upload PDF file first!" | |
| return data.question(question) | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """ | |
| # ChatPDF based on Langchain | |
| """) | |
| data = gr.State() | |
| with gr.Tab("Upload PDF File"): | |
| pdf_input = gr.File(label="PDF File") | |
| api_input = gr.Textbox(label="OpenAI API Key") | |
| result = gr.Textbox() | |
| upload_button = gr.Button("Start Analyse") | |
| question_input = gr.Textbox(label="Your Question", placeholder="Authors of this paper?") | |
| answer = gr.Textbox(label="Answer") | |
| ask_button = gr.Button("Ask") | |
| upload_button.click(fn=analyse, inputs=[pdf_input, api_input], outputs=[data, result]) | |
| ask_button.click(ask_question, inputs=[data, question_input], outputs=answer) | |
| if __name__ == "__main__": | |
| demo.title = "ChatPDF Based on Langchain" | |
| demo.launch() | |