fix: handle control characters in LLM JSON responses (#4420)
Co-authored-by: utkarsh240799 <utkarsh240799@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
utkarsh240799
Claude Opus 4.6
parent
08de18f860
commit
410b79c750
+6
-6
@@ -521,11 +521,11 @@ class Memory(MemoryBase):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
# First try direct JSON parsing
|
# First try direct JSON parsing
|
||||||
new_retrieved_facts = json.loads(response)["facts"]
|
new_retrieved_facts = json.loads(response, strict=False)["facts"]
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
# Try extracting JSON from response using built-in function
|
# Try extracting JSON from response using built-in function
|
||||||
extracted_json = extract_json(response)
|
extracted_json = extract_json(response)
|
||||||
new_retrieved_facts = json.loads(extracted_json)["facts"]
|
new_retrieved_facts = json.loads(extracted_json, strict=False)["facts"]
|
||||||
new_retrieved_facts = normalize_facts(new_retrieved_facts)
|
new_retrieved_facts = normalize_facts(new_retrieved_facts)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error in new_retrieved_facts: {e}")
|
logger.error(f"Error in new_retrieved_facts: {e}")
|
||||||
@@ -589,7 +589,7 @@ class Memory(MemoryBase):
|
|||||||
new_memories_with_actions = {}
|
new_memories_with_actions = {}
|
||||||
else:
|
else:
|
||||||
response = remove_code_blocks(response)
|
response = remove_code_blocks(response)
|
||||||
new_memories_with_actions = json.loads(response)
|
new_memories_with_actions = json.loads(response, strict=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Invalid JSON response: {e}")
|
logger.error(f"Invalid JSON response: {e}")
|
||||||
new_memories_with_actions = {}
|
new_memories_with_actions = {}
|
||||||
@@ -1553,11 +1553,11 @@ class AsyncMemory(MemoryBase):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
# First try direct JSON parsing
|
# First try direct JSON parsing
|
||||||
new_retrieved_facts = json.loads(response)["facts"]
|
new_retrieved_facts = json.loads(response, strict=False)["facts"]
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
# Try extracting JSON from response using built-in function
|
# Try extracting JSON from response using built-in function
|
||||||
extracted_json = extract_json(response)
|
extracted_json = extract_json(response)
|
||||||
new_retrieved_facts = json.loads(extracted_json)["facts"]
|
new_retrieved_facts = json.loads(extracted_json, strict=False)["facts"]
|
||||||
new_retrieved_facts = normalize_facts(new_retrieved_facts)
|
new_retrieved_facts = normalize_facts(new_retrieved_facts)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error in new_retrieved_facts: {e}")
|
logger.error(f"Error in new_retrieved_facts: {e}")
|
||||||
@@ -1624,7 +1624,7 @@ class AsyncMemory(MemoryBase):
|
|||||||
new_memories_with_actions = {}
|
new_memories_with_actions = {}
|
||||||
else:
|
else:
|
||||||
response = remove_code_blocks(response)
|
response = remove_code_blocks(response)
|
||||||
new_memories_with_actions = json.loads(response)
|
new_memories_with_actions = json.loads(response, strict=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Invalid JSON response: {e}")
|
logger.error(f"Invalid JSON response: {e}")
|
||||||
new_memories_with_actions = {}
|
new_memories_with_actions = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user