From 8eeac9d4e363a1e6022211e872064357021bc93a Mon Sep 17 00:00:00 2001 From: Michael Shin Date: Wed, 13 Nov 2024 15:24:25 -0500 Subject: [PATCH 1/3] Updated cluster commands to use platform client 0.3.1 --- centml/cli/cluster.py | 14 +++++++++----- centml/sdk/api.py | 28 ++++++++++++++-------------- centml/sdk/auth.py | 6 +++--- centml/sdk/config.py | 2 +- setup.py | 2 +- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/centml/cli/cluster.py b/centml/cli/cluster.py index 989f324..ab16659 100644 --- a/centml/cli/cluster.py +++ b/centml/cli/cluster.py @@ -3,7 +3,7 @@ from typing import Dict import click from tabulate import tabulate -from centml.sdk import DeploymentType, DeploymentStatus, HealthStatus, ApiException, HardwareInstanceResponse +from centml.sdk import DeploymentType, DeploymentStatus, ServiceStatus, ApiException, HardwareInstanceResponse from centml.sdk.api import get_centml_client @@ -55,10 +55,14 @@ def _get_ready_status(cclient, deployment): status_styles = { (DeploymentStatus.PAUSED, None): ("paused", "yellow", "black"), (DeploymentStatus.DELETED, None): ("deleted", "white", "black"), - (DeploymentStatus.ACTIVE, HealthStatus.HEALTHY): ("ready", "green", "black"), - (DeploymentStatus.ACTIVE, HealthStatus.PROGRESSING): ("starting", "black", "white"), - (DeploymentStatus.ACTIVE, HealthStatus.DEGRADED): ("starting", "black", "white"), - (DeploymentStatus.ACTIVE, HealthStatus.MISSING): ("not found", "cyan"), + (DeploymentStatus.ACTIVE, ServiceStatus.HEALTHY): ("ready", "green", "black"), + (DeploymentStatus.ACTIVE, ServiceStatus.INITIALIZING): ("starting", "black", "white"), + (DeploymentStatus.ACTIVE, ServiceStatus.MISSING): ("starting", "black", "white"), + (DeploymentStatus.ACTIVE, ServiceStatus.ERROR): ("error", "red", "black"), + (DeploymentStatus.ACTIVE, ServiceStatus.CREATECONTAINERCONFIGERROR): ("createContainerConfigError", "red", "black"), + (DeploymentStatus.ACTIVE, ServiceStatus.CRASHLOOPBACKOFF): ("crashLoopBackOff", "red", "black"), + (DeploymentStatus.ACTIVE, ServiceStatus.IMAGEPULLBACKOFF): ("imagePullBackOff", "red", "black"), + (DeploymentStatus.ACTIVE, ServiceStatus.PROGRESSDEADLINEEXCEEDED): ("progressDeadlineExceeded", "red", "black"), } style = status_styles.get((api_status, service_status), ("unknown", "black", "white")) diff --git a/centml/sdk/api.py b/centml/sdk/api.py index 4a918d9..f83dfd4 100644 --- a/centml/sdk/api.py +++ b/centml/sdk/api.py @@ -3,8 +3,8 @@ import platform_api_python_client from platform_api_python_client import ( DeploymentStatus, - CreateInferenceDeploymentV2Request, - CreateComputeDeploymentV2Request, + CreateInferenceDeploymentRequest, + CreateComputeDeploymentRequest, CreateCServeDeploymentRequest, ) @@ -14,37 +14,37 @@ class CentMLClient: def __init__(self, api): - self._api = api + self._api: platform_api_python_client.EXTERNALApi = api def get(self, depl_type): - results = self._api.get_deployments_deployments_v2_get(type=depl_type).results + results = self._api.get_deployments_deployments_get(type=depl_type).results deployments = sorted(results, reverse=True, key=lambda d: d.created_at) return deployments def get_status(self, id): - return self._api.get_deployment_status_deployments_v2_status_deployment_id_get(id) + return self._api.get_deployment_status_deployments_status_deployment_id_get(id) def get_inference(self, id): - return self._api.get_inference_deployment_deployments_v2_inference_deployment_id_get(id) + return self._api.get_inference_deployment_deployments_inference_deployment_id_get(id) def get_compute(self, id): - return self._api.get_compute_deployment_deployments_v2_compute_deployment_id_get(id) + return self._api.get_compute_deployment_deployments_compute_deployment_id_get(id) def get_cserve(self, id): - return self._api.get_cserve_deployment_deployments_v2_cserve_deployment_id_get(id) + return self._api.get_cserve_deployment_deployments_cserve_deployment_id_get(id) - def create_inference(self, request: CreateInferenceDeploymentV2Request): - return self._api.create_inference_deployment_deployments_v2_inference_post(request) + def create_inference(self, request: CreateInferenceDeploymentRequest): + return self._api.create_inference_deployment_deployments_inference_post(request) - def create_compute(self, request: CreateComputeDeploymentV2Request): + def create_compute(self, request: CreateComputeDeploymentRequest): return self._api.create_compute_deployment_deployments_compute_post(request) def create_cserve(self, request: CreateCServeDeploymentRequest): - return self._api.create_cserve_deployment_deployments_v2_cserve_post(request) + return self._api.create_cserve_deployment_deployments_cserve_post(request) def _update_status(self, id, new_status): status_req = platform_api_python_client.DeploymentStatusRequest(status=new_status) - self._api.update_deployment_status_deployments_v2_status_deployment_id_put(id, status_req) + self._api.update_deployment_status_deployments_status_deployment_id_put(id, status_req) def delete(self, id): self._update_status(id, DeploymentStatus.DELETED) @@ -59,7 +59,7 @@ def get_clusters(self): return self._api.get_clusters_clusters_get() def get_hardware_instances(self, cluster_id): - return self._api.get_hardware_instances_hardware_instances_v2_get(cluster_id).results + return self._api.get_hardware_instances_hardware_instances_get(cluster_id).results @contextmanager diff --git a/centml/sdk/auth.py b/centml/sdk/auth.py index 71069ea..570be26 100644 --- a/centml/sdk/auth.py +++ b/centml/sdk/auth.py @@ -51,12 +51,12 @@ def get_centml_token(): if not cred: sys.exit("CentML credentials not found. Please login...") - exp_time = int(jwt.decode(cred["access_token"], options={"verify_signature": False})["exp"]) + exp_time = int(jwt.decode(cred["idToken"], options={"verify_signature": False})["exp"]) if time.time() >= exp_time - 100: - cred = refresh_centml_token(cred["refresh_token"]) + cred = refresh_centml_token(cred["refreshToken"]) - return cred["access_token"] + return cred["idToken"] def remove_centml_cred(): diff --git a/centml/sdk/config.py b/centml/sdk/config.py index f26bb29..c643946 100644 --- a/centml/sdk/config.py +++ b/centml/sdk/config.py @@ -5,7 +5,7 @@ class Config(BaseSettings): CENTML_WEB_URL: str = "https://app.centml.com/" CENTML_CONFIG_PATH: str = os.path.expanduser("~/.centml") - CENTML_CRED_FILE: str = "credential" + CENTML_CRED_FILE: str = "credentials.json" CENTML_CRED_FILE_PATH: str = CENTML_CONFIG_PATH + "/" + CENTML_CRED_FILE CENTML_PLATFORM_API_URL: str = "https://api.centml.com" diff --git a/setup.py b/setup.py index 676c7f0..c70eb51 100644 --- a/setup.py +++ b/setup.py @@ -25,6 +25,6 @@ "prometheus-client>=0.20.0", "scipy>=1.6.0", "scikit-learn>=1.5.1", - "platform-api-python-client==0.2.0", + "platform-api-python-client==0.3.1", ], ) From 5b61ad20f8f3955e1a2b3ef88200d0ed582c72a0 Mon Sep 17 00:00:00 2001 From: Michael Shin Date: Wed, 13 Nov 2024 15:28:49 -0500 Subject: [PATCH 2/3] fix format --- centml/cli/cluster.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/centml/cli/cluster.py b/centml/cli/cluster.py index ab16659..f6f88f8 100644 --- a/centml/cli/cluster.py +++ b/centml/cli/cluster.py @@ -59,7 +59,11 @@ def _get_ready_status(cclient, deployment): (DeploymentStatus.ACTIVE, ServiceStatus.INITIALIZING): ("starting", "black", "white"), (DeploymentStatus.ACTIVE, ServiceStatus.MISSING): ("starting", "black", "white"), (DeploymentStatus.ACTIVE, ServiceStatus.ERROR): ("error", "red", "black"), - (DeploymentStatus.ACTIVE, ServiceStatus.CREATECONTAINERCONFIGERROR): ("createContainerConfigError", "red", "black"), + (DeploymentStatus.ACTIVE, ServiceStatus.CREATECONTAINERCONFIGERROR): ( + "createContainerConfigError", + "red", + "black", + ), (DeploymentStatus.ACTIVE, ServiceStatus.CRASHLOOPBACKOFF): ("crashLoopBackOff", "red", "black"), (DeploymentStatus.ACTIVE, ServiceStatus.IMAGEPULLBACKOFF): ("imagePullBackOff", "red", "black"), (DeploymentStatus.ACTIVE, ServiceStatus.PROGRESSDEADLINEEXCEEDED): ("progressDeadlineExceeded", "red", "black"), From bc13c4ff8f6bb81fffbbec409693596c1cccb119 Mon Sep 17 00:00:00 2001 From: Michael Shin Date: Wed, 13 Nov 2024 15:47:53 -0500 Subject: [PATCH 3/3] add requirements.txt --- requirements-dev.txt | 2 ++ requirements.txt | 12 ++++++++++++ setup.py | 24 ++++++++++-------------- 3 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 requirements.txt diff --git a/requirements-dev.txt b/requirements-dev.txt index da65db1..6179c20 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,5 @@ +-r requirements.txt + torch==2.3.1 black>=23.10.0 pylint>=3.0.1 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f5e734b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,12 @@ +fastapi>=0.103.0 +uvicorn>=0.23.0 +python-multipart>=0.0.6 +pydantic-settings==2.0.* +Requests==2.32.2 +tabulate>=0.9.0 +pyjwt>=2.8.0 +cryptography==43.0.1 +prometheus-client>=0.20.0 +scipy>=1.6.0 +scikit-learn>=1.5.1 +platform-api-python-client==0.3.1 diff --git a/setup.py b/setup.py index c70eb51..943c1a6 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,14 @@ from setuptools import setup, find_packages +REQUIRES = [] +with open('requirements.txt') as f: + for line in f: + line, _, _ = line.partition('#') + line = line.strip() + if not line or line.startswith('setuptools'): + continue + REQUIRES.append(line) + setup( name='centml', version='0.2.0', @@ -13,18 +22,5 @@ "ccluster = centml.cli:ccluster", ], }, - install_requires=[ - "fastapi>=0.103.0", - "uvicorn>=0.23.0", - "python-multipart>=0.0.6", - "pydantic-settings==2.0.*", - "Requests==2.32.2", - "tabulate>=0.9.0", - "pyjwt>=2.8.0", - "cryptography==43.0.1", - "prometheus-client>=0.20.0", - "scipy>=1.6.0", - "scikit-learn>=1.5.1", - "platform-api-python-client==0.3.1", - ], + install_requires=REQUIRES )