Spaces:
Running
Running
Download scripts/deploy_space.py from edbeeching/agent-memory: direct link, hf CLI and curl.
- Browser
- Download file 3.49 kB
-
https://huggingface.co/spaces/edbeeching/agent-memory/resolve/main/scripts/deploy_space.py
- Command line
-
hf download hf://spaces/edbeeching/agent-memory/scripts/deploy_space.py
-
curl -L -o deploy_space.py https://huggingface.co/spaces/edbeeching/agent-memory/resolve/main/scripts/deploy_space.py
3.49 kB
| """Publish only the reviewed public client files and pin the release to its commit.""" | |
| import argparse | |
| import json | |
| from pathlib import Path | |
| from huggingface_hub import CommitOperationAdd, HfApi | |
| def deploy(space): | |
| root = Path(__file__).resolve().parents[1] | |
| names = ["README.md", "index.html", "style.css", "bootstrap.md", "requirements.txt", ".gitignore", | |
| "docs/agent-memory-design.md", "scripts/deploy_space.py", "tests/test_memory.py", "tests/live_smoke.py"] | |
| names += [p.relative_to(root).as_posix() for p in (root / "memory-use").rglob("*") | |
| if p.is_file() and "__pycache__" not in p.parts and p.suffix != ".pyc"] | |
| api = HfApi() | |
| try: | |
| info = api.repo_info(space, repo_type="space") | |
| except Exception as exc: | |
| if getattr(getattr(exc, "response", None), "status_code", None) != 404: | |
| raise | |
| api.create_repo(space, repo_type="space", space_sdk="static", private=False) | |
| info = api.repo_info(space, repo_type="space") | |
| if info.private or info.sdk != "static": | |
| raise RuntimeError("Existing Space must already be public and static; no settings were changed.") | |
| existing = set(api.list_repo_files(space, repo_type="space")) | |
| unknown = existing - set(names) - {".gitattributes", "release.json"} | |
| if unknown: | |
| raise RuntimeError("Existing Space contains unrelated files; inspect before publishing.") | |
| if "release.json" in existing: | |
| from huggingface_hub import hf_hub_download | |
| release = json.loads(Path(hf_hub_download(space, "release.json", repo_type="space", revision=info.sha)).read_text()) | |
| if release.get("space") != space or release.get("version") is None: | |
| raise RuntimeError("Existing release descriptor does not identify this client.") | |
| operations = [] | |
| for name in names: | |
| path = root / name | |
| if path.is_symlink(): | |
| raise RuntimeError("Public release cannot contain symlinks.") | |
| operations.append(CommitOperationAdd(path_in_repo=name, path_or_fileobj=path)) | |
| source = api.create_commit(space, repo_type="space", operations=operations, | |
| parent_commit=info.sha, commit_message="Release portable agent memory client 0.1.0") | |
| descriptor = {"version": "0.1.0", "space": space, "revision": source.oid} | |
| payload = (json.dumps(descriptor, indent=2) + "\n").encode() | |
| release_commit = api.create_commit(space, repo_type="space", parent_commit=source.oid, | |
| operations=[CommitOperationAdd(path_in_repo="release.json", path_or_fileobj=payload)], | |
| commit_message="Pin bootstrap client to the published source revision") | |
| (root / "release.json").write_bytes(payload) | |
| return {"space": f"https://huggingface.co/spaces/{space}", "client_revision": source.oid, | |
| "release_commit": release_commit.oid, "files": len(names)} | |
| if __name__ == "__main__": | |
| p = argparse.ArgumentParser(description=__doc__) | |
| p.add_argument("--space", required=True) | |
| args = p.parse_args() | |
| try: | |
| print(json.dumps(deploy(args.space), indent=2)) | |
| except Exception as exc: | |
| # SDK errors may contain signed URLs. Keep deployment diagnostics credential-free. | |
| if isinstance(exc, RuntimeError): | |
| print(str(exc)) | |
| else: | |
| print(f"Deployment failed ({type(exc).__name__}); check HF authentication and permissions.") | |
| raise SystemExit(1) | |