|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from dataclasses import dataclass |
|
from datetime import datetime |
|
from enum import Enum |
|
from typing import Dict, Optional |
|
|
|
from huggingface_hub.utils import parse_datetime |
|
|
|
|
|
class SpaceStage(str, Enum): |
|
""" |
|
Enumeration of possible stage of a Space on the Hub. |
|
|
|
Value can be compared to a string: |
|
```py |
|
assert SpaceStage.BUILDING == "BUILDING" |
|
``` |
|
|
|
Taken from https://github.com/huggingface/moon-landing/blob/main/server/repo_types/SpaceInfo.ts#L61 (private url). |
|
""" |
|
|
|
|
|
NO_APP_FILE = "NO_APP_FILE" |
|
CONFIG_ERROR = "CONFIG_ERROR" |
|
BUILDING = "BUILDING" |
|
BUILD_ERROR = "BUILD_ERROR" |
|
RUNNING = "RUNNING" |
|
RUNNING_BUILDING = "RUNNING_BUILDING" |
|
RUNTIME_ERROR = "RUNTIME_ERROR" |
|
DELETING = "DELETING" |
|
STOPPED = "STOPPED" |
|
PAUSED = "PAUSED" |
|
|
|
|
|
class SpaceHardware(str, Enum): |
|
""" |
|
Enumeration of hardwares available to run your Space on the Hub. |
|
|
|
Value can be compared to a string: |
|
```py |
|
assert SpaceHardware.CPU_BASIC == "cpu-basic" |
|
``` |
|
|
|
Taken from https://github.com/huggingface/moon-landing/blob/main/server/repo_types/SpaceInfo.ts#L73 (private url). |
|
""" |
|
|
|
CPU_BASIC = "cpu-basic" |
|
CPU_UPGRADE = "cpu-upgrade" |
|
T4_SMALL = "t4-small" |
|
T4_MEDIUM = "t4-medium" |
|
ZERO_A10G = "zero-a10g" |
|
A10G_SMALL = "a10g-small" |
|
A10G_LARGE = "a10g-large" |
|
A10G_LARGEX2 = "a10g-largex2" |
|
A10G_LARGEX4 = "a10g-largex4" |
|
A100_LARGE = "a100-large" |
|
|
|
|
|
class SpaceStorage(str, Enum): |
|
""" |
|
Enumeration of persistent storage available for your Space on the Hub. |
|
|
|
Value can be compared to a string: |
|
```py |
|
assert SpaceStorage.SMALL == "small" |
|
``` |
|
|
|
Taken from https://github.com/huggingface/moon-landing/blob/main/server/repo_types/SpaceHardwareFlavor.ts#L24 (private url). |
|
""" |
|
|
|
SMALL = "small" |
|
MEDIUM = "medium" |
|
LARGE = "large" |
|
|
|
|
|
@dataclass |
|
class SpaceRuntime: |
|
""" |
|
Contains information about the current runtime of a Space. |
|
|
|
Args: |
|
stage (`str`): |
|
Current stage of the space. Example: RUNNING. |
|
hardware (`str` or `None`): |
|
Current hardware of the space. Example: "cpu-basic". Can be `None` if Space |
|
is `BUILDING` for the first time. |
|
requested_hardware (`str` or `None`): |
|
Requested hardware. Can be different than `hardware` especially if the request |
|
has just been made. Example: "t4-medium". Can be `None` if no hardware has |
|
been requested yet. |
|
sleep_time (`int` or `None`): |
|
Number of seconds the Space will be kept alive after the last request. By default (if value is `None`), the |
|
Space will never go to sleep if it's running on an upgraded hardware, while it will go to sleep after 48 |
|
hours on a free 'cpu-basic' hardware. For more details, see https://huggingface.co/docs/hub/spaces-gpus#sleep-time. |
|
raw (`dict`): |
|
Raw response from the server. Contains more information about the Space |
|
runtime like number of replicas, number of cpu, memory size,... |
|
""" |
|
|
|
stage: SpaceStage |
|
hardware: Optional[SpaceHardware] |
|
requested_hardware: Optional[SpaceHardware] |
|
sleep_time: Optional[int] |
|
storage: Optional[SpaceStorage] |
|
raw: Dict |
|
|
|
def __init__(self, data: Dict) -> None: |
|
self.stage = data["stage"] |
|
self.hardware = data.get("hardware", {}).get("current") |
|
self.requested_hardware = data.get("hardware", {}).get("requested") |
|
self.sleep_time = data.get("gcTimeout") |
|
self.storage = data.get("storage") |
|
self.raw = data |
|
|
|
|
|
@dataclass |
|
class SpaceVariable: |
|
""" |
|
Contains information about the current variables of a Space. |
|
|
|
Args: |
|
key (`str`): |
|
Variable key. Example: `"MODEL_REPO_ID"` |
|
value (`str`): |
|
Variable value. Example: `"the_model_repo_id"`. |
|
description (`str` or None): |
|
Description of the variable. Example: `"Model Repo ID of the implemented model"`. |
|
updatedAt (`datetime`): |
|
datetime of the last update of the variable. |
|
""" |
|
|
|
key: str |
|
value: str |
|
description: Optional[str] |
|
updated_at: datetime |
|
|
|
def __init__(self, key: str, values: Dict) -> None: |
|
self.key = key |
|
self.value = values["value"] |
|
self.description = values.get("description") |
|
self.updated_at = parse_datetime(values["updatedAt"]) |
|
|