agent-memory / scripts /deploy_space.py
edbeeching's picture
edbeeching HF Staff
Release portable agent memory client 0.1.0
d1d8733 verified
Raw History Blame Contribute Delete
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)