File size: 8,638 Bytes
63edf19
 
 
 
 
55c4e68
63edf19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2f90212
63edf19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728986c
 
 
 
 
 
2f90212
728986c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63edf19
728986c
 
 
 
 
 
 
 
 
 
 
183335e
 
728986c
63edf19
 
 
728986c
 
183335e
728986c
 
 
 
 
63edf19
 
 
728986c
 
183335e
728986c
 
 
 
 
63edf19
 
 
728986c
 
183335e
728986c
 
 
 
 
63edf19
 
 
2f90212
 
183335e
728986c
 
 
 
 
63edf19
 
 
728986c
 
183335e
728986c
 
 
 
 
63edf19
 
 
728986c
 
183335e
728986c
 
 
 
 
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
import os
import streamlit as st
from groq import Groq

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

# 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):
    examples = [
        "Explain quantum mechanics. Example: Quantum mechanics is the study of particles at the atomic level.",
        "Explain general relativity. Example: General relativity describes gravity as a curvature in space-time.",
        "Explain machine learning. Example: Machine learning involves algorithms that improve through experience."
    ]
    prompt = f"Here are some examples of explanations:\n\n{examples}\n\nNow, explain the topic: {topic}"
    return call_groq_api(prompt)

def ai_coding_mentor(code_snippet):
    examples = [
        "Review the following code snippet:\n\nCode: 'for i in range(10): print(i)'\nSuggestion: Use list comprehension for cleaner code.",
        "Review this code:\n\nCode: 'def add(a, b): return a + b'\nSuggestion: Add type hints for better readability."
    ]
    prompt = f"Here are some examples of code reviews:\n\n{examples}\n\nReview the following code snippet:\n{code_snippet}"
    return call_groq_api(prompt)

def smart_document_summarizer(document_text):
    examples = [
        "Summarize the following text:\n\nText: 'Quantum computing is a rapidly evolving field with potential to revolutionize technology.'\nSummary: 'Quantum computing could transform technology.'",
        "Summarize this passage:\n\nText: 'The global climate change crisis necessitates urgent action to reduce carbon emissions.'\nSummary: 'Immediate action is needed to tackle climate change.'"
    ]
    prompt = f"Here are some examples of summaries:\n\n{examples}\n\nSummarize this document:\n{document_text}"
    return call_groq_api(prompt)

def interactive_study_planner(exam_schedule):
    examples = [
        "Create a study plan based on this schedule:\n\nSchedule: '3 exams in a week'\nPlan: 'Study 2 hours per subject each day before the exam.'",
        "Generate a study plan for:\n\nSchedule: 'Exams in 2 weeks'\nPlan: 'Focus on subjects with more weight and review daily.'"
    ]
    prompt = f"Here are some examples of study plans:\n\n{examples}\n\nCreate a study plan for the following schedule:\n{exam_schedule}"
    return call_groq_api(prompt)

def real_time_qa_support(question):
    examples = [
        "Answer this question:\n\nQuestion: 'What is Newton's second law of motion?'\nAnswer: 'Newton's second law states that force equals mass times acceleration (F=ma).'",
        "Provide an explanation for:\n\nQuestion: 'What is photosynthesis?'\nAnswer: 'Photosynthesis is the process by which plants convert light energy into chemical energy.'"
    ]
    prompt = f"Here are some examples of Q&A responses:\n\n{examples}\n\nAnswer the following question:\n{question}"
    return call_groq_api(prompt)

def mental_health_check_in(feelings):
    examples = [
        "Provide advice for:\n\nFeeling: 'Stressed about exams'\nAdvice: 'Take breaks, get enough sleep, and manage your study time effectively.'",
        "Offer support for:\n\nFeeling: 'Feeling overwhelmed'\nAdvice: 'Consider relaxation techniques and seek support from friends or a counselor.'"
    ]
    prompt = f"Here are some examples of mental health advice:\n\n{examples}\n\nProvide advice for:\n{feelings}"
    return call_groq_api(prompt)

# Define Streamlit app
st.set_page_config(page_title="EduNexus", page_icon=":book:", layout="wide")

# Add custom CSS for neon and animated design
st.markdown("""
    <style>
    body {
        background: linear-gradient(45deg, #000000, #2c3e50);
        color: #fff;
        font-family: 'Arial', sans-serif;
        overflow-x: hidden;
    }
    .neon-text {
        font-size: 32px;
        color: #00FF00;
        text-shadow: 0 0 5px #00FF00, 0 0 10px #00FF00, 0 0 15px #00FF00, 0 0 20px #00FF00, 0 0 25px #00FF00;
        margin-bottom: 20px;
    }
    .neon-border {
        border: 2px solid #00FF00;
        border-radius: 8px;
        padding: 15px;
        margin-bottom: 20px;
        box-shadow: 0 0 15px #00FF00;
    }
    .animated-button {
        animation: pulse 2s infinite;
        background-color: #00FF00;
        color: #000;
        border: none;
        border-radius: 8px;
        padding: 10px 20px;
        font-size: 16px;
        cursor: pointer;
        margin: 10px 0;
    }
    .animated-button:hover {
        background-color: #00CC00;
    }
    .input-container {
        margin-bottom: 20px;
    }
    </style>
""", unsafe_allow_html=True)

# Title and introduction
st.title("EduNexus: The Ultimate AI-Powered Student Companion")
st.markdown("<div class='neon-text'>Welcome to EduNexus! Choose a tool below to get started.</div>", unsafe_allow_html=True)

# Define function to clear all inputs
def clear_chat():
    st.session_state['personalized_learning_assistant'] = ""
    st.session_state['ai_coding_mentor'] = ""
    st.session_state['smart_document_summarizer'] = ""
    st.session_state['interactive_study_planner'] = ""
    st.session_state['real_time_qa_support'] = ""
    st.session_state['mental_health_check_in'] = ""

# Add Clear Chat button using HTML
if st.markdown("<button class='animated-button' onclick='window.location.reload()'>Clear All</button>", unsafe_allow_html=True):
    clear_chat()

# Personalized Learning Assistant
st.header("Personalized Learning Assistant")
with st.form(key="learning_form"):
    topic_input = st.text_input("Enter a topic you want to learn about", key="topic_input", placeholder="e.g., Quantum Mechanics")
    submit_button = st.form_submit_button("Generate Learning Material")
    if submit_button:
        if topic_input:
            st.write(personalized_learning_assistant(topic_input))
        else:
            st.write("Please enter a topic.")

# AI Coding Mentor
st.header("AI Coding Mentor")
with st.form(key="coding_form"):
    code_input = st.text_area("Paste your code snippet", key="code_input", placeholder="e.g., for i in range(10): print(i)")
    submit_button = st.form_submit_button("Get Coding Assistance")
    if submit_button:
        if code_input:
            st.write(ai_coding_mentor(code_input))
        else:
            st.write("Please paste your code snippet.")

# Smart Document Summarizer
st.header("Smart Document Summarizer")
with st.form(key="summary_form"):
    doc_input = st.text_area("Paste the text of the document", key="doc_input", placeholder="e.g., Quantum computing is...")
    submit_button = st.form_submit_button("Summarize Document")
    if submit_button:
        if doc_input:
            st.write(smart_document_summarizer(doc_input))
        else:
            st.write("Please paste the document text.")

# Interactive Study Planner
st.header("Interactive Study Planner")
with st.form(key="planner_form"):
    schedule_input = st.text_area("Enter your exam schedule", key="schedule_input", placeholder="e.g., 3 exams in 1 week")
    submit_button = st.form_submit_button("Generate Study Plan")
    if submit_button:
        if schedule_input:
            st.write(interactive_study_planner(schedule_input))
        else:
            st.write("Please enter your exam schedule.")

# Real-Time Q&A Support
st.header("Real-Time Q&A Support")
with st.form(key="qa_form"):
    question_input = st.text_input("Ask any academic question", key="question_input", placeholder="e.g., What is Newton's second law?")
    submit_button = st.form_submit_button("Get Answer")
    if submit_button:
        if question_input:
            st.write(real_time_qa_support(question_input))
        else:
            st.write("Please ask a question.")

# Mental Health Check-In
st.header("Mental Health Check-In")
with st.form(key="checkin_form"):
    feelings_input = st.text_area("How are you feeling?", key="feelings_input", placeholder="e.g., Stressed about exams")
    submit_button = st.form_submit_button("Check In")
    if submit_button:
        if feelings_input:
            st.write(mental_health_check_in(feelings_input))
        else:
            st.write("Please describe your feelings.")