Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from streamlit_chat import message | |
| from langchain.chains import ConversationalRetrievalChain | |
| from langchain.embeddings import HuggingFaceEmbeddings | |
| from langchain.llms import LlamaCpp | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| from langchain.vectorstores import FAISS | |
| from langchain.memory import ConversationBufferMemory | |
| from langchain.document_loaders import PyPDFLoader | |
| import os | |
| import tempfile | |
| icon = Image.open("chatbot.png") | |
| icon = icon.resize((64, 64)) # You can adjust the size as per your requirement | |
| # Set the page config with the image icon | |
| st.set_page_config(page_title="Multi-PDF ChatBot", page_icon=icon) | |
| def initialize_session_state(): | |
| if 'history' not in st.session_state: | |
| st.session_state['history'] = [] | |
| if 'generated' not in st.session_state: | |
| st.session_state['generated'] = ["Hello! Ask me anything about π€"] | |
| if 'past' not in st.session_state: | |
| st.session_state['past'] = ["Hey! π"] | |
| def conversation_chat(query, chain, history): | |
| result = chain({"question": query, "chat_history": history}) | |
| history.append((query, result["answer"])) | |
| return result["answer"] | |
| def display_chat_history(chain): | |
| reply_container = st.container() | |
| container = st.container() | |
| user_input = st.chat_input(placeholder="Please describe your grievance here...", key='input') | |
| if st.button("What is CPRAM?", key="cpram_button"): | |
| with st.spinner('Generating response...'): | |
| output = conversation_chat("What is CPRAM?", chain, st.session_state['history']) | |
| st.session_state['past'].append("What is CPRAM?") | |
| st.session_state['generated'].append(output) | |
| elif st.button("How to fill grievance form?", key="grievance_button"): | |
| with st.spinner('Generating response...'): | |
| output = conversation_chat("How to fill grievance form?", chain, st.session_state['history']) | |
| st.session_state['past'].append("How to fill grievance form?") | |
| st.session_state['generated'].append(output) | |
| elif user_input: | |
| with st.spinner('Generating response...'): | |
| output = conversation_chat(user_input, chain, st.session_state['history']) | |
| st.session_state['past'].append(user_input) | |
| st.session_state['generated'].append(output) | |
| if st.session_state['generated']: | |
| with reply_container: | |
| for i in range(len(st.session_state['generated'])): | |
| message(st.session_state["past"][i], is_user=True, key=str(i) + '_user') | |
| message(st.session_state["generated"][i], key=str(i)) | |
| def create_conversational_chain(vector_store): | |
| # Create llm | |
| llm = LlamaCpp( | |
| streaming = True, | |
| model_path="stable-code-3b.Q3_K_S.gguf", #model_path="mistral-7b-instruct-v0.1.Q2_K.gguf", | |
| temperature=0.5, | |
| top_p=1, | |
| verbose=True, | |
| n_ctx=4096 | |
| ) | |
| memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) | |
| chain = ConversationalRetrievalChain.from_llm(llm=llm, chain_type='stuff', | |
| retriever=vector_store.as_retriever(search_kwargs={"k": 2}), | |
| memory=memory) | |
| return chain | |
| def main(): | |
| # Initialize session state | |
| initialize_session_state() | |
| st.title("π€ CPRAM Grievance Support") | |
| # Initialize Streamlit | |
| # Create embeddings | |
| embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2", | |
| model_kwargs={'device': 'cpu'}) | |
| # Create vector store | |
| vector_store = FAISS.load_local("vector_data", embeddings) | |
| # Create the chain object | |
| chain = create_conversational_chain(vector_store) | |
| display_chat_history(chain) | |
| if __name__ == "__main__": | |
| main() |