Spaces:
Build error
Build error
| 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.") | |