| 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 = qa_chain.run("Summarize the content of the research paper.") |
| return response |
|
|
| |
| def query_pdf(file, user_query, 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 = qa_chain.run(user_query) |
| return response |
|
|
| |
| def create_gradio_interface(): |
| with gr.Blocks() as demo: |
| gr.Markdown("### ChatPDF and Research Paper Summarizer using GPT-4 and LangChain") |
| |
| |
| 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.Button("Summarize") |
| summary_output = gr.Textbox(label="Summary", interactive=False) |
| clear_btn_summary = gr.Button("Clear Response") |
|
|
| |
| summarize_btn.click(summarize_pdf, inputs=[pdf_file, openai_api_key_input], outputs=summary_output) |
|
|
| |
| 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") |
|
|
| |
| user_input.submit(query_pdf, inputs=[pdf_file_q, user_input, openai_api_key_input], outputs=answer_output) |
|
|
| |
| clear_btn_answer.click(lambda: "", inputs=[], outputs=answer_output) |
|
|
| user_input.submit(None, None, answer_output) |
| |
| return demo |
|
|
| |
| if __name__ == "__main__": |
| demo = create_gradio_interface() |
| demo.launch(debug=True) |