Spaces:
Running
Running
| """ | |
| SessionManager - Reads/writes session metadata (sessions.json) and keeps it durable | |
| by mirroring it to a Hugging Face Hub dataset repo via HFDatasetStorage. | |
| """ | |
| import json | |
| import logging | |
| from pathlib import Path | |
| from typing import Dict, Any | |
| from src.core.hf_storage import HFDatasetStorage | |
| logger = logging.getLogger(__name__) | |
| SESSIONS_FILE = Path("data/sessions.json") | |
| SESSIONS_RAW_DIR = Path("data/sessions_raw") | |
| SESSIONS_VECTOR_DIR = Path("data/sessions_vector_stores") | |
| SESSIONS_FILE_REPO_PATH = "sessions.json" | |
| def load_sessions_from_disk() -> Dict[str, Any]: | |
| """Loads session metadata dictionary from local disk or downloads snapshot from dataset repo.""" | |
| SESSIONS_RAW_DIR.mkdir(parents=True, exist_ok=True) | |
| SESSIONS_VECTOR_DIR.mkdir(parents=True, exist_ok=True) | |
| if not SESSIONS_FILE.exists(): | |
| # Local disk is ephemeral - recover the latest snapshot from the HF dataset repo if present. | |
| HFDatasetStorage.get_instance().download_file(SESSIONS_FILE_REPO_PATH, SESSIONS_FILE) | |
| if SESSIONS_FILE.exists(): | |
| try: | |
| with open(SESSIONS_FILE, "r", encoding="utf-8") as f: | |
| data = json.load(f) | |
| if data and isinstance(data, dict): | |
| return data | |
| except Exception as e: | |
| logger.error("[SessionManager] Failed to read sessions.json: %s", e) | |
| return {} | |
| def save_sessions_to_disk(sessions_data: Dict[str, Any]) -> None: | |
| """Saves session metadata to local disk and mirrors to HF dataset storage.""" | |
| try: | |
| SESSIONS_FILE.parent.mkdir(parents=True, exist_ok=True) | |
| with open(SESSIONS_FILE, "w", encoding="utf-8") as f: | |
| json.dump(sessions_data, f, ensure_ascii=False, indent=2) | |
| HFDatasetStorage.get_instance().upload_file(SESSIONS_FILE, SESSIONS_FILE_REPO_PATH) | |
| except Exception as e: | |
| logger.error("[SessionManager] Failed to write sessions.json: %s", e) | |