@@ -76,6 +76,27 @@ async def list_memory_categories(
7676 raise RuntimeError (msg )
7777 return response
7878
79+ async def clear_memory (
80+ self ,
81+ where : dict [str , Any ] | None = None ,
82+ ) -> dict [str , Any ]:
83+ ctx = self ._get_context ()
84+ store = self ._get_database ()
85+ where_filters = self ._normalize_where (where )
86+
87+ state : WorkflowState = {
88+ "ctx" : ctx ,
89+ "store" : store ,
90+ "where" : where_filters ,
91+ }
92+
93+ result = await self ._run_workflow ("crud_clear_memory" , state )
94+ response = cast (dict [str , Any ] | None , result .get ("response" ))
95+ if response is None :
96+ msg = "Clear memory workflow failed to produce a response"
97+ raise RuntimeError (msg )
98+ return response
99+
79100 def _build_list_memory_items_workflow (self ) -> list [WorkflowStep ]:
80101 steps = [
81102 WorkflowStep (
@@ -98,7 +119,7 @@ def _build_list_memory_items_workflow(self) -> list[WorkflowStep]:
98119 return steps
99120
100121 @staticmethod
101- def _list_list_memory_items_initial_keys () -> set [str ]:
122+ def _list_list_memories_initial_keys () -> set [str ]:
102123 return {
103124 "ctx" ,
104125 "store" ,
@@ -126,6 +147,51 @@ def _build_list_memory_categories_workflow(self) -> list[WorkflowStep]:
126147 ]
127148 return steps
128149
150+ def _build_clear_memory_workflow (self ) -> list [WorkflowStep ]:
151+ steps = [
152+ WorkflowStep (
153+ step_id = "clear_memory_categories" ,
154+ role = "delete_memories" ,
155+ handler = self ._crud_clear_memory_categories ,
156+ requires = {"ctx" , "store" , "where" },
157+ produces = {"deleted_categories" },
158+ capabilities = {"db" },
159+ ),
160+ WorkflowStep (
161+ step_id = "clear_memory_items" ,
162+ role = "delete_memories" ,
163+ handler = self ._crud_clear_memory_items ,
164+ requires = {"ctx" , "store" , "where" },
165+ produces = {"deleted_items" },
166+ capabilities = {"db" },
167+ ),
168+ WorkflowStep (
169+ step_id = "clear_memory_resources" ,
170+ role = "delete_memories" ,
171+ handler = self ._crud_clear_memory_resources ,
172+ requires = {"ctx" , "store" , "where" },
173+ produces = {"deleted_resources" },
174+ capabilities = {"db" },
175+ ),
176+ WorkflowStep (
177+ step_id = "build_response" ,
178+ role = "emit" ,
179+ handler = self ._crud_build_clear_memory_response ,
180+ requires = {"ctx" , "store" , "deleted_categories" , "deleted_items" , "deleted_resources" },
181+ produces = {"response" },
182+ capabilities = set (),
183+ ),
184+ ]
185+ return steps
186+
187+ @staticmethod
188+ def _list_clear_memories_initial_keys () -> set [str ]:
189+ return {
190+ "ctx" ,
191+ "store" ,
192+ "where" ,
193+ }
194+
129195 def _normalize_where (self , where : Mapping [str , Any ] | None ) -> dict [str , Any ]:
130196 """Validate and clean the `where` scope filters against the configured user model."""
131197 if not where :
@@ -177,6 +243,39 @@ def _crud_build_list_categories_response(self, state: WorkflowState, step_contex
177243 state ["response" ] = response
178244 return state
179245
246+ def _crud_clear_memory_categories (self , state : WorkflowState , step_context : Any ) -> WorkflowState :
247+ where_filters = state .get ("where" ) or {}
248+ store = state ["store" ]
249+ deleted = store .memory_category_repo .clear_categories (where_filters )
250+ state ["deleted_categories" ] = deleted
251+ return state
252+
253+ def _crud_clear_memory_items (self , state : WorkflowState , step_context : Any ) -> WorkflowState :
254+ where_filters = state .get ("where" ) or {}
255+ store = state ["store" ]
256+ deleted = store .memory_item_repo .clear_items (where_filters )
257+ state ["deleted_items" ] = deleted
258+ return state
259+
260+ def _crud_clear_memory_resources (self , state : WorkflowState , step_context : Any ) -> WorkflowState :
261+ where_filters = state .get ("where" ) or {}
262+ store = state ["store" ]
263+ deleted = store .resource_repo .clear_resources (where_filters )
264+ state ["deleted_resources" ] = deleted
265+ return state
266+
267+ def _crud_build_clear_memory_response (self , state : WorkflowState , step_context : Any ) -> WorkflowState :
268+ deleted_categories = state .get ("deleted_categories" , {})
269+ deleted_items = state .get ("deleted_items" , {})
270+ deleted_resources = state .get ("deleted_resources" , {})
271+ response = {
272+ "deleted_categories" : [self ._model_dump_without_embeddings (cat ) for cat in deleted_categories .values ()],
273+ "deleted_items" : [self ._model_dump_without_embeddings (item ) for item in deleted_items .values ()],
274+ "deleted_resources" : [self ._model_dump_without_embeddings (res ) for res in deleted_resources .values ()],
275+ }
276+ state ["response" ] = response
277+ return state
278+
180279 async def create_memory_item (
181280 self ,
182281 * ,
0 commit comments