Summary
How to add a reset_button that reset the st.session_state.conversation and chat history from the handle_userinput? Right now I have the reset_button created in “main” function but this simply does not work (it just continue with the conversation). Any thoughts?
Sorry for the basic question but I’m completely new to coding.
Steps to reproduce
Code snippet:
reset_button_key = "reset_button"
reset_button = st.button("Reset Chat",key=reset_button_key)
if reset_button:
st.session_state.conversation = None
st.session_state.chat_history = None
import streamlit as st
from dotenv import load_dotenv
from PyPDF2 import PdfReader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings, HuggingFaceInstructEmbeddings
from langchain.vectorstores import FAISS
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
from langchain.chains import LLMChain
from langchain.chains.conversational_retrieval.prompts import CONDENSE_QUESTION_PROMPT
from htmlTemplates import css, bot_template, user_template
def get_pdf_text(pdf_docs):
text = ""
for pdf in pdf_docs:
pdf_reader = PdfReader(pdf)
for page in pdf_reader.pages:
text += page.extract_text()
return text
def get_text_chunks(text):
text_splitter = CharacterTextSplitter(
separator="\n",
chunk_size=1000,
chunk_overlap=20,
length_function=len
)
chunks = text_splitter.split_text(text)
return chunks
def get_vectorstore(text_chunks):
embeddings = OpenAIEmbeddings()
#embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
return vectorstore
def get_conversation_chain(vectorstore):
llm = ChatOpenAI(temperature=0)
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)
conversation_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=vectorstore.as_retriever(),
chain_type="stuff",
memory=memory
)
return conversation_chain
def handle_userinput(user_question):
if st.session_state.conversation is None:
return
response = st.session_state.conversation({'question': user_question})
st.session_state.chat_history = response['chat_history']
chat_history_reversed = reversed(st.session_state.chat_history)
for i, message in enumerate(chat_history_reversed):
if i % 2 == 0:
st.write(bot_template.replace(
"{{MSG}}", message.content), unsafe_allow_html=True)
else:
st.write(user_template.replace(
"{{MSG}}", message.content), unsafe_allow_html=True)
def main():
load_dotenv()
st.set_page_config(page_title="Chat with multiple PDFs", page_icon=":books:")
st.write(css, unsafe_allow_html=True)
if "conversation" not in st.session_state:
st.session_state.conversation = None
if "chat_history" not in st.session_state:
st.session_state.chat_history = None
st.header("Chat with multiple PDFs :books:")
user_question = st.text_input("Ask a question about your documents:")
if user_question:
handle_userinput(user_question)
reset_button_key = "reset_button"
reset_button = st.button("Reset Chat",key=reset_button_key)
if reset_button:
st.session_state.conversation = None
st.session_state.chat_history = None
with st.sidebar:
st.subheader("Your documents")
pdf_docs = st.file_uploader("Upload your PDFs here and click on 'Process'", accept_multiple_files=True)
if st.button("Process"):
with st.spinner("Processing"):
#get pdf text
raw_text = get_pdf_text(pdf_docs)
#get the text chunks
text_chunks = get_text_chunks(raw_text)
#create vector store
vectorstore = get_vectorstore(text_chunks)
#create conversation chain
st.session_state.conversation = get_conversation_chain(vectorstore)
if __name__== '__main__':
main()
I’m using Python on VScode