File size: 2,020 Bytes
ba5110e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
49
50
51
52
53
import json
import re

# Exact text from User (Step 3333). 
# I am using a raw string r'' to represent what likely came out of the LLM before any python processing.
# BUT, if the user copy-pasted from a log that already had escapes...
# Let's assume the LLM output raw LaTeX single backslashes.

llm_output = r"""
{
  "questions": [
    {
      "id": 1,
      "content": "Tính tích phân $\iint\limits_{D} \frac{x^2 + 2}{x^2 + y^2 + 4} \, dxdy$, với $D$ là miền giới hạn bởi hình vuông $|x| + |y| = 1$.",
      "type": "code",
      "tool_input": "Viết code Python để tính tích phân kép của hàm f(x,y) = (x^2 + 2)/(x^2 + y^2 + 4) trên miền D là hình vuông |x| + |y| = 1"
    },
    {
      "id": 2,
      "content": "Tính tích phân $\iint\limits_{D} \frac{y^2 + 8}{x^2 + y^2 + 16} \, dxdy$, với $D$ là miền giới hạn bởi hình vuông $|x| + |y| = 2$.",
      "type": "code",
      "tool_input": "Viết code Python để tính tích phân kép của hàm f(x,y) = (y^2 + 8)/(x^2 + y^2 + 16) trên miền D là hình vuông |x| + |y| = 2"
    }
  ]
}
"""

print(f"Original Length: {len(llm_output)}")

# Current Logic in nodes.py
def current_repair(text):
    return re.sub(r'\\(?!"|u[0-9a-fA-F]{4})', r'\\\\', text)

print("\n--- Testing Current Repair Logic ---")
fixed = current_repair(llm_output)
print(f"Fixed snippet: {fixed[50:150]}...")

try:
    data = json.loads(fixed)
    print("✅ JSON Load Success")
    print(data['questions'][0]['content'])
except json.JSONDecodeError as e:
    print(f"❌ JSON Load Failed: {e}")
    # Inspect around error
    print(f"Error Context: {fixed[e.pos-10:e.pos+10]}")

print("\n--- Testing Improved Logic (Lookbehind?) ---")
# If the current logic fails, we need to know why.
# Maybe it double-escapes existing double-escapes?
# If input is `\\iint` (valid), regex sees `\` (first one) not followed by quote. Replaces with `\\\\`.
# Result `\\\\` + `iint`? No, `\\\\` + `\iint` (second slash remains)?
# Let's see what happens.