import logging | |
from huggingface_hub import HfApi | |
from app.config.base import HF_TOKEN | |
logger = logging.getLogger(__name__) | |
ACTIVE_SPACE_STATES = ["APP_STARTING", "RUNNING", "BUILDING", "RUNNING_APP_STARTING"] | |
class SpaceController: | |
def __init__(self): | |
self.token = HF_TOKEN | |
self.api = HfApi(token=self.token) | |
def get_space_status(self, space_id): | |
"""Get the current status of a space""" | |
try: | |
space_info = self.api.space_info(repo_id=space_id) | |
return space_info.runtime.stage | |
except Exception as e: | |
logger.error(f"Error getting space status: {e}") | |
return None | |
def start_space(self, space_id): | |
"""Start a paused space""" | |
try: | |
current_status = self.get_space_status(space_id) | |
if current_status in ACTIVE_SPACE_STATES: | |
logger.info(f"Space {space_id} is already active with status: {current_status}") | |
else: | |
logger.info(f"Starting space {space_id}...") | |
self.api.restart_space(repo_id=space_id) | |
except Exception as e: | |
logger.error(f"Error starting space: {e}") | |
raise | |