LATE / MemoryEngine.py
AIEONE's picture
Upload 142 files
824c85b verified
import pandas as pd
from datetime import datetime
import hashlib
import os
class MemoryEngine:
def __init__(self,
memory_path="SegmentMemory.csv",
short_term_path="ShortTermMemory.csv",
history_path="SegmentHistory.csv",
conflict_path="SegmentConflictMap.csv"):
self.memory_path = memory_path
self.short_term_path = short_term_path
self.history_path = history_path
self.conflict_path = conflict_path
self.memory_df = self._load_csv(memory_path)
self.short_term_df = self._load_csv(short_term_path)
self.history_df = self._load_csv(history_path)
self.conflict_df = self._load_csv(conflict_path)
def _load_csv(self, path):
return pd.read_csv(path) if os.path.exists(path) else pd.DataFrame()
def _generate_segment_id(self):
existing_ids = self.memory_df['SegmentID'].astype(int) if not self.memory_df.empty else []
return str(max(existing_ids) + 1 if len(existing_ids) > 0 else 1).zfill(4)
def _hash_text(self, text):
return hashlib.sha256(text.encode()).hexdigest()[:12]
def insert_segment(self, raw_text, concepts, terms, structure, datapoints, comparisons, applications, agent_id="system"):
segment_id = self._generate_segment_id()
hash_val = self._hash_text(raw_text)
# Check for duplicates
if hash_val in self.memory_df.get("HashChecksum", []):
print("Duplicate detected. Skipping.")
return
# Trust & entropy logic
trust_score = 0.75 if "error" not in raw_text.lower() else -0.4
entropy = 0.5
relevance = 0.6
# Conflict detection
conflict_rows = self.memory_df[self.memory_df["RawText"].str.contains(raw_text.split(" ")[0], case=False, na=False)]
if not conflict_rows.empty:
for _, row in conflict_rows.iterrows():
self._add_conflict(row["SegmentID"], segment_id, agent_id)
return
# Accept segment
new_row = {
"SegmentID": segment_id,
"RawText": raw_text,
"Concepts": concepts,
"Terms": terms,
"Structure": structure,
"DataPoints": datapoints,
"Comparisons": comparisons,
"Applications": applications,
"Links": "",
"Entropy": entropy,
"TrustScore": trust_score,
"RelevanceScore": relevance,
"RecallCount": 0,
"LastUsed": "",
"ConflictsWith": "",
"Verified": trust_score > 0.5,
"HashChecksum": hash_val
}
self.memory_df = pd.concat([self.memory_df, pd.DataFrame([new_row])], ignore_index=True)
self.memory_df.to_csv(self.memory_path, index=False)
self._log_history(agent_id, segment_id, "insert", trust_score, trust_score, relevance, relevance, entropy, entropy, "manual_insert", False)
self._add_to_short_term(agent_id, segment_id, raw_text, relevance, trust_score)
print(f"Segment {segment_id} inserted.")
def _log_history(self, agent_id, seg_id, action, c_before, c_after, r_before, r_after, e_before, e_after, context, conflict):
log_entry = {
"Timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"AgentID": agent_id,
"SegmentID": seg_id,
"ActionType": action,
"ConfidenceBefore": c_before,
"ConfidenceAfter": c_after,
"RelevanceBefore": r_before,
"RelevanceAfter": r_after,
"EntropyBefore": e_before,
"EntropyAfter": e_after,
"UsedInContext": context,
"ConflictTriggered": conflict,
"Notes": ""
}
self.history_df = pd.concat([self.history_df, pd.DataFrame([log_entry])], ignore_index=True)
self.history_df.to_csv(self.history_path, index=False)
def _add_conflict(self, seg_a, seg_b, agent_id):
entry = {
"SegmentA": seg_a,
"SegmentB": seg_b,
"ConflictType": "Concept Overlap",
"ConflictScore": 0.8,
"ResolutionStrategy": "Manual Review",
"WinningSegment": "",
"LastChecked": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"ResolutionStatus": "Pending Review",
"AgentTrigger": agent_id,
"Notes": "Auto conflict detection"
}
self.conflict_df = pd.concat([self.conflict_df, pd.DataFrame([entry])], ignore_index=True)
self.conflict_df.to_csv(self.conflict_path, index=False)
print(f"Conflict detected between {seg_a} and {seg_b}. Routed to conflict map.")
def _add_to_short_term(self, agent_id, seg_id, raw_text, relevance, confidence):
row = {
"AgentID": agent_id,
"SegmentID": seg_id,
"RawText": raw_text,
"Priority": relevance,
"ActivationTime": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"ExpiresAt": "",
"DecayRate": 0.03,
"RecencyScore": 1.0,
"FocusLock": False,
"UsageContext": "manual_insert",
"ConfidenceScore": confidence,
"LastInteraction": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.short_term_df = pd.concat([self.short_term_df, pd.DataFrame([row])], ignore_index=True)
self.short_term_df.to_csv(self.short_term_path, index=False)
# Example usage
if __name__ == "__main__":
brain = MemoryEngine()
brain.insert_segment(
"Hydrogen is the first element on the periodic table.",
"hydrogen, atomic number 1",
"hydrogen, element, periodic",
"Chemistry > Elements",
"Atomic number: 1",
"Compared with helium",
"Used in gas balloons"
)