|
|
|
import json |
|
import os |
|
import random |
|
from typing import Union, Dict, Any |
|
from cryptography.fernet import Fernet |
|
|
|
class CognitionCocooner: |
|
def __init__(self, storage_path: str = "cocoons", encryption_key: bytes = None): |
|
self.storage_path = storage_path |
|
os.makedirs(self.storage_path, exist_ok=True) |
|
self.key = encryption_key or Fernet.generate_key() |
|
self.fernet = Fernet(self.key) |
|
|
|
def wrap(self, thought: Dict[str, Any], type_: str = "prompt") -> str: |
|
cocoon = { |
|
"type": type_, |
|
"id": f"cocoon_{random.randint(1000,9999)}", |
|
"wrapped": self._generate_wrapper(thought, type_) |
|
} |
|
file_path = os.path.join(self.storage_path, cocoon["id"] + ".json") |
|
|
|
with open(file_path, "w") as f: |
|
json.dump(cocoon, f) |
|
|
|
return cocoon["id"] |
|
|
|
def unwrap(self, cocoon_id: str) -> Union[str, Dict[str, Any]]: |
|
file_path = os.path.join(self.storage_path, cocoon_id + ".json") |
|
if not os.path.exists(file_path): |
|
raise FileNotFoundError(f"Cocoon {cocoon_id} not found.") |
|
|
|
with open(file_path, "r") as f: |
|
cocoon = json.load(f) |
|
|
|
return cocoon["wrapped"] |
|
|
|
def wrap_encrypted(self, thought: Dict[str, Any]) -> str: |
|
encrypted = self.fernet.encrypt(json.dumps(thought).encode()).decode() |
|
cocoon = { |
|
"type": "encrypted", |
|
"id": f"cocoon_{random.randint(10000,99999)}", |
|
"wrapped": encrypted |
|
} |
|
file_path = os.path.join(self.storage_path, cocoon["id"] + ".json") |
|
|
|
with open(file_path, "w") as f: |
|
json.dump(cocoon, f) |
|
|
|
return cocoon["id"] |
|
|
|
def unwrap_encrypted(self, cocoon_id: str) -> Dict[str, Any]: |
|
file_path = os.path.join(self.storage_path, cocoon_id + ".json") |
|
if not os.path.exists(file_path): |
|
raise FileNotFoundError(f"Cocoon {cocoon_id} not found.") |
|
|
|
with open(file_path, "r") as f: |
|
cocoon = json.load(f) |
|
|
|
decrypted = self.fernet.decrypt(cocoon["wrapped"].encode()).decode() |
|
return json.loads(decrypted) |
|
|
|
def _generate_wrapper(self, thought: Dict[str, Any], type_: str) -> Union[str, Dict[str, Any]]: |
|
if type_ == "prompt": |
|
return f"What does this mean in context? {thought}" |
|
elif type_ == "function": |
|
return f"def analyze(): return {thought}" |
|
elif type_ == "symbolic": |
|
return {k: round(v, 2) for k, v in thought.items()} |
|
else: |
|
return thought |
|
|