@@ -62,16 +62,14 @@ def store_short_term(self, content: str, metadata: Optional[Dict] = None, qualit
6262 except Exception as e :
6363 self ._log_verbose (f"Failed to store in { self .provider } STM: { e } " , logging .WARNING )
6464
65- # Backward compatibility: Also store in SQLite if not using SQLite adapter
66- if hasattr (self , '_sqlite_adapter' ) and self ._sqlite_adapter != getattr (self , 'memory_adapter' , None ):
65+ # Only use SQLite fallback if primary storage failed completely
66+ if not memory_id and hasattr (self , '_sqlite_adapter' ) and self ._sqlite_adapter != getattr (self , 'memory_adapter' , None ):
6767 try :
68- fallback_id = self ._sqlite_adapter .store_short_term (content , metadata = clean_metadata , ** kwargs )
69- if not memory_id :
70- memory_id = fallback_id
68+ memory_id = self ._sqlite_adapter .store_short_term (content , metadata = clean_metadata , ** kwargs )
69+ self ._log_verbose (f"Stored in SQLite STM as fallback: { content [:100 ]} ..." )
7170 except Exception as e :
7271 logging .error (f"Failed to store in SQLite STM fallback: { e } " )
73- if not memory_id :
74- return ""
72+ return ""
7573
7674 # Auto-promote to long-term memory if quality is high
7775 if auto_promote and quality_score >= 7.5 : # High quality threshold
@@ -122,38 +120,39 @@ def store_short_term_structured(self, content: str, metadata: Optional[Dict] = N
122120 clean_metadata = self ._sanitize_metadata (metadata )
123121
124122 # Protocol-driven storage: Try primary adapter first
123+ memory_id = ""
125124 primary_error = None
126- memory_id = None
127-
128125 try :
129126 if hasattr (self , 'memory_adapter' ) and self .memory_adapter :
130127 memory_id = self .memory_adapter .store_short_term (content , metadata = clean_metadata , ** kwargs )
131128 self ._log_verbose (f"Stored in { self .provider } STM via adapter: { content [:100 ]} ..." )
132-
133- # Auto-promote to long-term memory if quality is high
134- if auto_promote and quality_score >= 7.5 :
135- try :
136- self .store_long_term (content , clean_metadata , quality_score , user_id , ** kwargs )
137- self ._log_verbose (f"Auto-promoted STM content to LTM (score: { quality_score :.2f} )" )
138- except Exception as e :
139- # Auto-promotion failure doesn't affect the primary storage result
140- logging .warning (f"Failed to auto-promote to LTM: { e } " )
141-
142- # Emit memory event for successful storage
143- self ._emit_memory_event ("store" , "short_term" , content , clean_metadata )
144-
145- return MemoryResult .success_result (
146- memory_id = memory_id ,
147- adapter_used = self .provider ,
148- context = {
149- "quality_score" : quality_score ,
150- "auto_promoted" : auto_promote and quality_score >= 7.5
151- }
152- )
153129 except Exception as e :
154130 primary_error = str (e )
155131 self ._log_verbose (f"Failed to store in { self .provider } STM: { e } " , logging .WARNING )
156132
133+ # Only proceed with success if we got a valid memory_id
134+ if memory_id :
135+ # Auto-promote to long-term memory if quality is high
136+ if auto_promote and quality_score >= 7.5 :
137+ try :
138+ self .store_long_term (content , clean_metadata , quality_score , user_id , ** kwargs )
139+ self ._log_verbose (f"Auto-promoted STM content to LTM (score: { quality_score :.2f} )" )
140+ except Exception as e :
141+ # Auto-promotion failure doesn't affect the primary storage result
142+ logging .warning (f"Failed to auto-promote to LTM: { e } " )
143+
144+ # Emit memory event for successful storage
145+ self ._emit_memory_event ("store" , "short_term" , content , clean_metadata )
146+
147+ return MemoryResult .success_result (
148+ memory_id = memory_id ,
149+ adapter_used = self .provider ,
150+ context = {
151+ "quality_score" : quality_score ,
152+ "auto_promoted" : auto_promote and quality_score >= 7.5
153+ }
154+ )
155+
157156 # Fallback to SQLite if available and different from primary adapter
158157 fallback_error = None
159158 if hasattr (self , '_sqlite_adapter' ) and self ._sqlite_adapter != getattr (self , 'memory_adapter' , None ):
@@ -450,13 +449,25 @@ async def store_short_term_async(self, content: str, metadata: Optional[Dict] =
450449 raw_metadata ["user_id" ] = user_id
451450 clean_metadata = self ._sanitize_metadata (raw_metadata )
452451
453- # Store in SQLite STM
452+ # Try primary adapter first (async version)
454453 memory_id = ""
455454 try :
456- memory_id = await asyncio .to_thread (self ._store_sqlite_stm , content , clean_metadata , quality_score )
455+ if hasattr (self , 'memory_adapter' ) and self .memory_adapter :
456+ memory_id = await asyncio .to_thread (
457+ self .memory_adapter .store_short_term , content , metadata = clean_metadata , ** kwargs
458+ )
459+ self ._log_verbose (f"Stored in { self .provider } async STM via adapter: { content [:100 ]} ..." )
457460 except Exception as e :
458- logging .error (f"Failed to store in SQLite STM: { e } " )
459- return ""
461+ self ._log_verbose (f"Failed to store in { self .provider } async STM: { e } " , logging .WARNING )
462+
463+ # Only use SQLite fallback if primary storage failed completely
464+ if not memory_id and hasattr (self , '_sqlite_adapter' ) and self ._sqlite_adapter != getattr (self , 'memory_adapter' , None ):
465+ try :
466+ memory_id = await asyncio .to_thread (self ._store_sqlite_stm , content , clean_metadata , quality_score )
467+ self ._log_verbose (f"Stored in SQLite async STM as fallback: { content [:100 ]} ..." )
468+ except Exception as e :
469+ logging .error (f"Failed to store in SQLite async STM fallback: { e } " )
470+ return ""
460471
461472 # Auto-promote to long-term memory if quality is high (async)
462473 if auto_promote and quality_score >= 7.5 : # High quality threshold
0 commit comments