update: resolve JSONDecodeError in task_memory_validation

This commit is contained in:
caozouying.czy 2026-02-25 12:05:16 +08:00
parent 4bb260ddad
commit 5cbf9f3f14
4 changed files with 25 additions and 9 deletions

View file

@ -42,4 +42,4 @@ __all__ = [
for name in __all__:
tool_class = globals()[name]
R.op.register()(tool_class)
R.ops.register()(tool_class)

View file

@ -19,11 +19,15 @@ class MemoryAddition(BaseOp):
"""Execute the memory insertion operation.
Inserts new or updated memories into the vector store:
1. Reads memory_list from response.metadata
2. Converts MemoryNode objects to VectorNode objects
3. Inserts them into the vector store
1. Reads memory_list from context (can be dicts or MemoryNode)
2. Converts raw items to MemoryNode objects
3. Converts MemoryNode objects to VectorNode objects
4. Inserts them into the vector store
"""
insert_memory_list: List[MemoryNode] = self.context.memory_list
raw_memory_list = self.context.memory_list
insert_memory_list: List[MemoryNode] = [
MemoryNode(**x) if isinstance(x, dict) else x for x in raw_memory_list
]
if insert_memory_list:
insert_nodes: List[VectorNode] = [x.to_vector_node() for x in insert_memory_list]
await self.vector_store.insert(nodes=insert_nodes)

View file

@ -56,7 +56,7 @@ class MemoryDeduplication(BaseOp):
for task_memory in task_memories:
# Generate embedding for current task memory
current_embedding = self._get_task_memory_embedding(task_memory)
current_embedding = await self._get_task_memory_embedding(task_memory)
if current_embedding is None:
logger.warning(f"Failed to generate embedding for task memory: {str(task_memory.when_to_use)[:50]}...")

View file

@ -81,10 +81,22 @@ class MemoryValidation(BaseOp):
json_pattern = r"```json\s*([\s\S]*?)\s*```"
json_blocks = re.findall(json_pattern, response_content)
parsed: Dict[str, Any] = {}
if json_blocks:
parsed = json.loads(json_blocks[0])
else:
parsed = {}
raw_json = json_blocks[0]
try:
parsed = json.loads(raw_json)
except json.JSONDecodeError as json_err:
logger.warning(
f"JSONDecodeError in task_memory_validation, fallback to regex parse: {json_err}"
)
is_valid_match = re.search(r'"is_valid"\s*:\s*(true|false)', raw_json, re.IGNORECASE)
score_match = re.search(r'"score"\s*:\s*([0-9]+(?:\.[0-9]+)?)', raw_json)
if is_valid_match:
parsed["is_valid"] = is_valid_match.group(1).lower() == "true"
if score_match:
parsed["score"] = float(score_match.group(1))
is_valid = parsed.get("is_valid", True)
score = parsed.get("score", 0.5)