"""Path detection — HF Spaces /data bucket vs local ./local_data clone. Environment variables (defaults match the REAL published repo): ELYSIUM_MODEL_REPO default: build-small-hackathon/elysium-MiniCPM-V-4.6-F16-GGUF ELYSIUM_GGUF_FILE default: elysium-f16.gguf ELYSIUM_MMPROJ_FILE default: "" (no mmproj file is published yet — vision auto-disables) HF_TOKEN optional read token for private/gated repos ELYSIUM_OFFLINE "1" to force offline mode """ import os from pathlib import Path def _detect() -> Path: p = Path("/data") if p.exists() and os.access(p, os.W_OK): return p local = Path(__file__).resolve().parent.parent / "local_data" local.mkdir(exist_ok=True) return local DATA_PATH = _detect() HYPERGRAPH_DB = DATA_PATH / "hypergraph" / "civilization.db" FOSSILS_DIR = DATA_PATH / "fossils" AUDIO_CACHE = DATA_PATH / "audio_cache" NODE_POSITIONS = DATA_PATH / "node_positions" REMINDERS_DB = DATA_PATH / "reminders.db" CALENDAR_ICS = DATA_PATH / "calendar.ics" OUTBOX = DATA_PATH / "outbox" UPLOADS_DIR = DATA_PATH / "uploads" for d in (HYPERGRAPH_DB.parent, FOSSILS_DIR, AUDIO_CACHE, NODE_POSITIONS, OUTBOX, UPLOADS_DIR): d.mkdir(parents=True, exist_ok=True) # ─── Model configuration (REAL published repo) ────────────────────────────── MODEL_REPO = os.environ.get("ELYSIUM_MODEL_REPO", "build-small-hackathon/elysium-MiniCPM-V-4.6-F16-GGUF") GGUF_FILE = os.environ.get("ELYSIUM_GGUF_FILE", "elysium-f16.gguf") MMPROJ_FILE = os.environ.get("ELYSIUM_MMPROJ_FILE", "") # empty → no vision HF_TOKEN = os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN") or None OFFLINE_MODE = os.environ.get("ELYSIUM_OFFLINE", "0") == "1" # ─── Upload limits ────────────────────────────────────────────────────────── MAX_UPLOAD_FILES = 2 MAX_UPLOAD_BYTES = 12 * 1024 * 1024 # 12 MB per file ALLOWED_MIME_TYPES = { "image/png", "image/jpeg", "image/webp", "image/gif", "application/pdf", }