diff --git a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py index a7efc36e..80dbfeb5 100644 --- a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py +++ b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py @@ -37,11 +37,26 @@ class MemoryProvider(MemoryProviderBase): try: # Format the content as a message list for mem0 - messages = [ - {"role": message.role, "content": message.content} - for message in msgs - if message.role != "system" - ] + messages = [] + for message in msgs: + if message.role == "system": + continue + + content = message.content + + # Extract content from JSON format if present (for ASR with emotion/language tags) + # Same logic as in query_memory method + try: + if content and content.strip().startswith("{") and content.strip().endswith("}"): + data = json.loads(content) + if "content" in data: + content = data["content"] + except (json.JSONDecodeError, KeyError, TypeError): + # If parsing fails, use original content + pass + + messages.append({"role": message.role, "content": content}) + result = self.client.add(messages, user_id=self.role_id) logger.bind(tag=TAG).debug(f"Save memory result: {result}") except Exception as e: diff --git a/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py b/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py index 5904d440..bf43d629 100644 --- a/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py +++ b/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py @@ -149,10 +149,22 @@ class MemoryProvider(MemoryProviderBase): msgStr = "" for msg in msgs: + content = msg.content + + # Extract content from JSON format if present (for ASR with emotion/language tags) + try: + if content and content.strip().startswith("{") and content.strip().endswith("}"): + data = json.loads(content) + if "content" in data: + content = data["content"] + except (json.JSONDecodeError, KeyError, TypeError): + # If parsing fails, use original content + pass + if msg.role == "user": - msgStr += f"User: {msg.content}\n" + msgStr += f"User: {content}\n" elif msg.role == "assistant": - msgStr += f"Assistant: {msg.content}\n" + msgStr += f"Assistant: {content}\n" if self.short_memory and len(self.short_memory) > 0: msgStr += "历史记忆:\n" msgStr += self.short_memory diff --git a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py index 28b78f8f..5c453c07 100644 --- a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py +++ b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py @@ -173,11 +173,25 @@ class MemoryProvider(MemoryProviderBase): try: # Format the content as a message list for PowerMem - messages = [ - {"role": message.role, "content": message.content} - for message in msgs - if message.role != "system" - ] + messages = [] + for message in msgs: + if message.role == "system": + continue + + content = message.content + + # Extract content from JSON format if present (for ASR with emotion/language tags) + # Same logic as in query_memory method + try: + if content and content.strip().startswith("{") and content.strip().endswith("}"): + data = json.loads(content) + if "content" in data: + content = data["content"] + except (json.JSONDecodeError, KeyError, TypeError): + # If parsing fails, use original content + pass + + messages.append({"role": message.role, "content": content}) # Add memory using PowerMem SDK result = self.memory_client.add(