noureenac's picture
Update app.py
d566d0b verified
Raw
History Blame Contribute Delete
2.9 kB
import streamlit as st
from langchain_community.llms import HuggingFaceHub
from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.document_loaders import PyPDFLoader, DirectoryLoader
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
from langchain.text_splitter import RecursiveCharacterTextSplitter
import os
import zipfile
# Unzip the data folder if not already extracted
zip_path = "data.zip"
extract_folder = "data/"
if os.path.exists(zip_path) and not os.path.exists(extract_folder):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_folder)
print("Data folder unzipped successfully.")
import pkg_resources
installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
print(installed_packages)
# Initialize LLM
def initialize_llm():
llm = HuggingFaceHub(
repo_id="meta-llama/Llama-2-7b-chat-hf",
model_kwargs={"temperature": 0.5, "max_length": 512}
)
return llm
# Create vector DB
def create_vector_db():
loader = DirectoryLoader("data/", glob="*.pdf", loader_cls=PyPDFLoader)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(documents)
embeddings = HuggingFaceBgeEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vector_db = Chroma.from_documents(texts, embeddings, persist_directory="./chroma_db")
vector_db.persist()
return vector_db
# Setup QA Chain
def setup_qa_chain(vector_db, llm):
retriever = vector_db.as_retriever()
prompt_template = """You are a compassionate mental health chatbot. Respond thoughtfully:
{context}
User: {question}
Chatbot:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
chain_type_kwargs={"prompt": PROMPT}
)
return qa_chain
# Streamlit UI
st.title("🧠 Mental Health Chatbot 🤖")
st.write("A compassionate chatbot designed to assist with mental well-being.")
llm = initialize_llm()
db_path = "chroma_db"
if not os.path.exists(db_path):
vector_db = create_vector_db()
else:
embeddings = HuggingFaceBgeEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vector_db = Chroma(persist_directory=db_path, embedding_function=embeddings)
qa_chain = setup_qa_chain(vector_db, llm)
user_input = st.text_input("You: ", "")
if st.button("Send"):
if user_input:
response = qa_chain.run(user_input)
st.write(f"Chatbot: {response}")
else:
st.warning("Please enter a valid input.")
st.markdown("**Note:** For urgent mental health concerns, contact a licensed professional.")