Paul Magee commited on
Commit
c594ca1
·
1 Parent(s): a7d1752

Added supabase dbase to manage the user feedback data. Working.

Browse files
Files changed (1) hide show
  1. 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.4")
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
- "rating": "positive",
269
  "query": query,
270
- "response": response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  }
272
- # Save feedback with custom filename prefix
273
- save_feedback_with_prefix(feedback_data, "pos")
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: # negative feedback
281
  st.session_state.feedback[message_id] = {
282
  "rating": "negative",
283
  "show_form": True,
284
- "submitted": False # Not fully submitted until they complete the form
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
- "query": query,
299
- "response": response
 
 
 
 
 
 
 
300
  }
301
- # Save feedback with custom filename prefix
302
- save_feedback_with_prefix(feedback_data, "neg")
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"""