DrishtiSharma's picture
Update app.py
5d13b89 verified
raw
history blame
2.81 kB
import os
import streamlit as st
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma
from langchain_groq import ChatGroq
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
# Ensure required environment variables are set
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
if not GROQ_API_KEY:
st.error("GROQ_API_KEY is not set. Please configure it in Hugging Face Spaces secrets.")
st.stop()
# Function to set up the vectorstore
def setup_vectorstore():
working_dir = os.path.dirname(os.path.abspath(__file__))
persist_directory = f"{working_dir}/vector_db_dir"
# Initialize HuggingFace Embeddings
embeddings = HuggingFaceEmbeddings()
# Initialize Chroma vectorstore
vectorstore = Chroma(
persist_directory=persist_directory,
embedding_function=embeddings
)
return vectorstore
# Function to set up the chat chain
def chat_chain(vectorstore):
llm = ChatGroq(model="llama-3.1-70b-versatile",
temperature=0,
groq_api_key=GROQ_API_KEY)
retriever = vectorstore.as_retriever()
memory = ConversationBufferMemory(
llm=llm,
output_key="answer",
memory_key="chat_history",
return_messages=True
)
chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=retriever,
chain_type="stuff",
memory=memory,
verbose=True,
return_source_documents=True
)
return chain
# Streamlit UI configuration
st.set_page_config(
page_title="Multi Doc Chat",
page_icon="πŸ“š",
layout="centered"
)
st.title("πŸ“š Multi Documents Chatbot")
# Initialize session state variables
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
if "vectorstore" not in st.session_state:
st.session_state.vectorstore = setup_vectorstore()
if "conversational_chain" not in st.session_state:
st.session_state.conversational_chain = chat_chain(st.session_state.vectorstore)
# Display chat history
for message in st.session_state.chat_history:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# User input
user_input = st.chat_input("Ask AI...")
if user_input:
st.session_state.chat_history.append({"role": "user", "content": user_input})
with st.chat_message("user"):
st.markdown(user_input)
with st.chat_message("assistant"):
# Generate response
response = st.session_state.conversational_chain({"question": user_input})
assistant_response = response["answer"]
st.markdown(assistant_response)
st.session_state.chat_history.append({"role": "assistant", "content": assistant_response})