1717 ShortTermMemoryConfPartial ,
1818)
1919from memmachine .common .episode_store import Episode , EpisodeEntry , EpisodeIdT
20- from memmachine .common .errors import ConfigurationError , SessionNotFoundError
20+ from memmachine .common .errors import (
21+ ConfigurationError ,
22+ SessionAlreadyExistsError ,
23+ SessionNotFoundError ,
24+ )
2125from memmachine .common .filter .filter_parser import (
2226 And as FilterAnd ,
2327)
@@ -162,6 +166,7 @@ async def create_session(
162166 * ,
163167 description : str = "" ,
164168 user_conf : EpisodicMemoryConfPartial | None = None ,
169+ exist_ok : bool = False ,
165170 ) -> SessionDataManager .SessionInfo :
166171 """Create a new session."""
167172 episodic_memory_conf = self ._with_default_episodic_memory_conf (
@@ -170,13 +175,18 @@ async def create_session(
170175 )
171176
172177 session_data_manager = await self ._resources .get_session_data_manager ()
173- await session_data_manager .create_new_session (
174- session_key = session_key ,
175- configuration = {},
176- param = episodic_memory_conf ,
177- description = description ,
178- metadata = {},
179- )
178+ try :
179+ await session_data_manager .create_new_session (
180+ session_key = session_key ,
181+ configuration = {},
182+ param = episodic_memory_conf ,
183+ description = description ,
184+ metadata = {},
185+ )
186+ except SessionAlreadyExistsError :
187+ if not exist_ok :
188+ raise
189+
180190 ret = await self .get_session (session_key = session_key )
181191 if ret is None :
182192 raise RuntimeError (f"Failed to create session { session_key } " )
@@ -267,19 +277,17 @@ async def add_episodes(
267277 )
268278 episode_ids = [e .uid for e in episodes ]
269279
280+ if await self .get_session (session_data .session_key ) is None :
281+ await self .create_session (session_data .session_key , exist_ok = True )
282+
270283 tasks = []
271284
272285 if MemoryType .Episodic in target_memories :
273286 episodic_memory_manager = (
274287 await self ._resources .get_episodic_memory_manager ()
275288 )
276- async with episodic_memory_manager .open_or_create_episodic_memory (
289+ async with episodic_memory_manager .open_episodic_memory (
277290 session_key = session_data .session_key ,
278- description = "" ,
279- episodic_memory_config = self ._with_default_episodic_memory_conf (
280- session_key = session_data .session_key
281- ),
282- metadata = {},
283291 ) as episodic_session :
284292 tasks .append (episodic_session .add_memory_episodes (episodes ))
285293
0 commit comments