Spaces:
Build error
Build error
| import openai | |
| import gradio as gr | |
| from langchain.chains import RetrievalQA | |
| from langchain.llms import openai | |
| from langchain.document_loaders import PyPDFLoader | |
| from langchain.embeddings.openai import OpenAIEmbeddings | |
| from langchain.vectorstores import FAISS | |
| from langchain.chat_models import ChatOpenAI | |
| from PyPDF2 import PdfReader | |
| def load_pdf(file): | |
| loader = PyPDFLoader(file.name) | |
| documents = loader.load() | |
| return documents | |
| def summarize_pdf(file, openai_api_key): | |
| openai.api_key = openai_api_key | |
| documents = load_pdf(file) | |
| embeddings = OpenAIEmbeddings(openai_api_key = openai_api_key) | |
| vector_store = FAISS.from_documents(documents, embeddings) | |
| llm = ChatOpenAI(model = "gpt-4o", openai_api_key = openai_api_key) | |
| qa_chain = RetrievalQA.from_chain_type( | |
| llm = llm, | |
| chain_type = "stuff", | |
| retriever = vector_store.as_retriever() | |
| ) | |
| response_chain.run("Summarize the content of the research paper.") | |
| return response | |
| def query_pdf(file, user_query, openai_api_key): | |
| # function to handle user queries and provide answers from the document | |
| # set the openai api key dynamically | |
| openai.api_key = openai_api_key | |
| # load and process the pdf | |
| documents = load_pdf(file) | |
| # create embeddings for the documents | |
| embeddings = OpenAIEmbeddings(openai_api_key = openai_api_key) | |
| # use langchain's FAISS vector store to store and sech the embeddings | |
| vector_store = FAISS.from_documents(documents, embeddings) | |
| # create retrievalQA cahin for querying the document | |
| llm = ChatOpenAI(model = "gpt-4o", openai_api_key = openai_api_key) | |
| qa_chain = RetrievalQA.from_chain_type( | |
| llm = llm, | |
| chain_type = "stuff", | |
| retriever = vector_store.as_retriever() | |
| ) | |
| # query the model for user query | |
| response = qa_chain.run(user_query) | |
| return response | |
| def create_gradio_interface(): | |
| # define gradio interface for the summarization | |
| with gr.Blocks() as demo: | |
| gr.Markdown('### ChatPDF and Research Paper Summarizer using GPT-4 and LangChain') | |
| # input field for API key | |
| with gr.Row(): | |
| openai_api_key_input = gr.Textbox(label="Enter OpenAI API Key", type="password", placeholder="Enter your OpenAI API key here") | |
| with gr.Tab("Summarize PDF"): | |
| with gr.Row(): | |
| pdf_file = gr.File(label="Upload PDF Document") | |
| # summarize_btn = gr.Textbox(label="Summary", interactive=False) | |
| summary_output = gr.Textbox(label="Summary", interactive=False) | |
| summarize_btn = gr.Button("Summarize") | |
| clear_btn_summary = gr.Button("Clear Response") | |
| # summarize button logic | |
| summarize_btn.click(summarize_pdf, inputs=[pdf_file, openai_api_key_input], outputs=summary_output) | |
| # clear response button logic for summary tab | |
| clear_btn_summary.click(lambda: "", inputs=[], outputs=summary_output) | |
| with gr.Tab("Ask Questions"): | |
| with gr.Row(): | |
| pdf_file_q = gr.File(label="Upload PDF Document") | |
| user_input = gr.Textbox(label="Enter your question") | |
| answer_output = gr.Textbox(label="Answer", interactive=False) | |
| clear_btn_answer = gr.Button("Clear Response") | |
| # submit question logic | |
| user_input.submit(query_pdf, inputs=[pdf_file_q, user_input, openai_api_key_input], outputs=answer_output) | |
| # clear response button logic for answer tab | |
| clear_btn_answer.click(lambda: "", inputs=[], outputs=answer_output) | |
| user_input.submit(None, None, answer_output) # clear answer when typing new query | |
| return demo | |
| # run gradio app | |
| if __name__ == "__main__": | |
| demo = create_gradio_interface() | |
| demo.launch(debug=True) | |