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)