50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
"""General utility."""
|
|
|
|
import platform
|
|
import requests
|
|
import zipfile
|
|
import io
|
|
import os
|
|
|
|
|
|
def download_kb_data(
|
|
version="s2",
|
|
release_tag="v0.2.2",
|
|
download_dir="kb_data",
|
|
platform=platform.system().lower(),
|
|
):
|
|
"""Download and extract the appropriate KB ZIP file for the current OS.
|
|
|
|
Args:
|
|
version (str): Prefix in the asset name (e.g., "s1" or "s2")
|
|
release_tag (str): Tag of the release that has the assets (e.g., "v0.2.2")
|
|
download_dir (str): Where to extract the downloaded files
|
|
platform (str): OS (e.g., "windows", "darwin", "linux")
|
|
"""
|
|
# Detect OS
|
|
if platform not in ["windows", "darwin", "linux"]:
|
|
raise RuntimeError(f"Unsupported OS: {platform}")
|
|
|
|
# Build asset filename, e.g. "s1_windows.zip" or "s1_darwin.zip"
|
|
asset_name = f"{version}_{platform}.zip"
|
|
|
|
download_url = f"https://github.com/simular-ai/Agent-S/releases/download/{release_tag}/{asset_name}"
|
|
|
|
# Make sure our output directory exists
|
|
os.makedirs(download_dir, exist_ok=True)
|
|
|
|
print(f"Downloading {asset_name} from {download_url} ...")
|
|
response = requests.get(download_url)
|
|
if response.status_code != 200:
|
|
raise RuntimeError(
|
|
f"Failed to download {asset_name}. "
|
|
f"HTTP status: {response.status_code} - {response.reason}"
|
|
)
|
|
|
|
# Extract the ZIP in-memory
|
|
zip_data = io.BytesIO(response.content)
|
|
with zipfile.ZipFile(zip_data, "r") as zip_ref:
|
|
zip_ref.extractall(download_dir)
|
|
|
|
print(f"Extracted {asset_name} to ./{download_dir}")
|