File size: 8,092 Bytes
7688f19
7fd2fab
ff92777
 
1dd4f83
f9abbe1
1dd4f83
ff92777
8b3df41
ff92777
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7fd2fab
ff92777
 
 
7fd2fab
ff92777
 
 
7fd2fab
ff92777
 
 
7fd2fab
ff92777
 
 
7fd2fab
ff92777
 
 
7fd2fab
ff92777
 
 
 
 
1dd4f83
 
 
 
 
 
ff92777
a96770a
f9abbe1
 
 
92e3434
728986c
 
7fd2fab
4e0d894
 
7fd2fab
7688f19
4e0d894
 
728986c
92e3434
4e0d894
 
7fd2fab
 
 
 
 
728986c
92e3434
4e0d894
7fd2fab
728986c
92e3434
4e0d894
7fd2fab
4e0d894
 
7688f19
 
542e5e9
 
7688f19
 
4e0d894
 
7688f19
 
4e0d894
02ada83
1933a3f
4e0d894
7fd2fab
1933a3f
4e0d894
 
e5ec548
 
 
1933a3f
 
4e0d894
7fd2fab
1933a3f
 
 
 
4e0d894
1933a3f
 
7fd2fab
1933a3f
542e5e9
 
 
 
 
728986c
 
 
1dd4f83
 
 
 
 
 
120ab9c
 
 
 
 
 
1dd4f83
4e0d894
 
 
 
f9abbe1
 
542e5e9
 
f9abbe1
 
 
4d55296
f9abbe1
 
4e0d894
f9abbe1
 
 
9fac4f3
 
f9abbe1
 
 
 
 
 
 
 
 
4e0d894
1dd4f83
 
f9abbe1
 
 
 
 
 
4e0d894
1dd4f83
 
f9abbe1
 
 
 
 
 
4e0d894
1dd4f83
 
f9abbe1
 
 
 
 
 
4e0d894
1dd4f83
 
f9abbe1
 
 
 
 
 
4e0d894
1dd4f83
 
4e0d894
542e5e9
 
1dd4f83
 
 
 
5b56a6d
f9abbe1
4e0d894
 
f9abbe1
4e0d894
f9abbe1
1dd4f83
 
9fac4f3
 
e5ec548
 
7688f19
a16cf0b
5dc4f4b
 
542e5e9
 
a16cf0b
e5ec548
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
import streamlit as st
import os
from groq import Groq

# Set up page configuration
st.set_page_config(page_title="EduNexus", page_icon=":book:", layout="wide")

# Set the Groq API key
os.environ["GROQ_API_KEY"] = "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"  # Replace with your actual API key

# Initialize Groq client
client = Groq(api_key=os.environ.get("GROQ_API_KEY"))

# Define the LLaMA model to be used
MODEL_NAME = "llama3-8b-8192"

# Function to call Groq API
def call_groq_api(prompt):
    try:
        chat_completion = client.chat.completions.create(
            messages=[{"role": "user", "content": prompt}],
            model=MODEL_NAME
        )
        return chat_completion.choices[0].message.content
    except Exception as e:
        return f"Error: {str(e)}"

# Define functions for each tool
def personalized_learning_assistant(topic):
    prompt = f"Provide a personalized learning plan for the topic: {topic}"
    return call_groq_api(prompt)

def ai_coding_mentor(code_snippet):
    prompt = f"Review this AI code snippet and provide suggestions or improvements:\n\n{code_snippet}"
    return call_groq_api(prompt)

def smart_document_summarizer(document_text):
    prompt = f"Summarize the following document:\n\n{document_text}"
    return call_groq_api(prompt)

def interactive_study_planner(exam_schedule):
    prompt = f"Create an interactive study plan based on this exam schedule:\n\n{exam_schedule}"
    return call_groq_api(prompt)

def real_time_qa_support(question):
    prompt = f"Provide an answer to the following academic question:\n\n{question}"
    return call_groq_api(prompt)

def mental_health_check_in(feelings):
    prompt = f"Provide some advice based on these feelings:\n\n{feelings}"
    return call_groq_api(prompt)

# Initialize session state if not already set
if 'responses' not in st.session_state:
    st.session_state['responses'] = {
        "personalized_learning_assistant": "",
        "ai_coding_mentor": "",
        "smart_document_summarizer": "",
        "interactive_study_planner": "",
        "real_time_qa_support": "",
        "mental_health_check_in": ""
    }

if 'clear_all' not in st.session_state:
    st.session_state['clear_all'] = False

# Add custom styling using Streamlit
st.markdown("""
    <style>
    body {
        background-color: #000000; /* Royal Black */
        color: #ffffff; /* White */
    }
    .css-1o7k8tt {
        background-color: #000000; /* Royal Black */
        color: #ffffff; /* White */
    }
    .stButton {
        background-color: #ffffff; /* White */
        color: #000000; /* Royal Black */
        border-radius: 12px;
        padding: 12px 24px;
        font-size: 16px;
        box-shadow: 0 6px 12px rgba(0, 0, 0, 0.4);
        transition: background-color 0.3s, box-shadow 0.3s;
    }
    .stButton:hover {
        background-color: #d3d3d3; /* Light Gray */
        box-shadow: 0 8px 16px rgba(0, 0, 0, 0.5);
    }
    .stTextInput, .stTextArea {
        border: 1px solid #ffffff; /* White */
        border-radius: 12px;
        background-color: #000000; /* Royal Black */
        color: #ffffff; /* White */
    }
    .stTextInput::placeholder, .stTextArea::placeholder {
        color: #ffffff; /* White */
        font-weight: bold;
    }
    .stSidebar {
        background-color: #000000; /* Royal Black */
        color: #ffffff; /* White */
    }
    .stSidebar .stMarkdown {
        color: #ffffff; /* White */
    }
    .footer {
        background-color: #000000; /* Royal Black */
        padding: 15px; 
        text-align: center; 
        color: #ffffff; /* White */
        border-top: 1px solid #ffffff; /* White */
        position: fixed; 
        bottom: 0; 
        width: 100%;
    }
    .footer a {
        color: #ffffff; /* White */
        margin: 0 15px; 
        text-decoration: none; 
        font-size: 18px;
    }
    .footer a:hover {
        color: #d3d3d3; /* Light Gray */
    }
    .footer i {
        font-size: 22px;
    }
    .css-1n8h7zm .stTextArea::placeholder, 
    .css-1n8h7zm .stTextInput::placeholder {
        color: #ffffff; /* White */
        font-weight: bold;
    }
    </style>
""", unsafe_allow_html=True)

# Display main title
st.title("EduNexus")

# Sidebar with tasks
st.sidebar.title("Tasks")
tasks = [
    "πŸ“š Personalized Learning Assistant",
    "πŸ€– AI Coding Mentor",
    "πŸ“„ Smart Document Summarizer",
    "πŸ—“οΈ Interactive Study Planner",
    "πŸ’¬ Real-Time Q&A Support",
    "🧠 Mental Health Check-In"
]

selected_task = st.sidebar.radio("Select a task", tasks)

# Main layout based on selected task
def handle_task_form(task_key, prompt_function, input_label, response_key):
    with st.form(key=f"{task_key}_form"):
        st.markdown(f"<div style='color: #ffffff; font-weight: bold;'>{input_label}</div>", unsafe_allow_html=True)
        user_input = st.text_area("", key=task_key)
        submit_button = st.form_submit_button("Get Response")
        clear_button = st.form_submit_button("Clear")
        
        if submit_button:
            response = prompt_function(user_input)
            st.session_state['responses'][response_key] = response
            st.write(response)
        
        if clear_button:
            st.session_state['responses'][response_key] = ""
            st.session_state[task_key] = ""  # Clear form input
            st.session_state['clear_all'] = True

if selected_task == "πŸ“š Personalized Learning Assistant":
    st.header("Personalized Learning Assistant")
    handle_task_form(
        "personalized_learning_assistant", 
        personalized_learning_assistant,
        "Enter the topic you want to learn about",
        "personalized_learning_assistant"
    )

elif selected_task == "πŸ€– AI Coding Mentor":
    st.header("AI Coding Mentor")
    handle_task_form(
        "ai_coding_mentor", 
        ai_coding_mentor,
        "Paste your code snippet here",
        "ai_coding_mentor"
    )

elif selected_task == "πŸ“„ Smart Document Summarizer":
    st.header("Smart Document Summarizer")
    handle_task_form(
        "smart_document_summarizer", 
        smart_document_summarizer,
        "Paste your document text here",
        "smart_document_summarizer"
    )

elif selected_task == "πŸ—“οΈ Interactive Study Planner":
    st.header("Interactive Study Planner")
    handle_task_form(
        "interactive_study_planner", 
        interactive_study_planner,
        "Enter your exam schedule here",
        "interactive_study_planner"
    )

elif selected_task == "πŸ’¬ Real-Time Q&A Support":
    st.header("Real-Time Q&A Support")
    handle_task_form(
        "real_time_qa_support", 
        real_time_qa_support,
        "Ask your academic question here",
        "real_time_qa_support"
    )

elif selected_task == "🧠 Mental Health Check-In":
    st.header("Mental Health Check-In")
    with st.form(key="mental_health_check_in_form"):
        st.markdown("<div style='color: #ffffff; font-weight: bold;'>Share how you are feeling today</div>", unsafe_allow_html=True)
        feelings = st.text_area("", key="mental_health_check_in")
        col1, col2 = st.columns([2, 1])
        with col1:
            submit_button = st.form_submit_button("Get Advice")
        with col2:
            clear_button = st.form_submit_button("Clear")
        
        if submit_button:
            response = mental_health_check_in(feelings)
            st.session_state['responses']['mental_health_check_in'] = response
            st.write(response)
        
        if clear_button:
            st.session_state['responses']['mental_health_check_in'] = ""
            st.session_state['mental_health_check_in'] = ""  # Clear form input
            st.session_state['clear_all'] = True

# Footer
st.markdown("""
    <div class="footer">
        <a href="https://github.com/muhammadibrahim313">GitHub</a> |
        <a href="https://www.kaggle.com/itshappy">Kaggle</a> |
        <a href="https://www.linkedin.com/in/muhammadibrahim313">LinkedIn</a>
        <i>EduNexus 2024</i>
    </div>
""", unsafe_allow_html=True)