from __future__ import annotations from pathlib import Path from typing import Any, Dict, List import json from agentui.pipeline.defaults import default_pipeline PIPELINE_FILE = Path("pipeline.json") PRESETS_DIR = Path("presets") VARS_DIR = Path(".agentui") / "vars" def load_pipeline() -> Dict[str, Any]: if PIPELINE_FILE.exists(): try: return json.loads(PIPELINE_FILE.read_text(encoding="utf-8")) except Exception: pass return default_pipeline() def save_pipeline(pipeline: Dict[str, Any]) -> None: PIPELINE_FILE.write_text(json.dumps(pipeline, ensure_ascii=False, indent=2), encoding="utf-8") def list_presets() -> List[str]: PRESETS_DIR.mkdir(parents=True, exist_ok=True) return sorted([p.stem for p in PRESETS_DIR.glob("*.json")]) def load_preset(name: str) -> Dict[str, Any]: PRESETS_DIR.mkdir(parents=True, exist_ok=True) path = PRESETS_DIR / f"{name}.json" if not path.exists(): raise FileNotFoundError(name) return json.loads(path.read_text(encoding="utf-8")) def save_preset(name: str, pipeline: Dict[str, Any]) -> None: PRESETS_DIR.mkdir(parents=True, exist_ok=True) path = PRESETS_DIR / f"{name}.json" path.write_text(json.dumps(pipeline, ensure_ascii=False, indent=2), encoding="utf-8") # ---------------- Variable Store (per-pipeline) ---------------- def _var_store_path(pipeline_id: str) -> Path: pid = pipeline_id or "pipeline_editor" VARS_DIR.mkdir(parents=True, exist_ok=True) # normalize to safe filename safe = "".join(ch if ch.isalnum() or ch in ("-", "_", ".") else "_" for ch in str(pid)) return VARS_DIR / f"{safe}.json" def load_var_store(pipeline_id: str) -> Dict[str, Any]: """ Load variable store dictionary for given pipeline id. Returns {} if not exists or invalid. """ path = _var_store_path(pipeline_id) if not path.exists(): return {} try: data = json.loads(path.read_text(encoding="utf-8")) return data if isinstance(data, dict) else {} except Exception: return {} def save_var_store(pipeline_id: str, data: Dict[str, Any]) -> None: """ Save variable store dictionary for given pipeline id. """ path = _var_store_path(pipeline_id) try: VARS_DIR.mkdir(parents=True, exist_ok=True) except Exception: pass path.write_text(json.dumps(data or {}, ensure_ascii=False, indent=2), encoding="utf-8") def clear_var_store(pipeline_id: str) -> None: """ Delete/reset variable store for given pipeline id. """ path = _var_store_path(pipeline_id) try: if path.exists(): path.unlink() except Exception: # ignore failures pass