ai-time-machine / scripts /configure_hf_space.py
manikandanj's picture
Set public Gradio root path
065b11f verified
Raw
History Blame Contribute Delete
3.13 kB
from __future__ import annotations
import argparse
import os
from pathlib import Path
from huggingface_hub import HfApi
ROOT = Path(__file__).resolve().parents[1]
VARIABLE_DEFAULTS = {
"GRADIO_ROOT_PATH": "https://build-small-hackathon-ai-time-machine.hf.space",
"TIME_MACHINE_ADAPTER_PROFILE": "modal",
"TIME_MACHINE_MODAL_TTS_MODEL_FAMILY": "chatterbox_turbo",
"TIME_MACHINE_MODAL_TTS_LATENCY_PROFILE": "turbo",
}
VARIABLE_NAMES = [
"GRADIO_ROOT_PATH",
"TIME_MACHINE_ADAPTER_PROFILE",
"TIME_MACHINE_MODAL_STT_URL",
"TIME_MACHINE_MODAL_TTS_URL",
"TIME_MACHINE_MODAL_TTS_MODEL_FAMILY",
"TIME_MACHINE_MODAL_TTS_LATENCY_PROFILE",
"TIME_MACHINE_MODAL_STT_TIMEOUT",
"TIME_MACHINE_MODAL_TTS_TIMEOUT",
"TIME_MACHINE_MODAL_STT_LANGUAGE",
"TIME_MACHINE_MODAL_TTS_LANGUAGE",
"TIME_MACHINE_LLM_BASE_URL",
"TIME_MACHINE_LLM_MODEL",
"TIME_MACHINE_IMAGE_BASE_URL",
"TIME_MACHINE_IMAGE_MODEL",
"TIME_MACHINE_IMAGE_STEPS",
]
SECRET_NAMES = [
"TIME_MACHINE_LLM_API_KEY",
"TOGETHER_API_KEY",
"TIME_MACHINE_IMAGE_API_KEY",
"TIME_MACHINE_MODAL_BEARER_TOKEN",
]
def main() -> None:
parser = argparse.ArgumentParser(description="Configure Hugging Face Space runtime variables.")
parser.add_argument("--repo-id", default="build-small-hackathon/ai-time-machine")
parser.add_argument("--dry-run", action="store_true")
args = parser.parse_args()
load_local_env(ROOT / ".env")
load_local_env(ROOT / "data" / "local.env")
api = HfApi()
changed: list[str] = []
missing: list[str] = []
for name in VARIABLE_NAMES:
value = env_value(name) or VARIABLE_DEFAULTS.get(name)
if not value:
if name in {"TIME_MACHINE_MODAL_STT_URL", "TIME_MACHINE_MODAL_TTS_URL"}:
missing.append(name)
continue
changed.append(f"variable:{name}")
if not args.dry_run:
api.add_space_variable(args.repo_id, name, value)
for name in SECRET_NAMES:
value = env_value(name)
if not value:
continue
changed.append(f"secret:{name}")
if not args.dry_run:
api.add_space_secret(args.repo_id, name, value)
print("Configured values:")
for item in changed:
print(f"- {item}")
if missing:
print("Missing required runtime values:")
for name in missing:
print(f"- {name}")
raise SystemExit(2)
def load_local_env(path: Path) -> None:
if not path.exists():
return
for raw_line in path.read_text(encoding="utf-8").splitlines():
line = raw_line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, value = line.split("=", 1)
key = key.strip()
value = value.strip().strip('"').strip("'")
if key and key not in os.environ:
os.environ[key] = value
def env_value(name: str) -> str | None:
value = os.getenv(name)
if value is None:
return None
value = value.strip()
return value or None
if __name__ == "__main__":
main()