File size: 6,521 Bytes
48ad81c
aeb7752
868289f
37c12fe
2745b9c
48ad81c
1ab5dc9
 
 
a25a55c
48ad81c
37c12fe
48ad81c
1ab5dc9
 
b382f24
37c12fe
48ad81c
 
868289f
 
 
 
 
0bb182a
868289f
 
dac5058
0bb182a
dac5058
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43471b3
dac5058
37c12fe
 
 
 
 
dac5058
37c12fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e1e605f
868289f
 
9ea96c4
240a1f8
 
 
 
 
 
9ea96c4
 
 
 
 
 
 
 
 
 
 
240a1f8
 
 
 
 
 
 
 
0bb182a
868289f
 
 
 
240a1f8
868289f
0bb182a
868289f
240a1f8
 
 
 
 
 
 
 
0bb182a
868289f
 
 
 
 
 
 
 
 
 
 
 
240a1f8
 
868289f
240a1f8
 
 
 
 
5117e78
37c12fe
 
 
 
 
 
 
 
 
e1e605f
0bb182a
 
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
143
144
145
146
147
148
149
150
151
152
153
import os
import streamlit as st
import pandas as pd
import requests
from groq import Groq

import os

# Fetch the API key
groq_api_key = "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"

# Check if the API key is available
if not groq_api_key:
    raise ValueError("GROQ_API_KEY is not set. Please provide a valid API key.")


# Initialize the GROQ client with the fetched API key
groq_client = Groq(api_key=groq_api_key)

# Function to load and preprocess data
@st.cache_data
def load_data(file):
    df = pd.read_csv(file)
    return df

# Function to provide detailed health advice based on user data
def provide_observed_advice(data):
    advice = []

    # High depression and anxiety with low stress-relief activities
    if data['depression'] > 7 and data['anxiety'] > 7:
        advice.append("You seem to be experiencing high levels of both depression and anxiety. It's important to consider professional mental health support. You might also benefit from engaging in calming activities like deep breathing, mindfulness, or yoga.")

    # Moderate depression or anxiety
    elif data['depression'] > 5 or data['anxiety'] > 5:
        advice.append("You are showing moderate levels of depression or anxiety. It would be helpful to develop healthy coping strategies like maintaining a regular sleep schedule, engaging in physical activity, and reaching out to friends or family for support.")

    # High isolation and low stress-relief activities
    if data['isolation'] > 7 and data['stress_relief_activities'] < 5:
        advice.append("It seems you are feeling isolated, and your engagement in stress-relief activities is low. It's important to connect with friends or join community groups. Incorporate activities that help alleviate stress, such as walking, journaling, or meditation.")

    # High future insecurity
    if data['future_insecurity'] > 7:
        advice.append("You are feeling a significant amount of insecurity about the future. It can be helpful to break down your larger goals into smaller, manageable tasks. Seeking career counseling or mentorship could provide valuable guidance and reduce anxiety about the future.")

    # Overall low engagement in stress-relief activities
    if data['stress_relief_activities'] < 5:
        advice.append("Your engagement in stress-relief activities is quite low. It's essential to engage in activities that reduce stress and promote mental wellness, such as hobbies, physical exercise, and relaxation techniques like deep breathing or yoga.")

    return advice

# Function to fetch health articles from the GROC API based on the query
def get_health_articles(query):
    url = f"https://api.groc.com/search?q={query}"
    headers = {"Authorization": f"Bearer {groq_api_key}"}  # Use the demo API key in the header

    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # This will raise an HTTPError for bad responses
        data = response.json()  # Assuming the API returns JSON
        if 'results' in data:
            articles = [{"title": item["title"], "url": item["url"]} for item in data['results']]
        else:
            articles = []
        return articles
    except requests.exceptions.HTTPError as http_err:
        st.error(f"HTTP error occurred: {http_err}. Please check your API key and the endpoint.")
        st.error(f"Response content: {response.text}")
        return []
    except requests.exceptions.RequestException as err:
        st.error(f"Error fetching articles: {err}. Please check your internet connection.")
        return []

# Streamlit app layout
def main():
    # Set a background color and style
    st.markdown(
        """
        <style>
        .stApp {
            background-color: #F4F4F9;
        }
        .stButton>button {
            background-color: #6200EE;
            color: white;
            font-size: 18px;
        }
        .stSlider>div>div>span {
            color: #6200EE;
        }
        .stTextInput>div>div>input {
            background-color: #E0E0E0;
        }
        </style>
        """,
        unsafe_allow_html=True
    )

    # Title and header
    st.title("🌟 **Student Health Advisory Assistant** 🌟")
    st.markdown("### **Analyze your well-being and get personalized advice**")

    # File upload
    uploaded_file = st.file_uploader("Upload your dataset (CSV)", type=["csv"])
    if uploaded_file:
        df = load_data(uploaded_file)
        st.write("### Dataset Preview:")
        st.dataframe(df.head())

        # User input for analysis
        st.markdown("### **Input Your Details**")
        gender = st.selectbox("πŸ”Ή Gender", ["Male", "Female"], help="Select your gender.")
        age = st.slider("πŸ”Ή Age", 18, 35, step=1)
        depression = st.slider("πŸ”Ή Depression Level (1-10)", 1, 10)
        anxiety = st.slider("πŸ”Ή Anxiety Level (1-10)", 1, 10)
        isolation = st.slider("πŸ”Ή Isolation Level (1-10)", 1, 10)
        future_insecurity = st.slider("πŸ”Ή Future Insecurity Level (1-10)", 1, 10)
        stress_relief_activities = st.slider("πŸ”Ή Stress Relief Activities Level (1-10)", 1, 10)

        # Data dictionary for advice
        user_data = {
            "gender": gender,
            "age": age,
            "depression": depression,
            "anxiety": anxiety,
            "isolation": isolation,
            "future_insecurity": future_insecurity,
            "stress_relief_activities": stress_relief_activities,
        }

        # Provide advice based on user inputs
        if st.button("πŸ” Get Observed Advice", key="advice_btn"):
            st.subheader("πŸ”” **Health Advice Based on Observations** πŸ””")
            advice = provide_observed_advice(user_data)
            if advice:
                for i, tip in enumerate(advice, 1):
                    st.write(f"πŸ“Œ {i}. {tip}")
            else:
                st.warning("No advice available based on your inputs.")

            # Fetch related health articles based on user input
            st.subheader("πŸ“° **Related Health Articles** πŸ“°")
            query = "mental health anxiety depression isolation stress relief"
            articles = get_health_articles(query)
            if articles:
                for article in articles:
                    st.write(f"🌐 [{article['title']}]({article['url']})")
            else:
                st.write("No articles found. Please check your API key or internet connection.")

if __name__ == "__main__":
    main()