File size: 3,164 Bytes
77c46e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import google.generativeai as genai
import os

MODEL_ID = "gemini-2.0-flash-exp"
try:
    api_key = os.getenv("GEMINI_API_KEY")
    model_id = MODEL_ID
    genai.configure(api_key=api_key)
except Exception as e:
    st.error(f"Error: {e}")
    st.stop()

# Initialize conversation history in Streamlit session state
if "conversation_history" not in st.session_state:
    st.session_state.conversation_history = []

# Initialize chat model outside the function to maintain state
if "chat_model" not in st.session_state:
    st.session_state.chat_model = genai.GenerativeModel(MODEL_ID).start_chat(history=st.session_state.conversation_history)

def basic_prompt(text_prompt):
    try:
        chat = st.session_state.chat_model #use the saved chat model.
        response = chat.send_message(text_prompt)

        # Update conversation history
        st.session_state.conversation_history.append({"role": "user", "parts": [text_prompt]}) #gemini uses parts now.
        st.session_state.conversation_history.append({"role": "model", "parts": [response.text]})

        # Update the chat model's history
        st.session_state.chat_model = genai.GenerativeModel(MODEL_ID).start_chat(history=st.session_state.conversation_history)

        return response.text
    except Exception as e:
        return f"An error occurred: {e}"

# App title
st.title("Gemini Tutor: One-way ANOVA and two-way ANOVA")

# About this App section
with st.expander("About this App"):
    st.markdown("""
    **Gemini AI-enabled Teaching Assistant** is an innovative application designed to unlock concepts in various subjects using the power of Gemini AI. 
    Created by Louie F. Cervantes, M. Eng. (Information Engineering) (c) 2025.
    """)

# Create two tabs
st.write("Click the tabs to display more information.")
tab1, tab2 = st.tabs(["Concept", "Application"])

# Concept tab
with tab1:
    prompt = """Create a detailed explainer on ANOVA statistic and the difference between one-way and two-way ANOVA. 
    The context is for senior high school students enrolled in a statistics course. 
    Use brief and concise phrasing and do not add text like 'Okay let's start' or 'Here is the explanation'."""

    if st.button("Explain"):
        with st.spinner("Gemini is thinking..."):
            response_text = basic_prompt(prompt)
            st.markdown(response_text)


# Application tab
with tab2:

    st.write("Click the button to generate a new example.")
    
    if st.button("Illustrate with an example"):
        with st.spinner("Gemini is thinking..."):        
            prompt = """Create a real world example that uses either one-way or two-way ANOVA. 
        Output only the text of the example do not add any other text.  
        The problem should be different from the example you created in the previous step."""

            problem = basic_prompt(prompt)
            st.markdown(problem)

            st.subheader("Explanation")
            prompt = """Discuss why one-way ANOVA or two-way ANOVA is applicable and not the other."""
            solution = basic_prompt(prompt)
            st.markdown(solution)