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("---") | |