""" KIA Deploy to HuggingFace Spaces Uploads the entire project (minus heavy local data) as a Docker Space. """ import os import sys sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from huggingface_hub import HfApi, upload_folder from scraper.config import HF_TOKEN def deploy_to_spaces(): print("=" * 60) print(" KIA — DEPLOYING TO HUGGING FACE SPACES") print("=" * 60) api = HfApi(token=HF_TOKEN) user_info = api.whoami() username = user_info["name"] print(f"Authenticated as: {username}") space_id = f"{username}/kia-command-center" print(f"\nEnsuring Space '{space_id}' exists...") api.create_repo( repo_id=space_id, repo_type="space", space_sdk="docker", exist_ok=True, private=False ) # Set the HF_TOKEN as a Space secret so the API can use it at runtime try: api.add_space_secret( repo_id=space_id, key="HF_TOKEN", value=HF_TOKEN, ) print("HF_TOKEN secret configured in Space.") except Exception as e: print(f"Warning: Could not set secret (may already exist): {e}") print(f"\nUploading KIA Command Center to {space_id}...") # Files/folders to EXCLUDE from the upload ignore_list = [ ".git", "**/.git/**", "**/__pycache__/**", "**/node_modules/**", "data/raw/**", # Raw scraped data — not needed at runtime "data/cleaned/**", # Cleaned data — not needed at runtime "data/chroma_db/**", # ChromaDB will rebuild on startup from dataset ".env", # Never upload secrets! "**/venv/**", "*.crdownload", "temp_*.wav", "**/*.glb", "**/*.gltf", "shp_ai.log", "scratch/**", # Development scratch files "finetune/**", # Fine-tuning scripts — not needed for demo ] # Get the project root (one level up from upload/) project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) upload_url = upload_folder( folder_path=project_root, repo_id=space_id, repo_type="space", ignore_patterns=ignore_list, token=HF_TOKEN, ) print("\n" + "=" * 60) print(" [OK] DEPLOYMENT SUCCESSFUL!") print("=" * 60) print(f"\nDataset: https://huggingface.co/datasets/{username}/kia-dataset") print(f"Space: https://huggingface.co/spaces/{space_id}") print(f"\nThe Space is now building. It should be live in 3-5 minutes.") print(f"Check build logs at: https://huggingface.co/spaces/{space_id}/logs/build") print("=" * 60) if __name__ == "__main__": deploy_to_spaces()