import os import sys from huggingface_hub import HfApi, create_repo, upload_folder from config import BASE_DIR def deploy_to_hf_spaces(space_name: str = "Demo", hf_token: str = None): """Deploy local folder F:\\hermas_agent to a Public Hugging Face Space.""" token = hf_token or os.getenv("HF_TOKEN") if not token: print("[!] Error: HF_TOKEN environment variable or parameter is missing.") return False api = HfApi(token=token) try: user_info = api.whoami(token=token) username = user_info['name'] print(f"[+] Logged in as Hugging Face User: '{username}'") except Exception as e: print(f"[!] Error validating Hugging Face Token: {e}") return False repo_id = f"{username}/{space_name}" print(f"[+] Setting up Hugging Face Space repository: '{repo_id}'...") try: create_repo( repo_id=repo_id, repo_type="space", space_sdk="gradio", space_hardware="cpu-basic", private=False, exist_ok=True, token=token ) print(f"[+] Space repository '{repo_id}' created/verified successfully!") except Exception as e: print(f"[!] Note: API Repo Creation response: {e}") try: api.update_repo_visibility(repo_id=repo_id, private=False, repo_type="space") print(f"[+] Set Space visibility to Public: '{repo_id}'") except Exception as e: print(f"[!] Note on visibility: {e}") print(f"[+] Uploading files from '{BASE_DIR}' to Space '{repo_id}'...") try: upload_folder( folder_path=str(BASE_DIR), repo_id=repo_id, repo_type="space", token=token, ignore_patterns=[".git*", "data/*", "__pycache__/*", "*.pyc", ".env"] ) print("[+] SUCCESS! Deployment completed successfully!") print(f"[+] Live Space URL: https://huggingface.co/spaces/{repo_id}") return True except Exception as e: print(f"[!] Upload error: {e}") return False if __name__ == "__main__": token = os.getenv("HF_TOKEN") space_name = sys.argv[1] if len(sys.argv) > 1 else "Demo" deploy_to_hf_spaces(space_name, hf_token=token)