agentic-system / update_space_cli.py
Cascade Bot
Added Groq streaming support and optimizations - clean version
1d75522
"""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 "[email protected]"', 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()