Spaces:
Build error
Build error
| import os | |
| import gradio as gr | |
| from langchain_groq import ChatGroq | |
| from langchain.embeddings import HuggingFaceEmbeddings | |
| from langchain.document_loaders import PyPDFLoader | |
| from langchain.vectorstores import Chroma | |
| from langchain.chains import RetrievalQA | |
| from langchain.prompts import PromptTemplate | |
| from langchain_text_splitters import RecursiveCharacterTextSplitter | |
| import requests | |
| data_dir = "/home/user/app" | |
| os.makedirs(data_dir, exist_ok=True) | |
| pdf_filenames = [ | |
| "mental_health_document.pdf", | |
| "effects_of_mental_health.pdf", | |
| "who_mental_health.pdf" | |
| ] | |
| def initialize_llm(): | |
| return ChatGroq( | |
| temperature=0, | |
| groq_api_key="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", | |
| model_name="llama-3.3-70b-versatile" | |
| ) | |
| def create_vector_db(): | |
| documents = [] | |
| for filename in pdf_filenames: | |
| file_path = os.path.join(data_dir, filename) | |
| if not os.path.exists(file_path): | |
| url = f"https://huggingface.co/spaces/ANXI_BOT/{filename}" | |
| response = requests.get(url) | |
| if response.status_code == 200: | |
| with open(file_path, "wb") as file: | |
| file.write(response.content) | |
| print(f"Downloaded {filename}") | |
| else: | |
| print(f"Failed to download {filename}") | |
| continue | |
| loader = PyPDFLoader(file_path) | |
| documents.extend(loader.load()) | |
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) | |
| texts = text_splitter.split_documents(documents) | |
| embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2') | |
| vector_db = Chroma.from_documents(texts, embeddings, persist_directory='./chroma_db') | |
| vector_db.persist() | |
| print("Chroma DB created and data saved") | |
| return vector_db | |
| def load_vector_db(): | |
| db_path = "./chroma_db" | |
| if not os.path.exists(db_path): | |
| return create_vector_db() | |
| else: | |
| embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2') | |
| return Chroma(persist_directory=db_path, embedding_function=embeddings) | |
| def setup_qa_chain(vector_db, llm): | |
| retriever = vector_db.as_retriever() | |
| prompt_template = """ | |
| You are a compassionate and professional mental health chatbot. Respond thoughtfully: | |
| {context} | |
| User: {question} | |
| Chatbot: | |
| """ | |
| PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"]) | |
| return RetrievalQA.from_chain_type( | |
| llm=llm, | |
| chain_type="stuff", | |
| retriever=retriever, | |
| return_source_documents=True, | |
| chain_type_kwargs={"prompt": PROMPT} | |
| ) | |
| def chatbot_response(query, chat_history=[]): | |
| llm = initialize_llm() | |
| vector_db = load_vector_db() | |
| qa_chain = setup_qa_chain(vector_db, llm) | |
| result = qa_chain.invoke({"query": query}) | |
| chat_history.append((query, result["result"])) | |
| return chat_history | |
| def gradio_interface(): | |
| with gr.Blocks(css=""" | |
| body { | |
| background-color: #F8E8EE; /* Pastel pink background */ | |
| } | |
| .gradio-container { | |
| background: #FFF5F7; /* Light pinkish-white for contrast */ | |
| padding: 20px; | |
| border-radius: 15px; | |
| box-shadow: 2px 2px 15px rgba(0, 0, 0, 0.1); | |
| } | |
| button { | |
| background-color: #FFB6C1 !important; /* Pastel pink buttons */ | |
| color: white !important; | |
| border-radius: 10px; | |
| padding: 10px; | |
| border: none; | |
| } | |
| """) as demo: | |
| gr.Markdown(""" | |
| # Mental Health Chatbot | |
| **A gentle and supportive space for mental well-being.** | |
| """) | |
| chatbot = gr.Chatbot() | |
| query_input = gr.Textbox(label="Your Question:", placeholder="Type your question here...") | |
| submit_btn = gr.Button("Ask") | |
| submit_btn.click(fn=chatbot_response, inputs=[query_input, chatbot], outputs=chatbot) | |
| demo.launch(share=True) | |
| gradio_interface() | |