Update analyzer.py
Browse files- analyzer.py +31 -8
analyzer.py
CHANGED
@@ -32,17 +32,40 @@ def analyze_code(code: str) -> str:
|
|
32 |
|
33 |
def parse_llm_json_response(response: str):
|
34 |
try:
|
35 |
-
|
36 |
-
|
|
|
37 |
start = response.find('{')
|
38 |
end = response.rfind('}')
|
39 |
-
if start
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
# Replace single quotes
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
return json.loads(json_str)
|
|
|
46 |
except Exception as e:
|
47 |
print("DEBUGGGGG error ::: ", e)
|
48 |
return {"error": f"Failed to parse JSON: {e}", "raw": response}
|
|
|
32 |
|
33 |
def parse_llm_json_response(response: str):
|
34 |
try:
|
35 |
+
print("DEBUGGGGG ::: ", response)
|
36 |
+
|
37 |
+
# 1. Extract the JSON object part of the string
|
38 |
start = response.find('{')
|
39 |
end = response.rfind('}')
|
40 |
+
if start == -1 or end == -1 or end < start:
|
41 |
+
raise ValueError("No valid JSON object found in the response.")
|
42 |
+
json_str = response[start:end+1]
|
43 |
+
|
44 |
+
# 2. Replace single quotes used for keys/values with double quotes.
|
45 |
+
# This handles cases like {'key': 'value'}
|
46 |
+
json_str = re.sub(r"'", '"', json_str)
|
47 |
+
|
48 |
+
# 3. Find all string values and escape any unescaped double quotes inside them.
|
49 |
+
# This uses a function as the replacement in re.sub
|
50 |
+
def escape_inner_quotes(match):
|
51 |
+
# The match object gives us the full string matched by the regex.
|
52 |
+
# We take the part between the outer quotes (group 1)
|
53 |
+
# and replace any \" with a temporary unique placeholder.
|
54 |
+
# Then, we replace any remaining " with \", and finally
|
55 |
+
# restore the original escaped quotes.
|
56 |
+
inner_content = match.group(1)
|
57 |
+
placeholder = "___TEMP_QUOTE___"
|
58 |
+
inner_content = inner_content.replace('\\"', placeholder)
|
59 |
+
inner_content = inner_content.replace('"', '\\"')
|
60 |
+
inner_content = inner_content.replace(placeholder, '\\"')
|
61 |
+
return f'"{inner_content}"'
|
62 |
+
|
63 |
+
# This regex finds a double quote, captures everything until the next double quote,
|
64 |
+
# and then applies the function to that captured group.
|
65 |
+
json_str = re.sub(r'"(.*?)"', escape_inner_quotes, json_str)
|
66 |
+
|
67 |
return json.loads(json_str)
|
68 |
+
|
69 |
except Exception as e:
|
70 |
print("DEBUGGGGG error ::: ", e)
|
71 |
return {"error": f"Failed to parse JSON: {e}", "raw": response}
|