QA_from_pdf / app.py
adnaniqbal001's picture
Update app.py
235d036 verified
raw
history blame
1.86 kB
import numpy as np
import pandas as pd
import configparser
import streamlit as st
import chromadb
import langchain
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import ConversationalRetrievalChain
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import PyPDFLoader
import tempfile
import shutil
import os
import openai
# Replace with your OpenAI API key
api_key = "your_openai_api_key_here"
if not api_key:
st.error("I can not find API key")
else:
openai.api_key = api_key
st.title('PDF Documents Q&A App')
uploaded_file = st.file_uploader("Please upload your PDF file", type=["pdf"])
if uploaded_file is not None:
# Save as tempfile
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmpfile:
shutil.copyfileobj(uploaded_file, tmpfile)
file_path = tmpfile.name
# Load and split PDF using PyPDFLoader
loader = PyPDFLoader(file_path)
pages = loader.load_and_split()
# Initialize model and vectorstore
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(pages, embedding=embeddings, persist_directory=".")
vectorstore.persist()
# Create Q&A chain
pdf_qa = ConversationalRetrievalChain.from_llm(llm, vectorstore.as_retriever(), return_source_documents=True)
# Get question from user
question = st.text_input("Please input your question:")
if st.button('Get Answer'):
result = pdf_qa({"question": question, "chat_history": []})
answer = result["answer"]
st.write("Answer:", answer)
# Delete tempfile
if file_path:
os.unlink(file_path)