Spaces:
Sleeping
Sleeping
import streamlit as st | |
import os | |
from dotenv import load_dotenv | |
import google.generativeai as genai | |
# Load environment variables | |
load_dotenv() | |
API_KEY = os.getenv("GOOGLE_API_KEY") | |
# Configure Gemini API | |
genai.configure(api_key=API_KEY) | |
model = genai.GenerativeModel('gemini-pro') | |
# Streamlit Page Config | |
st.set_page_config(page_title="Enhanced Gemini Q&A App", layout="wide") | |
# Initialize Chat History in Session State with the Correct Format | |
if "chat_history" not in st.session_state: | |
st.session_state.chat_history = [] # Empty list for chat history | |
# Function to get response from Gemini API | |
def get_gemini_response(question): | |
# Reformat the session chat history to match the API requirements | |
formatted_history = [] | |
for chat in st.session_state.chat_history: | |
if "user" in chat: | |
formatted_history.append({"parts": [{"text": chat["user"]}], "role": "user"}) | |
else: | |
formatted_history.append({"parts": [{"text": chat["bot"]}], "role": "bot"}) | |
chat = model.start_chat(history=formatted_history) # Use the correctly formatted history | |
try: | |
response = chat.send_message(question, stream=True) | |
full_response = "" | |
for chunk in response: | |
full_response += chunk.text + " " | |
st.session_state.chat_history.append({"user": question, "bot": full_response}) # Append to chat history | |
return full_response | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# UI Layout | |
st.title("🤖 Gemini AI - Interactive Q&A") | |
st.write("Ask me anything and I'll try to answer!") | |
# Sidebar for Settings | |
with st.sidebar: | |
st.header("Settings") | |
if st.button("Clear Chat History"): | |
st.session_state.chat_history = [] | |
st.success("Chat history cleared!") | |
# User Input | |
user_input = st.text_input("Your Question:", placeholder="Type your question here...") | |
submit = st.button("Ask Gemini") | |
# Response Handling | |
if submit and user_input: | |
if not API_KEY: | |
st.error("API Key is missing. Please check your .env file.") | |
else: | |
with st.spinner("Thinking..."): | |
response = get_gemini_response(user_input) | |
st.subheader("Response:") | |
st.markdown(response) # Render response in Markdown format | |
# Display Chat History | |
if st.session_state.chat_history: | |
st.subheader("Chat History") | |
for chat in st.session_state.chat_history: | |
st.markdown(f"**You:** {chat['user']}") | |
st.markdown(f"**Gemini:** {chat['bot']}") | |
st.write("---") | |