Spaces:
Sleeping
Sleeping
| """Mémoire persistante long_term.json.""" | |
| from __future__ import annotations | |
| import json | |
| from datetime import datetime, timezone | |
| from pathlib import Path | |
| from typing import Any | |
| DATA_DIR = Path(__file__).resolve().parent / "data" | |
| MEMORY_FILE = DATA_DIR / "long_term.json" | |
| def _default_memory() -> dict[str, Any]: | |
| return { | |
| "preferences": {}, | |
| "facts": [], | |
| "journal": [], | |
| "updated_at": None, | |
| } | |
| def load_memory() -> dict[str, Any]: | |
| if not MEMORY_FILE.exists(): | |
| return _default_memory() | |
| try: | |
| data = json.loads(MEMORY_FILE.read_text(encoding="utf-8")) | |
| base = _default_memory() | |
| base.update(data) | |
| return base | |
| except (json.JSONDecodeError, OSError): | |
| return _default_memory() | |
| def save_memory(data: dict[str, Any]) -> None: | |
| DATA_DIR.mkdir(parents=True, exist_ok=True) | |
| data["updated_at"] = datetime.now(timezone.utc).isoformat() | |
| MEMORY_FILE.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8") | |
| def set_preference(key: str, value: Any) -> None: | |
| mem = load_memory() | |
| mem.setdefault("preferences", {})[key] = value | |
| save_memory(mem) | |
| def get_preference(key: str, default: Any = None) -> Any: | |
| return load_memory().get("preferences", {}).get(key, default) | |
| def add_fact(text: str) -> None: | |
| mem = load_memory() | |
| mem.setdefault("facts", []).append({ | |
| "text": text, | |
| "at": datetime.now(timezone.utc).isoformat(), | |
| }) | |
| if len(mem["facts"]) > 200: | |
| mem["facts"] = mem["facts"][-200:] | |
| save_memory(mem) | |
| def append_journal(entry: str) -> None: | |
| mem = load_memory() | |
| mem.setdefault("journal", []).append({ | |
| "text": entry, | |
| "at": datetime.now(timezone.utc).isoformat(), | |
| }) | |
| if len(mem["journal"]) > 500: | |
| mem["journal"] = mem["journal"][-500:] | |
| save_memory(mem) | |