File size: 1,041 Bytes
34b6cef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import json
import re
def safe_json_parse(raw_text, fallback):
"""
Safely parse LLM JSON output.
Handles:
- markdown code blocks
- extra explanation text
- malformed formatting
- greedy JSON extraction issues
- invalid output fallback
"""
try:
if not raw_text:
return fallback
cleaned = raw_text.strip()
# Remove markdown code fences
cleaned = re.sub(
r"```json|```python|```",
"",
cleaned
).strip()
# Normalize smart quotes
cleaned = cleaned.replace("“", '"')
cleaned = cleaned.replace("”", '"')
cleaned = cleaned.replace("’", "'")
# Extract first valid JSON object only (non-greedy)
match = re.search(
r"\{[\s\S]*?\}",
cleaned
)
if match:
cleaned = match.group()
return json.loads(cleaned)
except Exception as e:
print(f"JSON Parse Failed: {str(e)}")
return fallback |