sync: update core/dmu_scoring.py
Browse files- core/dmu_scoring.py +28 -6
core/dmu_scoring.py
CHANGED
|
@@ -25,12 +25,20 @@ import time
|
|
| 25 |
# ------------------------------------------------------------------ #
|
| 26 |
|
| 27 |
MPS_WEIGHTS = {
|
| 28 |
-
"decay": 0.
|
| 29 |
-
"reinf": 0.
|
| 30 |
-
"contextual": 0.
|
| 31 |
-
"recency_bias": 0.
|
| 32 |
-
"novelty": 0.
|
| 33 |
-
"state_align": 0.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
}
|
| 35 |
|
| 36 |
# Gamma for decay shaping.
|
|
@@ -111,6 +119,12 @@ def compute_mps(
|
|
| 111 |
# ---- State alignment ---- #
|
| 112 |
state_align = _state_alignment_score(memory, current_state)
|
| 113 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
# ---- Additive MPS ---- #
|
| 115 |
mps = (
|
| 116 |
MPS_WEIGHTS["decay"] * decay
|
|
@@ -119,6 +133,7 @@ def compute_mps(
|
|
| 119 |
+ MPS_WEIGHTS["recency_bias"] * recency_bias
|
| 120 |
+ MPS_WEIGHTS["novelty"] * novelty_gated
|
| 121 |
+ MPS_WEIGHTS["state_align"] * state_align
|
|
|
|
| 122 |
)
|
| 123 |
mps = max(0.0, min(1.0, mps))
|
| 124 |
|
|
@@ -130,6 +145,7 @@ def compute_mps(
|
|
| 130 |
"recency_bias": recency_bias,
|
| 131 |
"novelty": novelty_gated,
|
| 132 |
"state_align": state_align,
|
|
|
|
| 133 |
"final_mps": mps,
|
| 134 |
"mode": current_mode,
|
| 135 |
}
|
|
@@ -275,6 +291,8 @@ class _DMUMemory:
|
|
| 275 |
novelty_score: float = 0.5,
|
| 276 |
tags: list = None,
|
| 277 |
extra_flags: dict = None,
|
|
|
|
|
|
|
| 278 |
):
|
| 279 |
self.content = content
|
| 280 |
self.id = memory_id or str(hash(content))[:8]
|
|
@@ -283,6 +301,8 @@ class _DMUMemory:
|
|
| 283 |
self.novelty_score = novelty_score
|
| 284 |
self.tags = tags or []
|
| 285 |
self.extra_flags = extra_flags or {}
|
|
|
|
|
|
|
| 286 |
self.score = 0.0
|
| 287 |
self.score_components = {}
|
| 288 |
|
|
@@ -314,6 +334,8 @@ def _chromadb_results_to_memories(chromadb_results):
|
|
| 314 |
reinforcement_score=meta.get("reinforcement_score", 0.5),
|
| 315 |
novelty_score=meta.get("novelty_score", 0.5),
|
| 316 |
tags=meta.get("tags", []),
|
|
|
|
|
|
|
| 317 |
)
|
| 318 |
)
|
| 319 |
return memories
|
|
|
|
| 25 |
# ------------------------------------------------------------------ #
|
| 26 |
|
| 27 |
MPS_WEIGHTS = {
|
| 28 |
+
"decay": 0.2125,
|
| 29 |
+
"reinf": 0.17,
|
| 30 |
+
"contextual": 0.17,
|
| 31 |
+
"recency_bias": 0.1275,
|
| 32 |
+
"novelty": 0.085,
|
| 33 |
+
"state_align": 0.085,
|
| 34 |
+
"source_reliability": 0.15,
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
PROVENANCE_SCORES = {
|
| 38 |
+
"user_explicit": 1.0,
|
| 39 |
+
"bot_inference": 0.6,
|
| 40 |
+
"conflicting_block": 0.2,
|
| 41 |
+
"corrupted_block": 0.1,
|
| 42 |
}
|
| 43 |
|
| 44 |
# Gamma for decay shaping.
|
|
|
|
| 119 |
# ---- State alignment ---- #
|
| 120 |
state_align = _state_alignment_score(memory, current_state)
|
| 121 |
|
| 122 |
+
# ---- Source reliability ---- #
|
| 123 |
+
provenance = getattr(memory, "provenance", "user_explicit")
|
| 124 |
+
source_reliability = getattr(memory, "source_reliability", 1.0)
|
| 125 |
+
prov_score = PROVENANCE_SCORES.get(provenance, 0.5)
|
| 126 |
+
reliability_term = prov_score * source_reliability
|
| 127 |
+
|
| 128 |
# ---- Additive MPS ---- #
|
| 129 |
mps = (
|
| 130 |
MPS_WEIGHTS["decay"] * decay
|
|
|
|
| 133 |
+ MPS_WEIGHTS["recency_bias"] * recency_bias
|
| 134 |
+ MPS_WEIGHTS["novelty"] * novelty_gated
|
| 135 |
+ MPS_WEIGHTS["state_align"] * state_align
|
| 136 |
+
+ MPS_WEIGHTS["source_reliability"] * reliability_term
|
| 137 |
)
|
| 138 |
mps = max(0.0, min(1.0, mps))
|
| 139 |
|
|
|
|
| 145 |
"recency_bias": recency_bias,
|
| 146 |
"novelty": novelty_gated,
|
| 147 |
"state_align": state_align,
|
| 148 |
+
"source_reliability": reliability_term,
|
| 149 |
"final_mps": mps,
|
| 150 |
"mode": current_mode,
|
| 151 |
}
|
|
|
|
| 291 |
novelty_score: float = 0.5,
|
| 292 |
tags: list = None,
|
| 293 |
extra_flags: dict = None,
|
| 294 |
+
provenance: str = "user_explicit",
|
| 295 |
+
source_reliability: float = 1.0,
|
| 296 |
):
|
| 297 |
self.content = content
|
| 298 |
self.id = memory_id or str(hash(content))[:8]
|
|
|
|
| 301 |
self.novelty_score = novelty_score
|
| 302 |
self.tags = tags or []
|
| 303 |
self.extra_flags = extra_flags or {}
|
| 304 |
+
self.provenance = provenance
|
| 305 |
+
self.source_reliability = source_reliability
|
| 306 |
self.score = 0.0
|
| 307 |
self.score_components = {}
|
| 308 |
|
|
|
|
| 334 |
reinforcement_score=meta.get("reinforcement_score", 0.5),
|
| 335 |
novelty_score=meta.get("novelty_score", 0.5),
|
| 336 |
tags=meta.get("tags", []),
|
| 337 |
+
provenance=meta.get("provenance", "user_explicit"),
|
| 338 |
+
source_reliability=float(meta.get("source_reliability", 1.0)),
|
| 339 |
)
|
| 340 |
)
|
| 341 |
return memories
|