| import numpy as np |
| import os |
| import json |
| from src.hippocampus import Hippocampus |
| from vitalis_ide.math_core.kernel import VitalisKernel |
|
|
| class PatternLibrary: |
| def __init__(self): |
| self.root = os.path.expanduser("~/.vitalis_workspace") |
| self.hdc = VitalisKernel() |
| self.hippocampus = Hippocampus() |
| self.meta_path = os.path.join(self.root, "pattern_meta.json") |
| self._load_meta() |
|
|
| def _load_meta(self): |
| if os.path.exists(self.meta_path): |
| with open(self.meta_path) as f: |
| self.meta = json.load(f) |
| else: |
| self.meta = {} |
|
|
| def _save_meta(self): |
| os.makedirs(self.root, exist_ok=True) |
| with open(self.meta_path, 'w') as f: |
| json.dump(self.meta, f, indent=2) |
|
|
| def store(self, intent: str, code: str, file_path: str = None): |
| |
| vector = self.hdc.vectorize_tokens(intent.split(), positional=False) |
| slot = f"pattern_{len(self.meta)}" |
| self.hippocampus.store(slot, vector) |
| self.meta[slot] = {"intent": intent, "code": code, "file": file_path} |
| self._save_meta() |
| print(f"[PATTERN] Learned: {intent} → slot {slot}") |
| return slot |
|
|
| def retrieve(self, query: str, top_k: int = 3) -> list: |
| query_vec = self.hdc.vectorize_tokens(query.split(), positional=False) |
| results = [] |
| for slot, meta in self.meta.items(): |
| vec = self.hippocampus.recall(slot) |
| if vec is not None: |
| sim = self.hdc.similarity(query_vec, vec) |
| results.append((sim, meta)) |
| results.sort(key=lambda x: x[0], reverse=True) |
| return results[:top_k] |
|
|