From f18f9cdafdc148461ffae1e9a89ad9fa0ccd0c5e Mon Sep 17 00:00:00 2001 From: Sapan Shah Date: Sun, 13 Oct 2024 20:11:32 +0530 Subject: [PATCH 1/2] add cookie and connect to mongo --- main.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index 607aa59..f8227c5 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,51 @@ import streamlit as st import requests +import datetime +from pymongo import MongoClient +from streamlit_cookies_manager import CookieManager -# Initialize session state for prompt history -if "history" not in st.session_state: - st.session_state.history = [] +# 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): @@ -13,7 +54,6 @@ def send_post_request(prompt): response = requests.post(url, json=payload) return response.text - # Custom CSS to fix the input box at the bottom of the page st.markdown( """ @@ -56,25 +96,40 @@ st.markdown( unsafe_allow_html=True ) -st.title('Ask maargdarshak') +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) - print(response) + + # Display the bot's response in the chat UI st.chat_message('bot').markdown(response) st.session_state.messages.append({'role': 'bot', 'content': response}) - # st.session_state.history.append((prompt, response)) - # st.experimental_rerun() + # 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() -- 2.45.2 From b2c870e7c9ea5777696ce7a4fe46e87cfde103ac Mon Sep 17 00:00:00 2001 From: Sapan Shah Date: Sun, 13 Oct 2024 20:13:55 +0530 Subject: [PATCH 2/2] drop unused html --- main.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/main.py b/main.py index f8227c5..c658114 100644 --- a/main.py +++ b/main.py @@ -9,9 +9,6 @@ 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(): -- 2.45.2