@@ -2853,6 +2853,8 @@ async def _apply_scope_boost(self, result: SearchResult, scope: MemoryScope) ->
28532853 adjusted_nodes = 0
28542854 clamped_nodes = 0
28552855 max_abs_boost = 0.0
2856+ max_positive_boost = 0.0
2857+ max_demotion = 0.0
28562858 for idx , item in enumerate (result .nodes ):
28572859 raw = (
28582860 local_by_node .get (item .node .id , 0.0 )
@@ -2866,8 +2868,10 @@ async def _apply_scope_boost(self, result: SearchResult, scope: MemoryScope) ->
28662868 max_abs_boost = max (max_abs_boost , abs (boost ))
28672869 if boost > 0.0 :
28682870 boosted_nodes += 1
2871+ max_positive_boost = max (max_positive_boost , boost )
28692872 else :
28702873 demoted_nodes += 1
2874+ max_demotion = max (max_demotion , abs (boost ))
28712875 item .activation = max (0.0 , item .activation * (1.0 + boost ))
28722876 item .resonance = max (0.0 , item .resonance * (1.0 + boost ))
28732877 if boost > 0.0 and idx > 0 and item .resonance > base_resonances [idx - 1 ]:
@@ -2883,6 +2887,8 @@ async def _apply_scope_boost(self, result: SearchResult, scope: MemoryScope) ->
28832887 )
28842888 result .diagnostics ["memory_scope_edge_score_hits" ] = float (len (edge_by_node ))
28852889 result .diagnostics ["memory_scope_max_abs_boost" ] = max_abs_boost
2890+ result .diagnostics ["memory_scope_max_positive_boost" ] = max_positive_boost
2891+ result .diagnostics ["memory_scope_max_demotion" ] = max_demotion
28862892 result .diagnostics ["memory_scope_order_clamps" ] = float (clamped_nodes )
28872893
28882894 async def _apply_memory_signal_penalties (
@@ -3282,20 +3288,54 @@ async def memory_health(
32823288 if edge .id .startswith ("openie_" ) or _prop_bool (edge .properties , "is_openie" )
32833289 )
32843290 boosted_retrieval_count = 0
3291+ demoted_retrieval_count = 0
3292+ adjusted_retrieval_count = 0
32853293 penalized_retrieval_count = 0
32863294 boosted_node_count = 0
3295+ demoted_node_count = 0
3296+ adjusted_node_count = 0
32873297 penalized_node_count = 0
32883298 max_scope_boost = 0.0
3299+ max_scope_demotion = 0.0
3300+ max_scope_adjustment = 0.0
32893301 max_signal_penalty = 0.0
32903302 for event in retrieval_events :
32913303 props = event .properties or {}
32923304 boosted_nodes = _prop_int (props , "memory_scope_boosted_nodes" , 0 )
3305+ demoted_nodes = _prop_int (props , "memory_scope_demoted_nodes" , 0 )
3306+ adjusted_nodes = _prop_int (
3307+ props ,
3308+ "memory_scope_adjusted_nodes" ,
3309+ boosted_nodes + demoted_nodes ,
3310+ )
32933311 penalized_nodes = _prop_int (props , "memory_signal_penalized_nodes" , 0 )
32943312 if boosted_nodes > 0 :
32953313 boosted_retrieval_count += 1
32963314 boosted_node_count += boosted_nodes
32973315 max_scope_boost = max (
32983316 max_scope_boost ,
3317+ _prop_float (
3318+ props ,
3319+ "memory_scope_max_positive_boost" ,
3320+ _prop_float (props , "memory_scope_max_abs_boost" , 0.0 ),
3321+ ),
3322+ )
3323+ if demoted_nodes > 0 :
3324+ demoted_retrieval_count += 1
3325+ demoted_node_count += demoted_nodes
3326+ max_scope_demotion = max (
3327+ max_scope_demotion ,
3328+ _prop_float (
3329+ props ,
3330+ "memory_scope_max_demotion" ,
3331+ _prop_float (props , "memory_scope_max_abs_boost" , 0.0 ),
3332+ ),
3333+ )
3334+ if adjusted_nodes > 0 :
3335+ adjusted_retrieval_count += 1
3336+ adjusted_node_count += adjusted_nodes
3337+ max_scope_adjustment = max (
3338+ max_scope_adjustment ,
32993339 _prop_float (props , "memory_scope_max_abs_boost" , 0.0 ),
33003340 )
33013341 if penalized_nodes > 0 :
@@ -3327,10 +3367,16 @@ async def memory_health(
33273367 openie_artifact_count = openie_nodes + openie_edges ,
33283368 openie_failure_rate = (failures / selected ) if selected else 0.0 ,
33293369 memory_boosted_retrieval_count = boosted_retrieval_count ,
3370+ memory_demoted_retrieval_count = demoted_retrieval_count ,
3371+ memory_adjusted_retrieval_count = adjusted_retrieval_count ,
33303372 memory_penalized_retrieval_count = penalized_retrieval_count ,
33313373 memory_boosted_node_count = boosted_node_count ,
3374+ memory_demoted_node_count = demoted_node_count ,
3375+ memory_adjusted_node_count = adjusted_node_count ,
33323376 memory_penalized_node_count = penalized_node_count ,
33333377 max_memory_scope_boost = max_scope_boost ,
3378+ max_memory_scope_demotion = max_scope_demotion ,
3379+ max_memory_scope_adjustment = max_scope_adjustment ,
33343380 max_memory_signal_penalty = max_signal_penalty ,
33353381 top_reinforced_node_ids = [score .node_id for score in top_node_scores if score .node_id ],
33363382 top_reinforced_edge_ids = [score .edge_id for score in top_edge_scores if score .edge_id ],
0 commit comments