Spaces:
Running
Running
Paul Magee
commited on
Commit
·
c594ca1
1
Parent(s):
a7d1752
Added supabase dbase to manage the user feedback data. Working.
Browse files- Public_Chat.py +40 -52
Public_Chat.py
CHANGED
@@ -11,6 +11,7 @@ from config import APP_NAME, PRIMARY_COLOR, SECONDARY_COLOR
|
|
11 |
from utils.logging_config import setup_logging
|
12 |
from utils.feedback import feedback_manager # Import the feedback manager
|
13 |
import hashlib
|
|
|
14 |
|
15 |
# Set up logging
|
16 |
setup_logging()
|
@@ -232,7 +233,7 @@ if "chatbot" not in st.session_state:
|
|
232 |
|
233 |
# Title and description
|
234 |
if len(st.session_state.messages) == 0:
|
235 |
-
st.title("Paul's Chatbot v0.
|
236 |
st.markdown("""
|
237 |
This chatbot can answer questions about your documents.
|
238 |
Ask any question about the content in your documents! This demo is focused on a psychology book. Ask it questions about how the human brain works, how to stick with a habit, or how we are easily fooled.
|
@@ -259,48 +260,68 @@ if config.DEBUG:
|
|
259 |
|
260 |
# Function to handle feedback with the feedback manager
|
261 |
def handle_feedback(message_id, feedback_type, query, response):
|
262 |
-
"""Handle user feedback for a specific message"""
|
263 |
-
# Log the message ID for debugging
|
264 |
logger.info(f"Handling {feedback_type} feedback for message ID: {message_id}")
|
265 |
-
|
266 |
if feedback_type == "positive":
|
267 |
feedback_data = {
|
268 |
-
"
|
269 |
"query": query,
|
270 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
}
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
st.session_state.feedback[message_id] = {
|
276 |
"rating": "positive",
|
277 |
"submitted": True
|
278 |
}
|
279 |
logger.info(f"Positive feedback saved for message {message_id}")
|
280 |
-
else:
|
281 |
st.session_state.feedback[message_id] = {
|
282 |
"rating": "negative",
|
283 |
"show_form": True,
|
284 |
-
"submitted": False
|
285 |
}
|
286 |
logger.info(f"Negative feedback started for message {message_id}, showing form")
|
287 |
-
|
288 |
-
# Log current feedback state
|
289 |
logger.info(f"Current feedback state: {st.session_state.feedback}")
|
290 |
|
291 |
# Function to submit detailed negative feedback
|
292 |
def submit_negative_feedback(message_id, category, comment, query, response):
|
293 |
-
"""Submit detailed negative feedback for a specific message"""
|
294 |
feedback_data = {
|
|
|
|
|
|
|
|
|
|
|
295 |
"rating": "negative",
|
296 |
"category": category,
|
297 |
"comment": comment,
|
298 |
-
"
|
299 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
300 |
}
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
st.session_state.feedback[message_id] = {
|
305 |
"rating": "negative",
|
306 |
"submitted": True,
|
@@ -308,39 +329,6 @@ def submit_negative_feedback(message_id, category, comment, query, response):
|
|
308 |
}
|
309 |
logger.info(f"Negative feedback with category '{category}' submitted for message {message_id}")
|
310 |
|
311 |
-
# Custom function to save feedback with a specified prefix in the filename
|
312 |
-
def save_feedback_with_prefix(feedback_data, prefix):
|
313 |
-
"""
|
314 |
-
Save feedback data with a custom filename prefix.
|
315 |
-
|
316 |
-
Args:
|
317 |
-
feedback_data (dict): The feedback data to save
|
318 |
-
prefix (str): The prefix to add to the filename (e.g., 'pos', 'neg')
|
319 |
-
|
320 |
-
Returns:
|
321 |
-
bool: True if feedback was saved successfully, False otherwise
|
322 |
-
"""
|
323 |
-
import os
|
324 |
-
import json
|
325 |
-
from datetime import datetime
|
326 |
-
|
327 |
-
# Generate a unique filename with the specified prefix
|
328 |
-
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
329 |
-
filename = f"{prefix}_feedback_{timestamp}.json"
|
330 |
-
filepath = os.path.join(feedback_manager.feedback_dir, filename)
|
331 |
-
|
332 |
-
# Add timestamp to the feedback data
|
333 |
-
feedback_data['timestamp'] = datetime.now().isoformat()
|
334 |
-
|
335 |
-
try:
|
336 |
-
with open(filepath, 'w') as f:
|
337 |
-
json.dump(feedback_data, f, indent=2)
|
338 |
-
logger.info(f"Feedback saved to {filepath}")
|
339 |
-
return True
|
340 |
-
except Exception as e:
|
341 |
-
logger.error(f"Error saving feedback: {str(e)}")
|
342 |
-
return False
|
343 |
-
|
344 |
# Function to generate visible feedback UI for a message
|
345 |
def display_feedback_ui(message, index):
|
346 |
"""Generate and display feedback UI for an assistant message"""
|
|
|
11 |
from utils.logging_config import setup_logging
|
12 |
from utils.feedback import feedback_manager # Import the feedback manager
|
13 |
import hashlib
|
14 |
+
from datetime import datetime
|
15 |
|
16 |
# Set up logging
|
17 |
setup_logging()
|
|
|
233 |
|
234 |
# Title and description
|
235 |
if len(st.session_state.messages) == 0:
|
236 |
+
st.title("Paul's Chatbot v0.5")
|
237 |
st.markdown("""
|
238 |
This chatbot can answer questions about your documents.
|
239 |
Ask any question about the content in your documents! This demo is focused on a psychology book. Ask it questions about how the human brain works, how to stick with a habit, or how we are easily fooled.
|
|
|
260 |
|
261 |
# Function to handle feedback with the feedback manager
|
262 |
def handle_feedback(message_id, feedback_type, query, response):
|
|
|
|
|
263 |
logger.info(f"Handling {feedback_type} feedback for message ID: {message_id}")
|
|
|
264 |
if feedback_type == "positive":
|
265 |
feedback_data = {
|
266 |
+
"user_id": "", # Add user tracking if available
|
267 |
"query": query,
|
268 |
+
"normalized_query": query.lower().strip() if query else "",
|
269 |
+
"question_hash": hashlib.md5(query.lower().strip().encode()).hexdigest()[:8] if query else "",
|
270 |
+
"response": response,
|
271 |
+
"rating": "positive",
|
272 |
+
"category": "",
|
273 |
+
"comment": "",
|
274 |
+
"tags": "",
|
275 |
+
"status": "open",
|
276 |
+
"admin_note": "",
|
277 |
+
"assigned_to": "",
|
278 |
+
"document_id": "",
|
279 |
+
"source": "user",
|
280 |
+
"priority": "low",
|
281 |
+
"reviewed": False,
|
282 |
+
"timestamp": datetime.now().isoformat()
|
283 |
}
|
284 |
+
success = feedback_manager.save_feedback_supabase(feedback_data)
|
285 |
+
if not success:
|
286 |
+
logger.error(f"Failed to save positive feedback for message {message_id}")
|
287 |
st.session_state.feedback[message_id] = {
|
288 |
"rating": "positive",
|
289 |
"submitted": True
|
290 |
}
|
291 |
logger.info(f"Positive feedback saved for message {message_id}")
|
292 |
+
else:
|
293 |
st.session_state.feedback[message_id] = {
|
294 |
"rating": "negative",
|
295 |
"show_form": True,
|
296 |
+
"submitted": False
|
297 |
}
|
298 |
logger.info(f"Negative feedback started for message {message_id}, showing form")
|
|
|
|
|
299 |
logger.info(f"Current feedback state: {st.session_state.feedback}")
|
300 |
|
301 |
# Function to submit detailed negative feedback
|
302 |
def submit_negative_feedback(message_id, category, comment, query, response):
|
|
|
303 |
feedback_data = {
|
304 |
+
"user_id": "", # Add user tracking if available
|
305 |
+
"query": query,
|
306 |
+
"normalized_query": query.lower().strip() if query else "",
|
307 |
+
"question_hash": hashlib.md5(query.lower().strip().encode()).hexdigest()[:8] if query else "",
|
308 |
+
"response": response,
|
309 |
"rating": "negative",
|
310 |
"category": category,
|
311 |
"comment": comment,
|
312 |
+
"tags": category.lower().replace(" ", "_") if category else "",
|
313 |
+
"status": "open",
|
314 |
+
"admin_note": "",
|
315 |
+
"assigned_to": "",
|
316 |
+
"document_id": "",
|
317 |
+
"source": "user",
|
318 |
+
"priority": "medium",
|
319 |
+
"reviewed": False,
|
320 |
+
"timestamp": datetime.now().isoformat()
|
321 |
}
|
322 |
+
success = feedback_manager.save_feedback_supabase(feedback_data)
|
323 |
+
if not success:
|
324 |
+
logger.error(f"Failed to save negative feedback for message {message_id}")
|
325 |
st.session_state.feedback[message_id] = {
|
326 |
"rating": "negative",
|
327 |
"submitted": True,
|
|
|
329 |
}
|
330 |
logger.info(f"Negative feedback with category '{category}' submitted for message {message_id}")
|
331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
# Function to generate visible feedback UI for a message
|
333 |
def display_feedback_ui(message, index):
|
334 |
"""Generate and display feedback UI for an assistant message"""
|