Gemini_Chatbot / app.py
Memex
Update app.py
3196573 verified
Raw
History Blame Contribute Delete
3.53 kB
import os
import json
import streamlit as st
from dotenv import load_dotenv
import google.generativeai as genai
# Load environment variables from .env file
load_dotenv()
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
# Configure the Gemini API
genai.configure(api_key=GOOGLE_API_KEY)
# Directory to store session files
SESSION_DIR = "sessions"
os.makedirs(SESSION_DIR, exist_ok=True)
# Initialize session state
if "session_name" not in st.session_state:
st.session_state.session_name = None
if "messages" not in st.session_state:
st.session_state.messages = []
# Function to load session from file
def load_session(session_name):
try:
with open(os.path.join(SESSION_DIR, f"{session_name}.json"), "r") as f:
return json.load(f)
except FileNotFoundError:
return []
# Function to save session to file
def save_session(session_name, messages):
with open(os.path.join(SESSION_DIR, f"{session_name}.json"), "w") as f:
json.dump(messages, f)
# Function to generate a session name using AI
def generate_session_name(prompt):
model = genai.GenerativeModel("gemini-2.0-flash")
response = model.generate_content(f"Suggest a unique and descriptive session name based on this message: {prompt}")
return response.text.strip()
# Sidebar for session management
st.sidebar.title("Chat Sessions")
# List existing sessions
existing_sessions = [f[:-5] for f in os.listdir(SESSION_DIR) if f.endswith(".json")]
# Select session
selected_session = st.sidebar.selectbox("Select a session", [""] + existing_sessions)
if selected_session:
st.session_state.session_name = selected_session
st.session_state.messages = load_session(selected_session)
else:
st.session_state.messages = []
# Create new session
new_session_name = st.sidebar.text_input("New session name")
if st.sidebar.button("Create Session"):
if new_session_name:
st.session_state.session_name = new_session_name
st.session_state.messages = []
save_session(new_session_name, [])
st.rerun()
# Delete current session
if st.sidebar.button("Delete Session"):
if st.session_state.session_name:
os.remove(os.path.join(SESSION_DIR, f"{st.session_state.session_name}.json"))
st.session_state.session_name = None
st.session_state.messages = []
st.rerun()
# Main chat interface
st.title("Gemini Chatbot with Session Management")
# Display chat history
for msg in st.session_state.messages:
with st.chat_message(msg["role"]):
st.markdown(msg["content"])
# Chat input
if prompt := st.chat_input("Enter your message:"):
# Display user message
st.chat_message("user").markdown(prompt)
st.session_state.messages.append({"role": "user", "content": prompt})
# Generate and display AI response
model = genai.GenerativeModel("gemini-2.0-flash")
try:
response = model.generate_content(prompt)
st.chat_message("assistant").markdown(response.text)
st.session_state.messages.append({"role": "assistant", "content": response.text})
# Auto-generate session name if not set
if not st.session_state.session_name:
session_name = generate_session_name(prompt)
st.session_state.session_name = session_name
st.sidebar.write(f"Auto-generated session name: {session_name}")
# Save session
save_session(st.session_state.session_name, st.session_state.messages)
except Exception as e:
st.error(f"An error occurred: {e}")