CoolFace
Apppublic

csalabs/SampleModel-2-Running

sourceHugging Facellama2updated 3y agoView on Hugging Face
0likes
app.py104 linesDownload Raw Back to root
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()