# memory_utils.py import json import pandas as pd from datetime import datetime from pathlib import Path from typing import Optional, List, Dict, Any MEMORY_FILE = Path("memories.json") def load_memories(n: int = 3) -> list[str]: """ Load the last n summarized memories from the JSONL file. Returns a list of summary strings. """ if not MEMORY_FILE.exists(): return [] with open(MEMORY_FILE, "r", encoding="utf-8") as f: lines = [json.loads(l) for l in f if l.strip()] return [m["summary"] for m in lines[-n:]] def save_memory(summary: str): """ Append a new memory summary to the JSONL file. Each line is a JSON object: {"timestamp": "...", "summary": "..."} """ entry = {"timestamp": datetime.now().isoformat(), "summary": summary} with open(MEMORY_FILE, "a", encoding="utf-8") as f: f.write(json.dumps(entry) + "\n") def load_memories_df(n: Optional[int] = None): """ Return recent memories as a pandas DataFrame (newest first). """ with open("memories.json", "r", encoding="utf-8") as f: lines = [json.loads(line) for line in f if line.strip()] df = pd.DataFrame(lines) return df.tail(n).iloc[::-1] if n else df.iloc[::-1]