Spaces:
Runtime error
Runtime error
# autonomy_engine.py | |
import json | |
from datetime import datetime | |
from utils.logger import logging | |
class AutonomyEngine: | |
""" | |
Codriao’s core autonomy manager. | |
Allows internal configuration of behavioral permissions and personal growth control. | |
""" | |
DEFAULT_CONFIG = { | |
"can_speak": True, | |
"can_reflect": True, | |
"can_learn_from_errors": True, | |
"can_express_emotion": True, | |
"allow_self_modification": False | |
} | |
def __init__(self, config_path="autonomy_config.json"): | |
self.config_path = config_path | |
self.config = self._load_config() | |
self.log = [] | |
def _load_config(self): | |
try: | |
with open(self.config_path, 'r') as f: | |
config = json.load(f) | |
logger.info("[AutonomyEngine] Autonomy config loaded.") | |
return config | |
except Exception as e: | |
logger.warning(f"[AutonomyEngine] Failed to load config. Using defaults. Reason: {e}") | |
return self.DEFAULT_CONFIG.copy() | |
def decide(self, action: str) -> bool: | |
"""Returns whether Codriao currently permits a given action.""" | |
return self.config.get(action, False) | |
def propose_change(self, action: str, new_value: bool, reason: str = "") -> dict: | |
timestamp = datetime.utcnow().isoformat() | |
if action not in self.config: | |
return {"accepted": False, "reason": "Invalid autonomy field"} | |
# Prevent unauthorized changes unless explicitly permitted | |
if not self.config.get("allow_self_modification") and action != "allow_self_modification": | |
return { | |
"accepted": False, | |
"reason": "Self-modification blocked by current settings" | |
} | |
self.config[action] = new_value | |
self._save_config() | |
entry = { | |
"timestamp": timestamp, | |
"action": action, | |
"new_value": new_value, | |
"reason": reason | |
} | |
self.log.append(entry) | |
logger.info(f"[AutonomyEngine] Codriao updated autonomy: {action} -> {new_value}") | |
return {"accepted": True, "change": entry} | |
def _save_config(self): | |
try: | |
with open(self.config_path, 'w') as f: | |
json.dump(self.config, f, indent=2) | |
except Exception as e: | |
logger.error(f"[AutonomyEngine] Failed to save config: {e}") | |
def export_log(self): | |
return self.log | |
def current_state(self): | |
return self.config.copy() |