diff --git a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py index 7156ab72..a7efc36e 100644 --- a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py +++ b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py @@ -1,3 +1,4 @@ +import json import traceback from ..base import MemoryProviderBase, logger @@ -56,7 +57,16 @@ class MemoryProvider(MemoryProviderBase): filters = {"user_id": self.role_id} - results = self.client.search(query, filters=filters) + search_query = query + try: + if query.strip().startswith("{") and query.strip().endswith("}"): + data = json.loads(query) + if "content" in data: + search_query = data["content"] + except (json.JSONDecodeError, KeyError): + pass + + results = self.client.search(search_query, filters=filters) if not results or "results" not in results: return "" diff --git a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py index c33c58da..dc1853f7 100644 --- a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py +++ b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py @@ -11,6 +11,7 @@ """ import asyncio +import json import traceback from typing import Optional, Dict, Any @@ -207,7 +208,7 @@ class MemoryProvider(MemoryProviderBase): Query memories from PowerMem based on similarity search. Args: - query: The search query string + query: The search query string (may be JSON format with metadata) Returns: Formatted string of relevant memories or empty string if none found @@ -221,6 +222,17 @@ class MemoryProvider(MemoryProviderBase): logger.bind(tag=TAG).debug("No role_id set, returning empty memory") return "" + # Extract content from JSON format if present (for ASR with emotion/language tags) + search_query = query + try: + if query.strip().startswith("{") and query.strip().endswith("}"): + data = json.loads(query) + if "content" in data: + search_query = data["content"] + except (json.JSONDecodeError, KeyError): + # If parsing fails, use original query + pass + result_parts = [] # If user profile mode is enabled, include user profile in results @@ -234,14 +246,14 @@ class MemoryProvider(MemoryProviderBase): # UserMemory uses sync search results = await asyncio.to_thread( self.memory_client.search, - query=query, + query=search_query, user_id=self.role_id, limit=30 ) else: # AsyncMemory uses async search results = await self.memory_client.search( - query=query, + query=search_query, user_id=self.role_id, limit=30 )