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