11import concurrent .futures
22import difflib
33import json
4+ import re
45
56from datetime import datetime
67from typing import TYPE_CHECKING , Any
@@ -493,7 +494,7 @@ def _info_comparison(self, memory: TextualMemoryItem, _info: dict, include_keys:
493494 record = []
494495 for key in include_keys :
495496 info_v = _info .get (key )
496- mem_v = memory .metadata .info .get (key , None )
497+ mem_v = memory .metadata .info .get (key , None ) if memory . metadata . info else None
497498 record .append (info_v == mem_v )
498499 return all (record )
499500
@@ -554,7 +555,8 @@ def _get_llm_response(self, prompt: str, dsl: bool = True) -> dict:
554555 response_text = self .llm .generate (messages , temperature = 0.3 , timeout = 60 )
555556 if dsl :
556557 response_text = response_text .replace ("```" , "" ).replace ("json" , "" )
557- response_json = json .loads (response_text )
558+ cleaned_text = re .sub (r"[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]" , "" , response_text )
559+ response_json = json .loads (cleaned_text )
558560 else :
559561 return response_text
560562 except Exception as e :
@@ -620,7 +622,7 @@ def correct_item(data):
620622 dehallu_res = [correct_item (item ) for item in operations ]
621623 dehalluded_operations = [item for item in dehallu_res if item ]
622624
623- # deduplicate add objects
625+ # c add objects
624626 add_texts = []
625627 llm_operations = []
626628 for item in dehalluded_operations :
@@ -631,6 +633,9 @@ def correct_item(data):
631633 add_texts .append (item ["text" ])
632634 elif item ["operation" ].lower () == "update" :
633635 llm_operations .append (item )
636+ logger .info (
637+ f"[Feedback Core: deduplicate add] { len (dehalluded_operations )} -> { len (llm_operations )} memories"
638+ )
634639
635640 # Update takes precedence over add
636641 has_update = any (item .get ("operation" ).lower () == "update" for item in llm_operations )
0 commit comments