mgbam commited on
Commit
3f88502
·
verified ·
1 Parent(s): a99de88

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -5
app.py CHANGED
@@ -252,6 +252,17 @@ def extract_json_from_text(text):
252
  return text[start:i+1]
253
  return None
254
 
 
 
 
 
 
 
 
 
 
 
 
255
  def call_gemini_api(prompt):
256
  """
257
  Calls the Gemini API using the provided prompt.
@@ -302,14 +313,24 @@ def call_gemini_api(prompt):
302
  if match:
303
  final_json_text = match.group(1)
304
  else:
305
- # Fallback: extract using our balanced-braces function
306
  final_json_text = extract_json_from_text(json_response_text)
307
- if final_json_text:
308
- insights = json.loads(final_json_text)
309
- return insights, None
310
- else:
311
  st.warning("⚠️ Could not extract a valid JSON object.")
312
  return {"raw_response": response.text}, "AI response did not contain clear JSON object."
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  except json.JSONDecodeError as json_err:
314
  st.error(f"🚨 Error parsing JSON: {json_err}")
315
  st.code(response.text, language='text')
 
252
  return text[start:i+1]
253
  return None
254
 
255
+ def fix_json(text):
256
+ """
257
+ Attempt to fix common JSON formatting issues.
258
+ This function removes trailing commas and inserts commas between adjacent objects.
259
+ """
260
+ # Remove trailing commas before closing braces
261
+ text = re.sub(r',\s*}', "}", text)
262
+ # Insert missing commas between adjacent objects in an array if needed
263
+ text = re.sub(r'}\s*{', "},{", text)
264
+ return text
265
+
266
  def call_gemini_api(prompt):
267
  """
268
  Calls the Gemini API using the provided prompt.
 
313
  if match:
314
  final_json_text = match.group(1)
315
  else:
316
+ # Fallback: extract using balanced braces method
317
  final_json_text = extract_json_from_text(json_response_text)
318
+ if not final_json_text:
 
 
 
319
  st.warning("⚠️ Could not extract a valid JSON object.")
320
  return {"raw_response": response.text}, "AI response did not contain clear JSON object."
321
+ try:
322
+ insights = json.loads(final_json_text)
323
+ return insights, None
324
+ except json.JSONDecodeError as json_err:
325
+ # Attempt to fix the JSON string and re-parse
326
+ fixed_text = fix_json(final_json_text)
327
+ try:
328
+ insights = json.loads(fixed_text)
329
+ return insights, None
330
+ except json.JSONDecodeError as json_err2:
331
+ st.error(f"🚨 Error parsing JSON after fix attempt: {json_err2}")
332
+ st.code(response.text, language='text')
333
+ return None, f"AI response not valid JSON: {json_err2}"
334
  except json.JSONDecodeError as json_err:
335
  st.error(f"🚨 Error parsing JSON: {json_err}")
336
  st.code(response.text, language='text')