File size: 3,015 Bytes
fd64912
a5fe917
b4bd0de
a5fe917
b4bd0de
fd64912
b4bd0de
 
 
 
b1dc82e
b4bd0de
 
b1dc82e
 
b4bd0de
 
 
 
 
 
b1dc82e
b4bd0de
fd64912
b4bd0de
 
 
b1dc82e
b4bd0de
b1dc82e
d7596e9
b4bd0de
d7596e9
b4bd0de
 
a5fe917
b4bd0de
 
 
 
 
 
 
 
a5fe917
b4bd0de
 
 
 
 
b1dc82e
b4bd0de
 
 
 
 
 
 
 
 
 
 
b1dc82e
b4bd0de
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import streamlit as st
from transformers import pipeline
from gtts import gTTS
from youtubesearchpython import VideosSearch
import os

# Initialize conversational models
empathy_bot = pipeline("text2text-generation", model="mrm8488/t5-base-finetuned-empathy")
general_bot = pipeline("text-generation", model="microsoft/DialoGPT-medium")
sentiment_analysis = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")

# Set up Streamlit page
st.set_page_config(page_title="Grief and Loss Support Bot", page_icon="🌿", layout="centered")
st.markdown("""
    <style>
    .css-1d391kg { background-color: #F3F7F6; }
    .css-ffhzg2 { font-size: 1.5em; font-weight: 500; color: #4C6D7D; }
    .stTextInput>div>div>input { background-color: #D8E3E2; }
    .stButton>button { background-color: #A9D0B6; color: white; border-radius: 5px; }
    .stButton>button:hover { background-color: #8FB79A; }
    .stTextInput>div>label { color: #4C6D7D; }
    </style>
""", unsafe_allow_html=True)

# Title
st.title("Grief and Loss Support Bot 🌿")
st.subheader("Your compassionate companion in tough times πŸ’š")

# Get user input
user_input = st.text_input("Share what's on your mind...", placeholder="Type here...", max_chars=500)

# Check if user has entered text
if user_input:
    # Run sentiment analysis for crisis detection
    sentiment = sentiment_analysis(user_input)[0]
    
    # Use empathy model for more specific support if the user is distressed
    if sentiment['label'] == 'NEGATIVE' and sentiment['score'] > 0.8:
        response = empathy_bot(user_input, max_length=150)[0]['generated_text']
    else:
        response = general_bot(user_input, max_length=150)[0]['generated_text']
    
    # Display response
    st.text_area("Bot's Response:", response, height=150)

    # Text-to-speech output
    tts = gTTS(response, lang='en')
    audio_file = "response.mp3"
    tts.save(audio_file)
    st.audio(audio_file, format="audio/mp3", use_container_width=True)

    # Suggest a productive activity based on detected keywords
    if any(keyword in user_input.lower() for keyword in ["lonely", "lost", "sad"]):
        st.info("Here's a suggestion to help you cope:")
        hobbies = ["journaling", "yoga", "painting"]
        activity = st.selectbox("Choose an activity you'd like to try:", hobbies)
        
        # Search YouTube for videos related to the selected activity
        videosSearch = VideosSearch(activity, limit=2)
        video_links = [result['link'] for result in videosSearch.result()['result']]
        for link in video_links:
            st.write(link)

    # Crisis resources
    crisis_keywords = ["help", "suicide", "depressed", "emergency", "hurt", "lost"]
    if any(keyword in user_input.lower() for keyword in crisis_keywords):
        st.warning("It seems like you might be in distress. Please reach out to a crisis hotline or a trusted individual.")
        st.write("[Find emergency resources here](https://www.helpguide.org/find-help.htm)")