#!/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:// python3 scripts/verify_lora_serving.py"