Dhruv-Ty commited on
Commit
3ffe608
·
verified ·
1 Parent(s): b6833b8

Update src/database.py

Browse files
Files changed (1) hide show
  1. src/database.py +51 -23
src/database.py CHANGED
@@ -80,13 +80,19 @@ class SupabaseClient:
80
  if "evidence" in message:
81
  # Convert evidence to string for storage
82
  try:
83
- message_data["evidence"] = json.dumps(message.get("evidence"))
 
84
  except Exception as e:
85
- # If JSON serialization fails, store as empty array
86
  message_data["evidence"] = "[]"
87
  print(f"Failed to serialize evidence: {str(e)}")
 
 
88
 
89
  try:
 
 
 
90
  response = self._make_request(
91
  "POST",
92
  "/rest/v1/messages",
@@ -96,14 +102,18 @@ class SupabaseClient:
96
  if response.status_code not in (200, 201):
97
  print(f"Failed to save message: Status {response.status_code}, Response: {response.text}")
98
  # Attempt to log the message that failed to save
99
- print(f"Message data: {json.dumps(message_data)}")
100
  return None
101
 
 
102
  return response.json()
103
  except Exception as e:
104
  print(f"Exception saving message to database: {str(e)}")
105
  # Attempt to log the message that failed to save
106
- print(f"Message data: {json.dumps(message_data)}")
 
 
 
107
  return None
108
 
109
  def get_conversation_history(self, consultation_id):
@@ -114,6 +124,7 @@ class SupabaseClient:
114
  }
115
 
116
  try:
 
117
  response = self._make_request(
118
  "GET",
119
  "/rest/v1/messages",
@@ -131,28 +142,46 @@ class SupabaseClient:
131
  history = []
132
 
133
  for msg in messages:
134
- message_dict = {
135
- "role": msg["role"],
136
- "content": msg["content"]
137
- }
138
-
139
- if msg.get("explanation"):
140
- message_dict["explanation"] = msg["explanation"]
141
-
142
- if msg.get("evidence"):
143
- # Parse evidence JSON string back to object
144
- try:
145
- message_dict["evidence"] = json.loads(msg["evidence"])
146
- except Exception as e:
147
- print(f"Failed to parse evidence JSON: {str(e)}")
148
- message_dict["evidence"] = []
149
-
150
- history.append(message_dict)
 
 
 
 
 
 
151
 
 
152
  return history
153
 
154
  except Exception as e:
155
  print(f"Exception retrieving conversation history: {str(e)}")
 
 
 
 
 
 
 
 
 
 
 
156
  return []
157
 
158
  def delete_conversation(self, consultation_id):
@@ -191,5 +220,4 @@ class SupabaseClient:
191
  # Initialize database client
192
  def get_db_client():
193
  """Get database client instance."""
194
- return SupabaseClient()
195
-
 
80
  if "evidence" in message:
81
  # Convert evidence to string for storage
82
  try:
83
+ # Handle potential circular references in JSON
84
+ message_data["evidence"] = json.dumps(message.get("evidence"), default=str)
85
  except Exception as e:
86
+ # If JSON serialization fails, log error and store as empty array
87
  message_data["evidence"] = "[]"
88
  print(f"Failed to serialize evidence: {str(e)}")
89
+ # Print the evidence structure for debugging
90
+ print(f"Evidence structure causing error: {type(message.get('evidence'))}")
91
 
92
  try:
93
+ # Log the operation
94
+ print(f"Saving message for consultation {consultation_id}, role: {message.get('role')}")
95
+
96
  response = self._make_request(
97
  "POST",
98
  "/rest/v1/messages",
 
102
  if response.status_code not in (200, 201):
103
  print(f"Failed to save message: Status {response.status_code}, Response: {response.text}")
104
  # Attempt to log the message that failed to save
105
+ print(f"Message data: {json.dumps(message_data, default=str)}")
106
  return None
107
 
108
+ print(f"Successfully saved message to database")
109
  return response.json()
110
  except Exception as e:
111
  print(f"Exception saving message to database: {str(e)}")
112
  # Attempt to log the message that failed to save
113
+ try:
114
+ print(f"Message data: {json.dumps(message_data, default=str)}")
115
+ except:
116
+ print("Could not serialize message data for logging")
117
  return None
118
 
119
  def get_conversation_history(self, consultation_id):
 
124
  }
125
 
126
  try:
127
+ print(f"Retrieving conversation history for consultation {consultation_id}")
128
  response = self._make_request(
129
  "GET",
130
  "/rest/v1/messages",
 
142
  history = []
143
 
144
  for msg in messages:
145
+ try:
146
+ message_dict = {
147
+ "role": msg["role"],
148
+ "content": msg["content"]
149
+ }
150
+
151
+ if msg.get("explanation"):
152
+ message_dict["explanation"] = msg["explanation"]
153
+
154
+ if msg.get("evidence"):
155
+ # Parse evidence JSON string back to object
156
+ try:
157
+ message_dict["evidence"] = json.loads(msg["evidence"])
158
+ except Exception as e:
159
+ print(f"Failed to parse evidence JSON for message ID {msg.get('id', 'unknown')}: {str(e)}")
160
+ print(f"Evidence string causing error: {msg['evidence'][:100]}...")
161
+ message_dict["evidence"] = []
162
+
163
+ history.append(message_dict)
164
+ except Exception as e:
165
+ print(f"Error processing message from database: {str(e)}")
166
+ # Try to include partial message info for debugging
167
+ print(f"Problematic message keys: {msg.keys() if isinstance(msg, dict) else 'Not a dict'}")
168
 
169
+ print(f"Successfully processed {len(history)} messages for history")
170
  return history
171
 
172
  except Exception as e:
173
  print(f"Exception retrieving conversation history: {str(e)}")
174
+ # Try to reconnect or handle database connection issues
175
+ try:
176
+ # Simple test to check if connection is still valid
177
+ test_response = self._make_request("GET", "/rest/v1/health")
178
+ if test_response.status_code != 200:
179
+ print("Database connection may be down, returned status: {test_response.status_code}")
180
+ else:
181
+ print("Database connection appears to be working despite retrieval error")
182
+ except Exception as conn_error:
183
+ print(f"Failed to connect to database: {str(conn_error)}")
184
+
185
  return []
186
 
187
  def delete_conversation(self, consultation_id):
 
220
  # Initialize database client
221
  def get_db_client():
222
  """Get database client instance."""
223
+ return SupabaseClient()