"""Update Hugging Face Space using git commands.""" import os import subprocess import logging from pathlib import Path import shutil from huggingface_hub import HfApi from dotenv import load_dotenv # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def run_command(command, cwd=None): """Run a shell command and log output.""" try: result = subprocess.run( command, shell=True, check=True, text=True, capture_output=True, cwd=cwd ) logger.info(f"Command output: {result.stdout}") return True except subprocess.CalledProcessError as e: logger.error(f"Command failed: {e.stderr}") return False def update_space(): """Update the Hugging Face Space using git commands.""" try: # Load environment variables load_dotenv() token = os.getenv("HUGGINGFACE_TOKEN") if not token: raise ValueError("HUGGINGFACE_TOKEN not found in environment variables") # Space configuration SPACE_NAME = "nananie143/agentic-system" REPO_URL = f"https://huggingface.co/spaces/{SPACE_NAME}" logger.info("Starting Space update process...") # 1. Initialize Hugging Face API api = HfApi(token=token) # 2. Create the Space if it doesn't exist logger.info("Creating/Checking Space...") try: api.create_repo( repo_id=SPACE_NAME, repo_type="space", space_sdk="gradio", private=False, exist_ok=True ) except Exception as e: logger.warning(f"Note about Space creation: {e}") # 3. Set up the repository directory repo_dir = Path("space_repo") if repo_dir.exists(): logger.info("Cleaning up existing repository...") shutil.rmtree(repo_dir) # 4. Clone the Space repository with token logger.info("Cloning Space repository...") clone_url = f"https://user:{token}@huggingface.co/spaces/{SPACE_NAME}" run_command(f"git clone {clone_url} {repo_dir}") # 5. Copy files to the repository logger.info("Copying files to repository...") files_to_copy = [ "app.py", "agentic_system.py", "requirements.txt", "space.yml", "download_models_space.py", "app_space.sh", "reasoning", "orchestrator.py", "team_management.py", "meta_learning.py", "config.py" ] for file in files_to_copy: src = Path(file) dst = repo_dir / src.name if src.is_file(): shutil.copy2(src, dst) elif src.is_dir(): if dst.exists(): shutil.rmtree(dst) shutil.copytree(src, dst) # 6. Configure git logger.info("Configuring git...") run_command('git config user.email "cascade@codeium.com"', cwd=repo_dir) run_command('git config user.name "Cascade Bot"', cwd=repo_dir) # 7. Add and commit changes logger.info("Committing changes...") run_command("git add .", cwd=repo_dir) run_command('git commit -m "Update Space with latest changes and model configurations"', cwd=repo_dir) # 8. Push changes logger.info("Pushing changes to Space...") run_command("git push", cwd=repo_dir) # 9. Clean up logger.info("Cleaning up...") shutil.rmtree(repo_dir) logger.info(f"Space updated successfully! Visit: {REPO_URL}") return True except Exception as e: logger.error(f"Error updating Space: {e}") return False if __name__ == "__main__": update_space()