File size: 5,383 Bytes
8e315dc
c4587cb
8e315dc
c4587cb
e3e8ff9
c4587cb
 
 
8e315dc
7877a46
c4587cb
0017779
9b3b3ee
0017779
9b3b3ee
 
 
 
0017779
9b3b3ee
 
c4587cb
 
 
 
 
 
 
0017779
c4587cb
8e315dc
34a373d
0017779
34a373d
 
 
 
 
 
 
0017779
b30668d
0017779
 
ede3059
c718b76
 
 
 
 
 
 
 
 
 
 
 
b3cc614
 
 
 
 
c718b76
 
0017779
 
ede3059
0017779
c718b76
b3cc614
 
c718b76
fc86e36
c718b76
0017779
ede3059
0017779
 
 
fc86e36
f5c3915
fc86e36
c718b76
ede3059
 
0017779
 
 
fc86e36
c718b76
 
 
 
9b9214f
ede3059
fc86e36
c718b76
9b9214f
0017779
 
 
c718b76
fc86e36
c718b76
ede3059
0017779
fc86e36
0017779
 
 
c718b76
0017779
c718b76
0017779
c718b76
0017779
 
 
 
c718b76
0017779
c718b76
 
fc86e36
c718b76
0017779
 
 
fc86e36
ede3059
b30668d
b3cc614
 
 
b30668d
 
8e315dc
b30668d
9e67cb5
8e315dc
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import streamlit as st
from groq import Groq

# Groq API Key (replace with your actual API key)
groq_api_key = "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"

# Initialize Groq client
client = Groq(api_key=groq_api_key)

# Function to fetch personalized advice using Groq API
def get_personalized_advice(user_data):
    """Fetch personalized advice based on user data."""
    query = f"""
    Based on the following student's responses:
    - Anxiety level: {user_data['anxiety_level']}
    - Self-esteem: {user_data['self_esteem']}
    - Mental health history: {user_data['mental_health_history']}
    - Stress level: {user_data['stress_level']}
    Provide professional, personalized mental health advice.
    """

    try:
        response = client.chat.completions.create(
            messages=[{"role": "user", "content": query}],
            model="llama-3.3-70b-versatile",
        )
        return response.choices[0].message.content
    except Exception as e:
        st.error(f"Error fetching advice: {str(e)}")
        return None

def stress_level_to_string(stress_level):
    """Convert stress level to string representation."""
    if stress_level == 0:
        return "Low"
    elif stress_level == 1:
        return "Moderate"
    else:
        return "High"

# Chatbot interface
def chatbot_interface():
    st.title("πŸŽ“ Student Health and Stress Chatbot")
    st.write("Hello! I’m here to assist you in assessing your well-being and provide helpful advice. Let's get started! 😊")

    # Initialize session state
    if 'step' not in st.session_state:
        st.session_state.step = 0
        st.session_state.user_data = {}

    def next_step():
        st.session_state.step += 1

    def show_input_error(message="Please provide a valid input."):
        st.error(message)
        return False

    def clear_data():
        """Clear session data and reset to initial step."""
        st.session_state.step = 0
        st.session_state.user_data = {}

    # Step 0: Welcome message and initial question
    if st.session_state.step == 0:
        st.write("Bot: Welcome to the Student Health and Stress Assessment. Let's start with some simple questions.")
        start_button = st.button("Start Assessment")
        clear_button = st.button("Clear All")
        if start_button:
            next_step()
        if clear_button:
            clear_data()

    # Step 1: Ask for anxiety level
    elif st.session_state.step == 1:
        st.write("Bot: On a scale of 1 to 10, how would you rate your current anxiety level?")
        anxiety_level = st.slider("Anxiety Level", 1, 10, 5)
        st.session_state.user_data['anxiety_level'] = anxiety_level
        next_step_button = st.button("Next")
        if next_step_button:
            next_step()

    # Step 2: Ask for self-esteem
    elif st.session_state.step == 2:
        st.write("Bot: On a scale from 1 to 10, how would you rate your current self-esteem?")
        self_esteem = st.slider("Self-esteem Level", 1, 10, 5)
        st.session_state.user_data['self_esteem'] = self_esteem
        next_step_button = st.button("Next")
        if next_step_button:
            next_step()

    # Step 3: Ask for mental health history
    elif st.session_state.step == 3:
        st.write("Bot: How would you describe your mental health history?")
        mental_health_history = st.selectbox(
            "Please select the option that best represents your mental health history:",
            ["None", "Minor Issues", "Moderate Issues", "Severe Issues"]
        )
        st.session_state.user_data['mental_health_history'] = mental_health_history
        next_step_button = st.button("Next")
        if next_step_button:
            next_step()

    # Step 4: Ask for stress level
    elif st.session_state.step == 4:
        st.write("Bot: On a scale from 0 to 2, how would you rate your current stress level?")
        stress_level = st.radio("Stress Level", [0, 1, 2])
        st.session_state.user_data['stress_level'] = stress_level
        next_step_button = st.button("Next")
        if next_step_button:
            next_step()

    # Step 5: Provide personalized advice based on responses
    elif st.session_state.step == 5:
        st.write("Bot: Thank you for providing the information! Here's a summary of your responses:")
        user_data = st.session_state.user_data
        st.write(f"Bot: Your Anxiety Level: {user_data['anxiety_level']}")
        st.write(f"Bot: Your Self-Esteem Level: {user_data['self_esteem']}")
        st.write(f"Bot: Mental Health History: {user_data['mental_health_history']}")
        st.write(f"Bot: Your Stress Level: {stress_level_to_string(user_data['stress_level'])}")

        st.subheader("πŸ”” Personalized Mental Health Advice:")
        advice = get_personalized_advice(user_data)
        if advice:
            st.write(f"Bot: {advice}")
        else:
            st.write("Bot: I'm unable to retrieve personalized advice at the moment, but feel free to try again later.")
        
        # Option to restart or clear data
        restart_button = st.button("Start Over")
        clear_button = st.button("Clear All")
        if restart_button:
            clear_data()
        if clear_button:
            clear_data()

# Main function to run the chatbot
def main():
    chatbot_interface()

if __name__ == "__main__":
    main()