File size: 1,518 Bytes
0772b5a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import json
import re
import ast

def robust_json_decode(text: str) -> dict:
    clean = text.strip()
    if clean.startswith("```"):
        m = re.search(r"```(?:json)?\s*(.*?)\s*```", clean, re.DOTALL)
        if m:
            clean = m.group(1).strip()

    try:
        return json.loads(clean, strict=False)
    except Exception:
        pass

    # Escape raw backslashes
    try:
        # Replace unescaped backslashes
        fixed = re.sub(r'\\(?![/\"\\bfnrtu]|u[0-9a-fA-F]{4})', r'\\\\', clean)
        return json.loads(fixed, strict=False)
    except Exception:
        pass

    # Try regex fallback extraction
    steps = re.findall(r'"([^"]*Bước[^"]*)"', clean)
    if not steps:
        steps = re.findall(r'"([^"]+)"', clean)
        steps = [s for s in steps if any(kw in s.lower() for kw in ['diện tích', 'thể tích', 'chiều cao', 'công thức', 'bước', 'ta có', '='])]

    ans_m = re.search(r'"final_answer"\s*:\s*"?([^"}\n]+)"?', clean)
    return {
        "step_by_step_solution": steps,
        "final_answer": ans_m.group(1).strip() if ans_m else ""
    }

test_str = r'{"step_by_step_solution": ["Bước 1: S = \frac{6^2\sqrt{3}}{4} = 9\sqrt{3}", "Bước 2: SO = 8", "Bước 3: V = \frac{1}{3} \times 9\sqrt{3} \times 8 = 24\sqrt{3}"], "final_answer": "24\sqrt{3}"}'

d = robust_json_decode(test_str)
print("Decoded steps count:", len(d["step_by_step_solution"]))
print("Decoded step 1:", d["step_by_step_solution"][0])
print("Decoded final_answer:", d["final_answer"])