import numpy as np from geometry_audit import GeometryAuditLog from rrf_safe_similarity import stabilize_vector class SavantWrapper: def __init__( self, embedder, r_min: float = 1e-4, r_max: float = 1e4, enable_audit: bool = True, ): """ embedder: callable(text) -> np.ndarray """ self.embedder = embedder self.r_min = r_min self.r_max = r_max self.audit_log = GeometryAuditLog() if enable_audit else None print("✅ SavantWrapper Initialized (Logarithmic Regularization Active).") def encode(self, text: str) -> np.ndarray: vec = self.embedder(text).astype(np.float64) stabilized_vec, audit_event = stabilize_vector( vec, r_min=self.r_min, r_max=self.r_max, ) if audit_event and self.audit_log is not None: self.audit_log.record(audit_event) return stabilized_vec def batch_encode(self, texts): return np.vstack([self.encode(t) for t in texts]) def get_audit_log(self): if self.audit_log is None: return [] return self.audit_log.events