import streamlit as st import requests import datetime from pymongo import MongoClient from streamlit_cookies_manager import CookieManager # Inject the scroll control HTML/JS def load_html(file_name): with open(file_name, 'r', encoding='utf-8') as file: return file.read() # Load the scroll controls st.markdown(load_html("control.html"), unsafe_allow_html=True) # Initialize the Cookie Manager (no encryption) cookies = CookieManager(prefix="ktosiek/streamlit-cookies-manager/") if not cookies.ready(): st.stop() # Connect to MongoDB client = MongoClient("mongodb://localhost:27017/") # Adjust your MongoDB connection URI db = client["chatbot_db"] # Database name users_collection = db["users"] # Collection to store user data # Generate a user ID and store it in cookies if not already set if 'user_id' not in cookies: cookies['user_id'] = str(datetime.datetime.now().timestamp()) # Use timestamp as a unique ID cookies.save() user_id = cookies.get('user_id') # st.write(f"Current User ID: {user_id}") # Check if the user exists in the database user_data = users_collection.find_one({"user_id": user_id}) # If user doesn't exist, create a new entry with the current timestamp and empty chat history if not user_data: timestamp = str(datetime.datetime.now().isoformat()) # Unique timestamp for each user users_collection.insert_one({ "user_id": user_id, "timestamp": timestamp, "messages": [] # Empty chat history }) st.write("New user detected! Created user entry in the database.") else: # If user exists, load the chat history from the database st.session_state.messages = user_data["messages"] # st.write("Returning user detected! Loaded chat history from the database.") # Function to send POST request to a local server def send_post_request(prompt): url = "http://localhost:19194/" # Update this to your actual server URL payload = prompt.title() response = requests.post(url, json=payload) return response.text # Custom CSS to fix the input box at the bottom of the page st.markdown( """ """, unsafe_allow_html=True ) st.title('Ask Maargdarshak') if 'messages' not in st.session_state: st.session_state.messages = [] # Load chat history from session state for message in st.session_state.messages: st.chat_message(message['role']).markdown(message['content']) # Prompt input prompt = st.chat_input("Ask your question here") if prompt: # Display the user prompt in the chat UI st.chat_message('user').markdown(prompt) st.session_state.messages.append({'role': 'user', 'content': prompt}) # Get the bot's response via a POST request response = send_post_request(prompt) # Display the bot's response in the chat UI st.chat_message('bot').markdown(response) st.session_state.messages.append({'role': 'bot', 'content': response}) # Update the user's chat history in the database users_collection.update_one( {"user_id": user_id}, {"$push": {"messages": {'role': 'user', 'content': prompt}}}, ) users_collection.update_one( {"user_id": user_id}, {"$push": {"messages": {'role': 'bot', 'content': response}}}, ) # Save updated history to cookies (optional, MongoDB handles persistence) cookies['history'] = st.session_state.messages cookies.save()