| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| from dataclasses import dataclass |
| from datetime import datetime |
| from enum import Enum |
| from typing import Literal, 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" |
| APP_STARTING = "APP_STARTING" |
| RUNNING_APP_STARTING = "RUNNING_APP_STARTING" |
|
|
|
|
| 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-internal/moon-landing/blob/main/server/repo_types/SpaceHardwareFlavor.ts (private url). |
| """ |
|
|
| |
| CPU_BASIC = "cpu-basic" |
| CPU_UPGRADE = "cpu-upgrade" |
| CPU_PERFORMANCE = "cpu-performance" |
| CPU_XL = "cpu-xl" |
| SPRX8 = "sprx8" |
|
|
| |
| ZERO_A10G = "zero-a10g" |
|
|
| |
| T4_SMALL = "t4-small" |
| T4_MEDIUM = "t4-medium" |
| L4X1 = "l4x1" |
| L4X4 = "l4x4" |
| L40SX1 = "l40sx1" |
| L40SX4 = "l40sx4" |
| L40SX8 = "l40sx8" |
| A10G_SMALL = "a10g-small" |
| A10G_LARGE = "a10g-large" |
| A10G_LARGEX2 = "a10g-largex2" |
| A10G_LARGEX4 = "a10g-largex4" |
| A100_LARGE = "a100-large" |
| A100X4 = "a100x4" |
| A100X8 = "a100x8" |
| H200 = "h200" |
| H200X2 = "h200x2" |
| H200X4 = "h200x4" |
| H200X8 = "h200x8" |
|
|
| |
| INF2X6 = "inf2x6" |
|
|
|
|
| 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 SpaceHotReloading: |
| status: Literal["created", "canceled"] |
| replica_statuses: list[tuple[str, str]] |
| raw: dict |
|
|
| def __init__(self, data: dict) -> None: |
| self.status = data["status"] |
| self.replica_statuses = data["replicaStatuses"] |
| self.raw = data |
|
|
|
|
| @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 from `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] |
| hot_reloading: Optional[SpaceHotReloading] |
| 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.hot_reloading = SpaceHotReloading(raw_hr) if (raw_hr := data.get("hotReloading")) is not None else None |
| 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` or None): |
| datetime of the last update of the variable (if the variable has been updated at least once). |
| """ |
|
|
| key: str |
| value: str |
| description: Optional[str] |
| updated_at: Optional[datetime] |
|
|
| def __init__(self, key: str, values: dict) -> None: |
| self.key = key |
| self.value = values["value"] |
| self.description = values.get("description") |
| updated_at = values.get("updatedAt") |
| self.updated_at = parse_datetime(updated_at) if updated_at is not None else None |
|
|