Skip to content

Commit 059bb0c

Browse files
committed
black format
1 parent 8b37022 commit 059bb0c

6 files changed

Lines changed: 53 additions & 204 deletions

File tree

centml/cli/cluster.py

Lines changed: 18 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33
from typing import Dict
44
import click
55
from tabulate import tabulate
6-
from centml.sdk import (
7-
DeploymentType,
8-
DeploymentStatus,
9-
ServiceStatus,
10-
ApiException,
11-
HardwareInstanceResponse,
12-
)
6+
from centml.sdk import DeploymentType, DeploymentStatus, ServiceStatus, ApiException, HardwareInstanceResponse
137
from centml.sdk.api import get_centml_client
148

159

@@ -69,12 +63,8 @@ def _get_replica_info(deployment, depl_type):
6963
"""Extract replica information handling V2/V3 field differences"""
7064
if depl_type == DeploymentType.CSERVE_V3:
7165
return {
72-
"min": getattr(
73-
deployment, "min_replicas", getattr(deployment, "min_scale", None)
74-
),
75-
"max": getattr(
76-
deployment, "max_replicas", getattr(deployment, "max_scale", None)
77-
),
66+
"min": getattr(deployment, "min_replicas", getattr(deployment, "min_scale", None)),
67+
"max": getattr(deployment, "max_replicas", getattr(deployment, "max_scale", None)),
7868
}
7969
else: # V2
8070
return {"min": deployment.min_scale, "max": deployment.max_scale}
@@ -83,67 +73,36 @@ def _get_replica_info(deployment, depl_type):
8373
def _get_ready_status(cclient, deployment):
8474
api_status = deployment.status
8575
service_status = (
86-
cclient.get_status(deployment.id).service_status
87-
if deployment.status == DeploymentStatus.ACTIVE
88-
else None
76+
cclient.get_status(deployment.id).service_status if deployment.status == DeploymentStatus.ACTIVE else None
8977
)
9078

9179
status_styles = {
9280
(DeploymentStatus.PAUSED, None): ("paused", "yellow", "black"),
9381
(DeploymentStatus.DELETED, None): ("deleted", "white", "black"),
9482
(DeploymentStatus.ACTIVE, ServiceStatus.HEALTHY): ("ready", "green", "black"),
95-
(DeploymentStatus.ACTIVE, ServiceStatus.INITIALIZING): (
96-
"starting",
97-
"black",
98-
"white",
99-
),
100-
(DeploymentStatus.ACTIVE, ServiceStatus.MISSING): (
101-
"starting",
102-
"black",
103-
"white",
104-
),
83+
(DeploymentStatus.ACTIVE, ServiceStatus.INITIALIZING): ("starting", "black", "white"),
84+
(DeploymentStatus.ACTIVE, ServiceStatus.MISSING): ("starting", "black", "white"),
10585
(DeploymentStatus.ACTIVE, ServiceStatus.ERROR): ("error", "red", "black"),
10686
(DeploymentStatus.ACTIVE, ServiceStatus.CREATECONTAINERCONFIGERROR): (
10787
"createContainerConfigError",
10888
"red",
10989
"black",
11090
),
111-
(DeploymentStatus.ACTIVE, ServiceStatus.CRASHLOOPBACKOFF): (
112-
"crashLoopBackOff",
113-
"red",
114-
"black",
115-
),
116-
(DeploymentStatus.ACTIVE, ServiceStatus.IMAGEPULLBACKOFF): (
117-
"imagePullBackOff",
118-
"red",
119-
"black",
120-
),
121-
(DeploymentStatus.ACTIVE, ServiceStatus.PROGRESSDEADLINEEXCEEDED): (
122-
"progressDeadlineExceeded",
123-
"red",
124-
"black",
125-
),
91+
(DeploymentStatus.ACTIVE, ServiceStatus.CRASHLOOPBACKOFF): ("crashLoopBackOff", "red", "black"),
92+
(DeploymentStatus.ACTIVE, ServiceStatus.IMAGEPULLBACKOFF): ("imagePullBackOff", "red", "black"),
93+
(DeploymentStatus.ACTIVE, ServiceStatus.PROGRESSDEADLINEEXCEEDED): ("progressDeadlineExceeded", "red", "black"),
12694
}
12795

128-
style = status_styles.get(
129-
(api_status, service_status), ("unknown", "black", "white")
130-
)
96+
style = status_styles.get((api_status, service_status), ("unknown", "black", "white"))
13197
# Handle foreground and background colors
13298
return click.style(style[0], fg=style[1], bg=style[2])
13399

134100

135101
@click.command(help="List all deployments")
136-
@click.argument(
137-
"type",
138-
type=click.Choice(list(depl_name_to_type_map.keys())),
139-
required=False,
140-
default=None,
141-
)
102+
@click.argument("type", type=click.Choice(list(depl_name_to_type_map.keys())), required=False, default=None)
142103
def ls(type):
143104
with get_centml_client() as cclient:
144-
depl_type = (
145-
depl_name_to_type_map[type] if type in depl_name_to_type_map else None
146-
)
105+
depl_type = depl_name_to_type_map[type] if type in depl_name_to_type_map else None
147106
deployments = cclient.get(depl_type)
148107
rows = []
149108
for d in deployments:
@@ -225,10 +184,7 @@ def get(type, id):
225184
elif depl_type == DeploymentType.COMPUTE_V2:
226185
click.echo(
227186
tabulate(
228-
[
229-
("Username", "centml"),
230-
("SSH key", _format_ssh_key(deployment.ssh_public_key)),
231-
],
187+
[("Username", "centml"), ("SSH key", _format_ssh_key(deployment.ssh_public_key))],
232188
tablefmt="rounded_outline",
233189
disable_numparse=True,
234190
)
@@ -240,12 +196,8 @@ def get(type, id):
240196
(
241197
"Parallelism",
242198
{
243-
"tensor": deployment.recipe.additional_properties.get(
244-
"tensor_parallel_size", "N/A"
245-
),
246-
"pipeline": deployment.recipe.additional_properties.get(
247-
"pipeline_parallel_size", "N/A"
248-
),
199+
"tensor": deployment.recipe.additional_properties.get("tensor_parallel_size", "N/A"),
200+
"pipeline": deployment.recipe.additional_properties.get("pipeline_parallel_size", "N/A"),
249201
},
250202
),
251203
("Replicas", replica_info),
@@ -255,26 +207,14 @@ def get(type, id):
255207
# Add V3-specific rollout information
256208
if depl_type == DeploymentType.CSERVE_V3:
257209
rollout_info = {}
258-
if (
259-
hasattr(deployment, "max_surge")
260-
and deployment.max_surge is not None
261-
):
210+
if hasattr(deployment, "max_surge") and deployment.max_surge is not None:
262211
rollout_info["max_surge"] = deployment.max_surge
263-
if (
264-
hasattr(deployment, "max_unavailable")
265-
and deployment.max_unavailable is not None
266-
):
212+
if hasattr(deployment, "max_unavailable") and deployment.max_unavailable is not None:
267213
rollout_info["max_unavailable"] = deployment.max_unavailable
268214
if rollout_info:
269215
display_rows.append(("Rollout strategy", rollout_info))
270216

271-
click.echo(
272-
tabulate(
273-
display_rows,
274-
tablefmt="rounded_outline",
275-
disable_numparse=True,
276-
)
277-
)
217+
click.echo(tabulate(display_rows, tablefmt="rounded_outline", disable_numparse=True))
278218

279219

280220
@click.command(help="Delete a deployment")

centml/cli/login.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,7 @@
2626

2727
def generate_pkce_pair():
2828
verifier = secrets.token_urlsafe(64)
29-
challenge = (
30-
base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest())
31-
.decode()
32-
.rstrip("=")
33-
)
29+
challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).decode().rstrip("=")
3430
return verifier, challenge
3531

3632

@@ -106,18 +102,14 @@ def login(token_file):
106102
else:
107103
click.echo("Logging into CentML...")
108104

109-
choice = click.confirm(
110-
"Do you want to log in with your browser now?", default=True
111-
)
105+
choice = click.confirm("Do you want to log in with your browser now?", default=True)
112106
if choice:
113107
try:
114108
# PKCE Flow
115109
code_verifier, code_challenge = generate_pkce_pair()
116110
auth_url = build_auth_url(CLIENT_ID, REDIRECT_URI, code_challenge)
117111
click.echo("A browser window will open for you to authenticate.")
118-
click.echo(
119-
"If it doesn't open automatically, you can copy and paste this URL:"
120-
)
112+
click.echo("If it doesn't open automatically, you can copy and paste this URL:")
121113
click.echo(f" {auth_url}\n")
122114
webbrowser.open(auth_url)
123115
click.echo("Waiting for authentication...")
@@ -129,13 +121,9 @@ def login(token_file):
129121
click.echo("Login failed. Please try again.")
130122
else:
131123
cred = {
132-
key: response_dict[key]
133-
for key in ("access_token", "refresh_token")
134-
if key in response_dict
124+
key: response_dict[key] for key in ("access_token", "refresh_token") if key in response_dict
135125
}
136-
os.makedirs(
137-
os.path.dirname(settings.CENTML_CRED_FILE_PATH), exist_ok=True
138-
)
126+
os.makedirs(os.path.dirname(settings.CENTML_CRED_FILE_PATH), exist_ok=True)
139127
with open(settings.CENTML_CRED_FILE_PATH, "w") as f:
140128
json.dump(cred, f)
141129
click.echo("✅ Login successful")

centml/sdk/api.py

Lines changed: 20 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -28,37 +28,19 @@ def get_status(self, id):
2828
return self._api.get_deployment_status_deployments_status_deployment_id_get(id)
2929

3030
def get_inference(self, id):
31-
return (
32-
self._api.get_inference_deployment_deployments_inference_deployment_id_get(
33-
id
34-
)
35-
)
31+
return self._api.get_inference_deployment_deployments_inference_deployment_id_get(id)
3632

3733
def get_compute(self, id):
38-
return self._api.get_compute_deployment_deployments_compute_deployment_id_get(
39-
id
40-
)
34+
return self._api.get_compute_deployment_deployments_compute_deployment_id_get(id)
4135

4236
def get_cserve(self, id):
43-
return (
44-
self._api.get_cserve_v3_deployment_deployments_cserve_v3_deployment_id_get(
45-
id
46-
)
47-
)
37+
return self._api.get_cserve_v3_deployment_deployments_cserve_v3_deployment_id_get(id)
4838

4939
def get_cserve_v2(self, id):
50-
return (
51-
self._api.get_cserve_v2_deployment_deployments_cserve_v2_deployment_id_get(
52-
id
53-
)
54-
)
40+
return self._api.get_cserve_v2_deployment_deployments_cserve_v2_deployment_id_get(id)
5541

5642
def get_cserve_v3(self, id):
57-
return (
58-
self._api.get_cserve_v3_deployment_deployments_cserve_v3_deployment_id_get(
59-
id
60-
)
61-
)
43+
return self._api.get_cserve_v3_deployment_deployments_cserve_v3_deployment_id_get(id)
6244

6345
def create_inference(self, request: CreateInferenceDeploymentRequest):
6446
return self._api.create_inference_deployment_deployments_inference_post(request)
@@ -75,48 +57,24 @@ def create_cserve_v2(self, request: CreateCServeV2DeploymentRequest):
7557
def create_cserve_v3(self, request: CreateCServeV3DeploymentRequest):
7658
return self._api.create_cserve_v3_deployment_deployments_cserve_v3_post(request)
7759

78-
def update_inference(
79-
self, deployment_id: int, request: CreateInferenceDeploymentRequest
80-
):
81-
return self._api.update_inference_deployment_deployments_inference_put(
82-
deployment_id, request
83-
)
60+
def update_inference(self, deployment_id: int, request: CreateInferenceDeploymentRequest):
61+
return self._api.update_inference_deployment_deployments_inference_put(deployment_id, request)
8462

85-
def update_compute(
86-
self, deployment_id: int, request: CreateComputeDeploymentRequest
87-
):
88-
return self._api.update_compute_deployment_deployments_compute_put(
89-
deployment_id, request
90-
)
63+
def update_compute(self, deployment_id: int, request: CreateComputeDeploymentRequest):
64+
return self._api.update_compute_deployment_deployments_compute_put(deployment_id, request)
9165

92-
def update_cserve(
93-
self, deployment_id: int, request: CreateCServeV3DeploymentRequest
94-
):
95-
return self._api.update_cserve_v3_deployment_deployments_cserve_v3_put(
96-
deployment_id, request
97-
)
66+
def update_cserve(self, deployment_id: int, request: CreateCServeV3DeploymentRequest):
67+
return self._api.update_cserve_v3_deployment_deployments_cserve_v3_put(deployment_id, request)
9868

99-
def update_cserve_v2(
100-
self, deployment_id: int, request: CreateCServeV2DeploymentRequest
101-
):
102-
return self._api.update_cserve_v2_deployment_deployments_cserve_v2_put(
103-
deployment_id, request
104-
)
69+
def update_cserve_v2(self, deployment_id: int, request: CreateCServeV2DeploymentRequest):
70+
return self._api.update_cserve_v2_deployment_deployments_cserve_v2_put(deployment_id, request)
10571

106-
def update_cserve_v3(
107-
self, deployment_id: int, request: CreateCServeV3DeploymentRequest
108-
):
109-
return self._api.update_cserve_v3_deployment_deployments_cserve_v3_put(
110-
deployment_id, request
111-
)
72+
def update_cserve_v3(self, deployment_id: int, request: CreateCServeV3DeploymentRequest):
73+
return self._api.update_cserve_v3_deployment_deployments_cserve_v3_put(deployment_id, request)
11274

11375
def _update_status(self, id, new_status):
114-
status_req = platform_api_python_client.DeploymentStatusRequest(
115-
status=new_status
116-
)
117-
self._api.update_deployment_status_deployments_status_deployment_id_put(
118-
id, status_req
119-
)
76+
status_req = platform_api_python_client.DeploymentStatusRequest(status=new_status)
77+
self._api.update_deployment_status_deployments_status_deployment_id_put(id, status_req)
12078

12179
def delete(self, id):
12280
self._update_status(id, DeploymentStatus.DELETED)
@@ -139,16 +97,10 @@ def get_prebuilt_images(self, depl_type: DeploymentType):
13997
return self._api.get_prebuilt_images_prebuilt_images_get(type=depl_type)
14098

14199
def get_cserve_recipe(self, model=None, hf_token=None):
142-
return self._api.get_cserve_recipe_deployments_cserve_recipes_get(
143-
model=model, hf_token=hf_token
144-
).results
100+
return self._api.get_cserve_recipe_deployments_cserve_recipes_get(model=model, hf_token=hf_token).results
145101

146102
def get_cluster_id(self, hardware_instance_id):
147-
filtered_hw = list(
148-
filter(
149-
lambda h: h.id == hardware_instance_id, self.get_hardware_instances()
150-
)
151-
)
103+
filtered_hw = list(filter(lambda h: h.id == hardware_instance_id, self.get_hardware_instances()))
152104

153105
if len(filtered_hw) == 0:
154106
raise Exception(f"Invalid hardware instance id {hardware_instance_id}")
@@ -162,12 +114,7 @@ def get_user_vault(self, type):
162114

163115
# pylint: disable=R0917
164116
def get_deployment_usage(
165-
self,
166-
id: int,
167-
metric: Metric,
168-
start_time_in_seconds: int,
169-
end_time_in_seconds: int,
170-
step: int,
117+
self, id: int, metric: Metric, start_time_in_seconds: int, end_time_in_seconds: int, step: int
171118
):
172119
return self._api.get_usage_deployments_usage_deployment_id_get(
173120
deployment_id=id,

centml/sdk/auth.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@ def refresh_centml_token(refresh_token):
2929
os.remove(settings.CENTML_CRED_FILE_PATH)
3030
cred = None
3131
else:
32-
cred = {
33-
key: response_dict[key]
34-
for key in ("access_token", "refresh_token")
35-
if key in response_dict
36-
}
32+
cred = {key: response_dict[key] for key in ("access_token", "refresh_token") if key in response_dict}
3733
with open(settings.CENTML_CRED_FILE_PATH, "w") as f:
3834
json.dump(cred, f)
3935

@@ -65,9 +61,7 @@ def get_centml_token():
6561
cred = load_centml_cred()
6662
if not cred:
6763
sys.exit("CentML credentials not found. Please login...")
68-
exp_time = int(
69-
jwt.decode(cred["access_token"], options={"verify_signature": False})["exp"]
70-
)
64+
exp_time = int(jwt.decode(cred["access_token"], options={"verify_signature": False})["exp"])
7165

7266
if time.time() >= exp_time - 100:
7367
cred = refresh_centml_token(cred["refresh_token"])

centml/sdk/config.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,13 @@ class Config(BaseSettings):
88
model_config = SettingsConfigDict(env_file=Path(".env"))
99

1010
CENTML_WEB_URL: str = os.getenv("CENTML_WEB_URL", default="https://app.centml.com/")
11-
CENTML_CONFIG_PATH: str = os.getenv(
12-
"CENTML_CONFIG_PATH", default=os.path.expanduser("~/.centml")
13-
)
11+
CENTML_CONFIG_PATH: str = os.getenv("CENTML_CONFIG_PATH", default=os.path.expanduser("~/.centml"))
1412
CENTML_CRED_FILE: str = os.getenv("CENTML_CRED_FILE", default="credentials.json")
1513
CENTML_CRED_FILE_PATH: str = os.path.join(CENTML_CONFIG_PATH, CENTML_CRED_FILE)
1614

17-
CENTML_PLATFORM_API_URL: str = os.getenv(
18-
"CENTML_PLATFORM_API_URL", default="https://api.centml.com"
19-
)
15+
CENTML_PLATFORM_API_URL: str = os.getenv("CENTML_PLATFORM_API_URL", default="https://api.centml.com")
2016

21-
CENTML_WORKOS_CLIENT_ID: str = os.getenv(
22-
"CENTML_WORKOS_CLIENT_ID", default="client_01JP5TWW2997MF8AYQXHJEGYR0"
23-
)
17+
CENTML_WORKOS_CLIENT_ID: str = os.getenv("CENTML_WORKOS_CLIENT_ID", default="client_01JP5TWW2997MF8AYQXHJEGYR0")
2418

2519

2620
settings = Config()

0 commit comments

Comments
 (0)