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"])