1- from typing import Any
21import time
2+ from typing import Any
33
44from pydantic import PrivateAttr
55
6- from crewai .memory .entity .entity_memory_item import EntityMemoryItem
7- from crewai .memory .memory import Memory
8- from crewai .memory .storage .rag_storage import RAGStorage
96from crewai .events .event_bus import crewai_event_bus
107from crewai .events .types .memory_events import (
11- MemoryQueryStartedEvent ,
128 MemoryQueryCompletedEvent ,
139 MemoryQueryFailedEvent ,
14- MemorySaveStartedEvent ,
10+ MemoryQueryStartedEvent ,
1511 MemorySaveCompletedEvent ,
1612 MemorySaveFailedEvent ,
13+ MemorySaveStartedEvent ,
1714)
15+ from crewai .memory .entity .entity_memory_item import EntityMemoryItem
16+ from crewai .memory .memory import Memory
17+ from crewai .memory .storage .rag_storage import RAGStorage
1818
1919
2020class EntityMemory (Memory ):
@@ -31,10 +31,10 @@ def __init__(self, crew=None, embedder_config=None, storage=None, path=None):
3131 if memory_provider == "mem0" :
3232 try :
3333 from crewai .memory .storage .mem0_storage import Mem0Storage
34- except ImportError :
34+ except ImportError as e :
3535 raise ImportError (
3636 "Mem0 is not installed. Please install it with `pip install mem0ai`."
37- )
37+ ) from e
3838 config = embedder_config .get ("config" ) if embedder_config else None
3939 storage = Mem0Storage (type = "short_term" , crew = crew , config = config )
4040 else :
@@ -90,23 +90,31 @@ def save(
9090 saved_count = 0
9191 errors = []
9292
93+ def save_single_item (item : EntityMemoryItem ) -> tuple [bool , str | None ]:
94+ """Save a single item and return success status."""
95+ try :
96+ if self ._memory_provider == "mem0" :
97+ data = f"""
98+ Remember details about the following entity:
99+ Name: { item .name }
100+ Type: { item .type }
101+ Entity Description: { item .description }
102+ """
103+ else :
104+ data = f"{ item .name } ({ item .type } ): { item .description } "
105+
106+ super (EntityMemory , self ).save (data , item .metadata )
107+ return True , None
108+ except Exception as e :
109+ return False , f"{ item .name } : { e !s} "
110+
93111 try :
94112 for item in items :
95- try :
96- if self ._memory_provider == "mem0" :
97- data = f"""
98- Remember details about the following entity:
99- Name: { item .name }
100- Type: { item .type }
101- Entity Description: { item .description }
102- """
103- else :
104- data = f"{ item .name } ({ item .type } ): { item .description } "
105-
106- super ().save (data , item .metadata )
113+ success , error = save_single_item (item )
114+ if success :
107115 saved_count += 1
108- except Exception as e :
109- errors .append (f" { item . name } : { str ( e ) } " )
116+ else :
117+ errors .append (error )
110118
111119 if is_batch :
112120 emit_value = f"Saved { saved_count } entities"
@@ -153,8 +161,8 @@ def save(
153161 def search (
154162 self ,
155163 query : str ,
156- limit : int = 3 ,
157- score_threshold : float = 0.35 ,
164+ limit : int = 5 ,
165+ score_threshold : float = 0.6 ,
158166 ):
159167 crewai_event_bus .emit (
160168 self ,
@@ -206,4 +214,6 @@ def reset(self) -> None:
206214 try :
207215 self .storage .reset ()
208216 except Exception as e :
209- raise Exception (f"An error occurred while resetting the entity memory: { e } " )
217+ raise Exception (
218+ f"An error occurred while resetting the entity memory: { e } "
219+ ) from e
0 commit comments