berna-r8 / code /cells /contradiction_handler.py
muhamedkamil's picture
Upload folder using huggingface_hub
d997548 verified
Raw History Blame Contribute Delete
1.58 kB
"""
Contradiction Handler — when new knowledge contradicts existing.
"""
from dataclasses import dataclass
@dataclass
class ExperienceWeight:
parent_cell_id: str
value: float = 0.0
n_updates: int = 0
created_step: int = 0
last_fp: str = ""
class ContradictionHandler:
def __init__(self, similarity_threshold=0.75, verbose=False):
self.similarity_threshold = similarity_threshold
self.verbose = verbose
self.experiences = {}
self.n_contradictions = 0
def detect(self, new_fp, existing_fps):
try:
from cognitive_log import hamming_similarity
except ImportError:
return None
best = (None, 0.0)
for fp in existing_fps:
sim = hamming_similarity(new_fp, fp)
if sim > best[1]:
best = (fp, sim)
if best[1] >= self.similarity_threshold:
self.n_contradictions += 1
return best[0]
return None
def attach_experience(self, parent_cell, new_fp, step):
cid = parent_cell.cell_id
if cid in self.experiences:
exp = self.experiences[cid]
exp.n_updates += 1
exp.last_fp = new_fp
return exp
exp = ExperienceWeight(parent_cell_id=cid, value=0.0,
n_updates=1, created_step=step, last_fp=new_fp)
self.experiences[cid] = exp
return exp
def stats(self):
return {"n_contradictions": self.n_contradictions,
"n_experiences": len(self.experiences)}