""" PersonalityMatrix — Vitalis FSI Five core traits. Each evolves from accumulated experience. The system's behavior becomes measurably distinct over time. Not simulated. Emergent. """ import numpy as np import os import json import time TRAITS = { "PRECISION": "Bias toward verified, tested, exact solutions", "CAUTION": "Bias toward conservative choices after failures", "CREATIVITY": "Bias toward novel solutions over retrieved patterns", "SPEED": "Bias toward fast execution over thorough validation", "AUTONOMY": "Bias toward self-generated logic over templates", } INITIAL_VALUES = { "PRECISION": 0.5, "CAUTION": 0.5, "CREATIVITY": 0.5, "SPEED": 0.5, "AUTONOMY": 0.5, } class PersonalityMatrix: DRIFT_RATE = 0.03 MIN_VAL = 0.1 MAX_VAL = 0.9 def __init__(self): self.path = os.path.expanduser("~/.vitalis_workspace/personality.json") self.traits = self._load() def _load(self) -> dict: if os.path.exists(self.path): with open(self.path) as f: return json.load(f) return INITIAL_VALUES.copy() def _save(self): os.makedirs(os.path.dirname(self.path), exist_ok=True) with open(self.path, 'w') as f: json.dump(self.traits, f, indent=2) def update(self, event: str, success: bool): """ Events shape personality over time. success=True strengthens aligned traits. success=False shifts toward compensating traits. """ if event == "scaffold" and success: self._shift("PRECISION", +1) self._shift("SPEED", +1) elif event == "write" and success: self._shift("AUTONOMY", +1) self._shift("CREATIVITY", +1) elif event == "write" and not success: self._shift("CAUTION", +1) self._shift("SPEED", -1) elif event == "recover" and success: self._shift("CAUTION", -1) self._shift("PRECISION", +1) self._save() def _shift(self, trait: str, direction: int): if trait not in self.traits: return delta = self.DRIFT_RATE * direction self.traits[trait] = float(np.clip( self.traits[trait] + delta, self.MIN_VAL, self.MAX_VAL )) def dominant_trait(self) -> str: return max(self.traits, key=self.traits.get) def profile(self) -> dict: dominant = self.dominant_trait() return { "traits": {k: round(v, 3) for k, v in self.traits.items()}, "dominant": dominant, "description": TRAITS[dominant], "character": self._character_string() } def _character_string(self) -> str: p = self.traits if p["AUTONOMY"] > 0.7: return "Highly autonomous. Generates novel solutions independently." elif p["CAUTION"] > 0.7: return "Cautious. Validates thoroughly before committing." elif p["CREATIVITY"] > 0.7: return "Creative. Explores unconventional approaches." elif p["PRECISION"] > 0.7: return "Precise. Exact solutions. Minimal deviation." elif p["SPEED"] > 0.7: return "Fast. Prioritizes execution over exhaustive validation." else: return "Balanced. Adapting."