csalabs/SampleModel-2-Running
0
1import streamlit as st2from dotenv import load_dotenv3from PyPDF2 import PdfReader4from langchain.text_splitter import CharacterTextSplitter5from langchain.embeddings import OpenAIEmbeddings, HuggingFaceInstructEmbeddings6from langchain.vectorstores import FAISS7from langchain.chat_models import ChatOpenAI8from langchain.memory import ConversationBufferMemory9from langchain.chains import ConversationalRetrievalChain10from htmlTemp import css, bot_template, user_template11from langchain.llms import HuggingFaceHub12 13def get_pdf_text(pdf_docs):14 text = ""15 for pdf in pdf_docs:16 pdf_reader = PdfReader(pdf)17 for page in pdf_reader.pages:18 text += page.extract_text()19 return text20 21 22def get_text_chunks(text):23 text_splitter = CharacterTextSplitter(24 separator="\n",25 chunk_size=1000,26 chunk_overlap=200,27 length_function=len28 )29 chunks = text_splitter.split_text(text)30 return chunks31 32 33def get_vectorstore(text_chunks):34 embeddings = OpenAIEmbeddings()35 # embeddings = HuggingFaceInstructEmbeddings(model_name="NousResearch/Llama-2-7b-hf")36 vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)37 return vectorstore38 39 40def get_conversation_chain(vectorstore):41 llm = ChatOpenAI()42 # llm = HuggingFaceHub(repo_id="NousResearch/Llama-2-7b-hf", model_kwargs={"temperature":0.5, "max_length":512})43 44 memory = ConversationBufferMemory(45 memory_key='chat_history', return_messages=True)46 conversation_chain = ConversationalRetrievalChain.from_llm(47 llm=llm,48 retriever=vectorstore.as_retriever(),49 memory=memory50 )51 return conversation_chain52 53 54def handle_userinput(user_question):55 response = st.session_state.conversation({'question': user_question})56 st.session_state.chat_history = response['chat_history']57 58 for i, message in enumerate(st.session_state.chat_history):59 if i % 2 == 0:60 st.write(user_template.replace(61 "{{MSG}}", message.content), unsafe_allow_html=True)62 else:63 st.write(bot_template.replace(64 "{{MSG}}", message.content), unsafe_allow_html=True)65 66 67def main():68 load_dotenv()69 st.set_page_config(page_title="Chat with multiple PDFs",70 page_icon=":books:")71 st.write(css, unsafe_allow_html=True)72 73 if "conversation" not in st.session_state:74 st.session_state.conversation = None75 if "chat_history" not in st.session_state:76 st.session_state.chat_history = None77 78 st.header("Chat with multiple PDFs :books:")79 user_question = st.text_input("Ask a question about your documents:")80 if user_question:81 handle_userinput(user_question)82 83 with st.sidebar:84 st.subheader("Your documents")85 pdf_docs = st.file_uploader(86 "Upload your PDFs here and click on 'Process'", accept_multiple_files=True)87 if st.button("Process"):88 with st.spinner("Processing"):89 # get pdf text90 raw_text = get_pdf_text(pdf_docs)91 92 # get the text chunks93 text_chunks = get_text_chunks(raw_text)94 95 # create vector store96 vectorstore = get_vectorstore(text_chunks)97 98 # create conversation chain99 st.session_state.conversation = get_conversation_chain(100 vectorstore)101 102 103if __name__ == '__main__':104 main()