import streamlit as st from google import genai import os # Set GEMINI_API_KEY from GOOGLE_API_KEY if not already set if not os.getenv('GEMINI_API_KEY'): os.environ["GEMINI_API_KEY"] = os.getenv("GOOGLE_API_KEY") # initializes chat client if 'client' not in st.session_state: st.session_state['client'] = genai.Client() st.set_page_config(page_title="AI Chat Demo", page_icon="💬", layout="centered") # Initialize chat history in session state if "messages" not in st.session_state: st.session_state["messages"] = [ {"role": "ai", "content": "👋 Welcome! How can I help you today?"} ] st.session_state["dummy_idx"] = 0 st.title("AI Chat Demo") # Chat history display chat_container = st.container() with chat_container: for msg in st.session_state["messages"]: if msg["role"] == "user": st.markdown(f"
You: {msg['content']}
", unsafe_allow_html=True) else: st.markdown(f"
AI: {msg['content']}
", unsafe_allow_html=True) # User input with st.form(key="chat_form", clear_on_submit=True): user_input = st.text_input("Type your message:", "", key="input") submitted = st.form_submit_button("Send") _ = st.button("Clear Chat", on_click=lambda: st.session_state.clear(), key="clear_chat") if submitted and user_input.strip(): # Add user message st.session_state["messages"].append({"role": "user", "content": user_input.strip()}) # Prepare the content for the AI model by joining all messages with role tags content = " /n ".join(f'<{msg["role"]}> {msg["content"]}' for msg in st.session_state["messages"]) # Generate AI response using the prepared content ai_message = st.session_state['client'].models.generate_content( model="gemini-2.5-flash", contents=content ).text st.session_state["messages"].append({"role": "ai", "content": ai_message}) st.rerun()