govon-runtime / scripts /deploy-hfspace.sh
umyunsang's picture
sync: scripts/ (verify_e2e_tool_calling.py)
769e684 verified
#!/usr/bin/env bash
set -euo pipefail
# GovOn Runtime์„ HuggingFace Spaces์— ๋ฐฐํฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
# Usage: ./scripts/deploy-hfspace.sh
export SPACE_REPO="${SPACE_REPO:-umyunsang/govon-runtime}"
export HF_TOKEN="${HF_TOKEN:?HF_TOKEN ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค}"
echo "=== GovOn HF Spaces ๋ฐฐํฌ ==="
echo "Space: $SPACE_REPO"
# 1. Space ์ƒ์„ฑ (์ด๋ฏธ ์žˆ์œผ๋ฉด skip)
python3 -c "
import os
from huggingface_hub import create_repo
is_private = os.environ.get('SPACE_PRIVATE', 'false').lower() in ('true', '1', 'yes')
create_repo(os.environ['SPACE_REPO'], repo_type='space', space_sdk='docker', exist_ok=True, token=os.environ['HF_TOKEN'], private=is_private)
print('Space repo ready')
"
# 2. ํ•„์š” ํŒŒ์ผ ์—…๋กœ๋“œ
python3 -c "
import os
from huggingface_hub import HfApi
api = HfApi(token=os.environ['HF_TOKEN'])
space_repo = os.environ['SPACE_REPO']
# Dockerfile
api.upload_file(path_or_fileobj='Dockerfile.hfspace', path_in_repo='Dockerfile',
repo_id=space_repo, repo_type='space')
# requirements.txt
api.upload_file(path_or_fileobj='requirements.txt', path_in_repo='requirements.txt',
repo_id=space_repo, repo_type='space')
# src/ ๋””๋ ‰ํ„ฐ๋ฆฌ
api.upload_folder(folder_path='src', path_in_repo='src',
repo_id=space_repo, repo_type='space',
ignore_patterns=['__pycache__', '*.pyc', '.pytest_cache'])
# agents/ ๋””๋ ‰ํ„ฐ๋ฆฌ (์กด์žฌํ•˜๋ฉด)
if os.path.isdir('agents'):
api.upload_folder(folder_path='agents', path_in_repo='agents',
repo_id=space_repo, repo_type='space')
print('Files uploaded')
"
# 3. Secrets ์„ค์ •
python3 -c "
import os
from huggingface_hub import HfApi
api = HfApi(token=os.environ['HF_TOKEN'])
api.add_space_secret(os.environ['SPACE_REPO'], 'HF_TOKEN', os.environ['HF_TOKEN'])
# ADAPTER_PATHS: HF Hub repo ID ๋ฐฉ์‹ (vLLM์ด ์ž๋™ ๋‹ค์šด๋กœ๋“œ)
adapter_paths = os.environ.get('ADAPTER_PATHS', 'civil=umyunsang/govon-civil-adapter,legal=siwo/govon-legal-adapter')
api.add_space_secret(os.environ['SPACE_REPO'], 'ADAPTER_PATHS', adapter_paths)
print('Secrets configured')
"
# 4. ํ•˜๋“œ์›จ์–ด ์„ค์ • (L4 24GB โ€” base 20GB + adapters ~1GB)
# ๊ถŒํ•œ/์ฟผํ„ฐ ๋ถ€์กฑ ์‹œ ๊ฒฝ๊ณ ๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰
python3 -c "
import os
from huggingface_hub import HfApi
api = HfApi(token=os.environ['HF_TOKEN'])
try:
api.request_space_hardware(os.environ['SPACE_REPO'], 'l4x1')
print('Hardware set to l4x1 (24GB VRAM)')
except Exception as e:
print(f'WARNING: ํ•˜๋“œ์›จ์–ด ์„ค์ • ์‹คํŒจ (์ˆ˜๋™์œผ๋กœ ์„ค์ • ํ•„์š”): {e}')
" || true
echo ""
echo "=== ๋ฐฐํฌ ์™„๋ฃŒ ==="
echo "Space URL: https://huggingface.co/spaces/$SPACE_REPO"
echo "ํ•˜๋“œ์›จ์–ด: L4 24GB (์ž๋™ ์„ค์ •๋จ)"
echo ""
echo "GPU ๊ฒ€์ฆ ์‹คํ–‰:"
echo " GOVON_RUNTIME_URL=https://<space-url> python3 scripts/verify_lora_serving.py"