Compare commits

...

3 Commits

Author SHA1 Message Date
1b842ff917 Merge pull request 'fix/ui' (#5) from fix/ui into main
Reviewed-on: #5
2024-10-13 14:52:45 +00:00
b2c870e7c9 drop unused html 2024-10-13 20:13:55 +05:30
f18f9cdafd add cookie and connect to mongo 2024-10-13 20:11:32 +05:30

68
main.py

@ -1,10 +1,48 @@
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()
# 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):
@ -17,7 +55,6 @@ def send_post_request(prompt):
else:
return json
# Custom CSS to fix the input box at the bottom of the page
st.markdown(
"""
@ -60,25 +97,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()