aioli-sdk 1.2.0.dev41__tar.gz → 1.2.0.dev42__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/PKG-INFO +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/__version__.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/deployment.py +21 -5
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/model.py +26 -9
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/registry.py +21 -7
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/render.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/role.py +25 -22
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/template.py +79 -16
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/test/test_cli.py +102 -18
- aioli_sdk-1.2.0.dev42/aioli/cli/token.py +266 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/user.py +20 -5
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/PKG-INFO +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/SOURCES.txt +3 -3
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/__init__.py +4 -4
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/authentication_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/deployments_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/information_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/packaged_models_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/registries_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/roles_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/templates_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/tokens_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/users_api.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api_client.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/configuration.py +2 -2
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/exceptions.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/__init__.py +4 -4
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/auto_scaling_template.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/auto_scaling_template_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/autoscaling.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/configuration_resources.py +1 -1
- aioli_sdk-1.2.0.dev41/aiolirest/models/aproto_controller_config.py → aioli_sdk-1.2.0.dev42/aiolirest/models/controller_config.py +11 -11
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/controller_status.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_model_version.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_priority.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_state.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_token.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_token_patch_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/deployment_token_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/error_response.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/event_info.py +1 -1
- aioli_sdk-1.2.0.dev41/aiolirest/models/aproto_ezua_info.py → aioli_sdk-1.2.0.dev42/aiolirest/models/ezua_info.py +6 -7
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/failure_info.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/login_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/login_response.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/model_auth_token.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/model_response.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/observability.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/packaged_model.py +2 -2
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/packaged_model_request.py +2 -2
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/resource_profile.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/resources_template.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/resources_template_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/role.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/role_assignment.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/role_assignments.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/security.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/success_response.py +1 -1
- aioli_sdk-1.2.0.dev41/aiolirest/models/aproto_telemetry_info.py → aioli_sdk-1.2.0.dev42/aiolirest/models/telemetry_info.py +5 -5
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/trained_model_registry.py +3 -3
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/trained_model_registry_request.py +3 -3
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/user.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/user_patch_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/models/user_request.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/rest.py +1 -1
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/setup.py +1 -1
- aioli_sdk-1.2.0.dev41/aioli/cli/token.py +0 -253
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/README.md +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/__init__.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/__init__.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/__main__.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/_util.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/cli.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/errors.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/sso.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/test/conftest.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/cli/version.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/__init__.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/api/__init__.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/api/_util.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/api/authentication.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/api/certs.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/api/errors.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/api/request.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/check.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/constants.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/declarative_argparse.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/requests.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/common/util.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli/util.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/dependency_links.txt +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/entry_points.txt +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/not-zip-safe +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/requires.txt +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aioli_sdk.egg-info/top_level.txt +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api/__init__.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/api_response.py +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/aiolirest/py.typed +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/pyproject.toml +0 -0
- {aioli_sdk-1.2.0.dev41 → aioli_sdk-1.2.0.dev42}/setup.cfg +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# © Copyright 2024 Hewlett Packard Enterprise Development LP
|
|
2
|
-
__version__ = "1.2.0-
|
|
2
|
+
__version__ = "1.2.0-dev42"
|
|
@@ -29,6 +29,7 @@ def dashboard(args: Namespace) -> None:
|
|
|
29
29
|
|
|
30
30
|
deployment: Deployment = lookup_deployment(args.name, api_instance)
|
|
31
31
|
|
|
32
|
+
assert deployment.id is not None
|
|
32
33
|
observability = api_instance.deployments_id_observability_get(deployment.id)
|
|
33
34
|
launch_dashboard(args, observability.dashboard_url)
|
|
34
35
|
|
|
@@ -67,12 +68,16 @@ def list_deployments(args: Namespace) -> None:
|
|
|
67
68
|
model_api = aiolirest.PackagedModelsApi(session)
|
|
68
69
|
|
|
69
70
|
if args.json:
|
|
70
|
-
format_json(response, model_api)
|
|
71
|
+
render.print_json(format_json(response, model_api))
|
|
72
|
+
elif args.yaml:
|
|
73
|
+
print(render.format_object_as_yaml(format_json(response, model_api)))
|
|
71
74
|
else:
|
|
72
75
|
format_deployments(response, args, model_api)
|
|
73
76
|
|
|
74
77
|
|
|
75
|
-
def format_json(
|
|
78
|
+
def format_json(
|
|
79
|
+
response: List[Deployment], model_api: aiolirest.PackagedModelsApi
|
|
80
|
+
) -> List[Dict[str, str]]:
|
|
76
81
|
deps = []
|
|
77
82
|
for d in response:
|
|
78
83
|
# Don't use the d.to_json() method as it adds backslash escapes for double quote
|
|
@@ -88,7 +93,8 @@ def format_json(response: List[Deployment], model_api: aiolirest.PackagedModelsA
|
|
|
88
93
|
m_dict["model"] = model.name
|
|
89
94
|
m_dict.pop("clusterName", None)
|
|
90
95
|
deps.append(m_dict)
|
|
91
|
-
|
|
96
|
+
|
|
97
|
+
return deps
|
|
92
98
|
|
|
93
99
|
|
|
94
100
|
def format_deployments(
|
|
@@ -314,7 +320,12 @@ def get_deployment_events(args: Namespace) -> None:
|
|
|
314
320
|
"Event Type",
|
|
315
321
|
]
|
|
316
322
|
values = [format_events(r) for r in events]
|
|
317
|
-
|
|
323
|
+
if args.json:
|
|
324
|
+
render.print_json([e.to_dict() for e in events])
|
|
325
|
+
elif args.yaml:
|
|
326
|
+
print(render.format_object_as_yaml([e.to_dict() for e in events]))
|
|
327
|
+
else:
|
|
328
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
318
329
|
|
|
319
330
|
|
|
320
331
|
def str2bool(v: str) -> bool:
|
|
@@ -420,6 +431,7 @@ main_cmd = Cmd(
|
|
|
420
431
|
[
|
|
421
432
|
Arg("--csv", action="store_true", help="print as CSV"),
|
|
422
433
|
Arg("--json", action="store_true", help="print as JSON"),
|
|
434
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
423
435
|
],
|
|
424
436
|
is_default=True,
|
|
425
437
|
),
|
|
@@ -511,7 +523,11 @@ main_cmd = Cmd(
|
|
|
511
523
|
"get deployment events",
|
|
512
524
|
[
|
|
513
525
|
Arg("name", help="The name of the deployment"),
|
|
514
|
-
|
|
526
|
+
Group(
|
|
527
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
528
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
529
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
530
|
+
),
|
|
515
531
|
],
|
|
516
532
|
),
|
|
517
533
|
],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# © Copyright 2023-2024 Hewlett Packard Enterprise Development LP
|
|
2
2
|
import re
|
|
3
3
|
from argparse import Namespace
|
|
4
|
-
from typing import Any, List, Optional
|
|
4
|
+
from typing import Any, Dict, List, Optional
|
|
5
5
|
|
|
6
6
|
from pydantic import StrictInt
|
|
7
7
|
|
|
@@ -43,12 +43,16 @@ def list_models(args: Namespace) -> None:
|
|
|
43
43
|
registries_api = aiolirest.RegistriesApi(session)
|
|
44
44
|
|
|
45
45
|
if args.json:
|
|
46
|
-
format_json(response, registries_api)
|
|
46
|
+
render.print_json(format_json(response, registries_api))
|
|
47
|
+
elif args.yaml:
|
|
48
|
+
print(render.format_object_as_yaml(format_json(response, registries_api)))
|
|
47
49
|
else:
|
|
48
50
|
format_models(response, args, registries_api)
|
|
49
51
|
|
|
50
52
|
|
|
51
|
-
def format_json(
|
|
53
|
+
def format_json(
|
|
54
|
+
response: List[PackagedModel], registries_api: aiolirest.RegistriesApi
|
|
55
|
+
) -> List[Dict[str, str]]:
|
|
52
56
|
models = []
|
|
53
57
|
for m in response:
|
|
54
58
|
# Don't use the m.to_json() method as it adds backslash escapes for double quote
|
|
@@ -59,7 +63,7 @@ def format_json(response: List[PackagedModel], registries_api: aiolirest.Registr
|
|
|
59
63
|
d["registry"] = rname
|
|
60
64
|
models.append(d)
|
|
61
65
|
|
|
62
|
-
|
|
66
|
+
return models
|
|
63
67
|
|
|
64
68
|
|
|
65
69
|
def format_models(
|
|
@@ -193,6 +197,7 @@ def dashboard(args: Namespace) -> None:
|
|
|
193
197
|
|
|
194
198
|
model = lookup_model(args.name, api_instance)
|
|
195
199
|
|
|
200
|
+
assert model.id is not None
|
|
196
201
|
observability = api_instance.models_id_observability_get(model.id)
|
|
197
202
|
launch_dashboard(args, observability.dashboard_url)
|
|
198
203
|
|
|
@@ -359,8 +364,13 @@ def list_deployments(args: Namespace) -> None:
|
|
|
359
364
|
"Traffic",
|
|
360
365
|
]
|
|
361
366
|
|
|
362
|
-
|
|
363
|
-
|
|
367
|
+
if args.json:
|
|
368
|
+
render.print_json([r.to_dict() for r in response])
|
|
369
|
+
elif args.yaml:
|
|
370
|
+
print(render.format_object_as_yaml([r.to_dict() for r in response]))
|
|
371
|
+
else:
|
|
372
|
+
values = [format_deployments(r) for r in response]
|
|
373
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
364
374
|
|
|
365
375
|
|
|
366
376
|
common_model_args: ArgsDescription = [
|
|
@@ -430,8 +440,11 @@ main_cmd = Cmd(
|
|
|
430
440
|
Arg("--all", action="store_true", help="show all models"),
|
|
431
441
|
Arg("--name", help="list all versions of model, if specified"),
|
|
432
442
|
),
|
|
433
|
-
|
|
434
|
-
|
|
443
|
+
Group(
|
|
444
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
445
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
446
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
447
|
+
),
|
|
435
448
|
],
|
|
436
449
|
is_default=True,
|
|
437
450
|
),
|
|
@@ -524,11 +537,15 @@ main_cmd = Cmd(
|
|
|
524
537
|
list_deployments,
|
|
525
538
|
"list of deployment versions for a packaged model",
|
|
526
539
|
[
|
|
527
|
-
Arg("--csv", action="store_true", help="print as CSV"),
|
|
528
540
|
Arg(
|
|
529
541
|
"name",
|
|
530
542
|
help=VERSIONED_MODEL_HELP_MSG,
|
|
531
543
|
),
|
|
544
|
+
Group(
|
|
545
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
546
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
547
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
548
|
+
),
|
|
532
549
|
],
|
|
533
550
|
),
|
|
534
551
|
],
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import os
|
|
3
3
|
import textwrap
|
|
4
4
|
from argparse import Namespace
|
|
5
|
-
from typing import Any, List, Optional
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
6
|
|
|
7
7
|
from pydantic import StrictInt
|
|
8
8
|
|
|
@@ -27,12 +27,14 @@ def list_registries(args: Namespace) -> None:
|
|
|
27
27
|
response = api_instance.registries_get()
|
|
28
28
|
|
|
29
29
|
if args.json:
|
|
30
|
-
format_json(response)
|
|
30
|
+
render.print_json(format_json(response))
|
|
31
|
+
elif args.yaml:
|
|
32
|
+
print(render.format_object_as_yaml(format_json(response)))
|
|
31
33
|
else:
|
|
32
34
|
format_deployment(response, args)
|
|
33
35
|
|
|
34
36
|
|
|
35
|
-
def format_json(response: List[TrainedModelRegistry]) ->
|
|
37
|
+
def format_json(response: List[TrainedModelRegistry]) -> List[Dict[str, str]]:
|
|
36
38
|
regs = []
|
|
37
39
|
for r in response:
|
|
38
40
|
# Don't use the r.to_json() method as it adds backslash escapes for double quote
|
|
@@ -41,7 +43,7 @@ def format_json(response: List[TrainedModelRegistry]) -> None:
|
|
|
41
43
|
d.pop("modifiedAt")
|
|
42
44
|
regs.append(d)
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
return regs
|
|
45
47
|
|
|
46
48
|
|
|
47
49
|
def format_deployment(response: List[TrainedModelRegistry], args: Namespace) -> None:
|
|
@@ -256,6 +258,7 @@ def list_models(args: Namespace) -> None:
|
|
|
256
258
|
|
|
257
259
|
# The columns displayed depend on the registry type, so adjust the headers accordingly.
|
|
258
260
|
headers = ["Name", "Image", "Size\nGiB", "Description"]
|
|
261
|
+
assert registry.id is not None
|
|
259
262
|
if registry.type == "openllm":
|
|
260
263
|
headers = ["URL", "Description"]
|
|
261
264
|
for model_format in knownOpenllmModelFormats:
|
|
@@ -267,8 +270,13 @@ def list_models(args: Namespace) -> None:
|
|
|
267
270
|
if registry.type == "pfs":
|
|
268
271
|
headers = ["Name", "URL", "Size\nGiB", "Description"]
|
|
269
272
|
|
|
270
|
-
|
|
271
|
-
|
|
273
|
+
if args.json:
|
|
274
|
+
render.print_json([m.to_dict() for m in models])
|
|
275
|
+
elif args.yaml:
|
|
276
|
+
print(render.format_object_as_yaml([m.to_dict() for m in models]))
|
|
277
|
+
else:
|
|
278
|
+
values = [format_model(registry, m) for m in models]
|
|
279
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
272
280
|
|
|
273
281
|
|
|
274
282
|
main_cmd = Cmd(
|
|
@@ -285,7 +293,8 @@ main_cmd = Cmd(
|
|
|
285
293
|
Group(
|
|
286
294
|
Arg("--csv", action="store_true", help="print as CSV"),
|
|
287
295
|
Arg("--json", action="store_true", help="print as JSON"),
|
|
288
|
-
|
|
296
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
297
|
+
),
|
|
289
298
|
],
|
|
290
299
|
is_default=True,
|
|
291
300
|
),
|
|
@@ -366,6 +375,11 @@ main_cmd = Cmd(
|
|
|
366
375
|
"lists the available models in a registry (for certain registry types)",
|
|
367
376
|
[
|
|
368
377
|
Arg("name", help="The name of the model registry"),
|
|
378
|
+
Group(
|
|
379
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
380
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
381
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
382
|
+
),
|
|
369
383
|
],
|
|
370
384
|
),
|
|
371
385
|
],
|
|
@@ -128,7 +128,7 @@ def render_objects(
|
|
|
128
128
|
# return s
|
|
129
129
|
|
|
130
130
|
|
|
131
|
-
def format_object_as_yaml(source: Dict[str, Any]) -> str:
|
|
131
|
+
def format_object_as_yaml(source: Union[Dict[str, Any], List[Dict[str, Any]]]) -> str:
|
|
132
132
|
yaml = YAML(typ="safe", pure=True)
|
|
133
133
|
yaml.default_flow_style = False
|
|
134
134
|
stream = StringIO()
|
|
@@ -6,8 +6,7 @@ import aiolirest
|
|
|
6
6
|
from aioli import cli
|
|
7
7
|
from aioli.cli import render
|
|
8
8
|
from aioli.common.api import authentication
|
|
9
|
-
from aioli.common.declarative_argparse import Arg, Cmd
|
|
10
|
-
from aiolirest.models.role import Role
|
|
9
|
+
from aioli.common.declarative_argparse import Arg, Cmd, Group
|
|
11
10
|
from aiolirest.models.role_assignment import RoleAssignment
|
|
12
11
|
from aiolirest.models.role_assignments import RoleAssignments
|
|
13
12
|
|
|
@@ -18,20 +17,18 @@ def list_roles(args: Namespace) -> None:
|
|
|
18
17
|
api_instance = aiolirest.RolesApi(session)
|
|
19
18
|
response = api_instance.roles_get()
|
|
20
19
|
|
|
21
|
-
def format_roles(r: Role) -> List[Any]:
|
|
22
|
-
result = [
|
|
23
|
-
r.id,
|
|
24
|
-
r.role_name,
|
|
25
|
-
]
|
|
26
|
-
return result
|
|
27
|
-
|
|
28
20
|
headers = [
|
|
29
21
|
"ID",
|
|
30
22
|
"Role Name",
|
|
31
23
|
]
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
if args.json:
|
|
26
|
+
render.print_json([r.to_dict() for r in response])
|
|
27
|
+
elif args.yaml:
|
|
28
|
+
print(render.format_object_as_yaml([r.to_dict() for r in response]))
|
|
29
|
+
else:
|
|
30
|
+
values = [[r.id, r.role_name] for r in response]
|
|
31
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
35
32
|
|
|
36
33
|
|
|
37
34
|
@authentication.required
|
|
@@ -40,20 +37,18 @@ def list_user_roles(args: Namespace) -> None:
|
|
|
40
37
|
api_instance = aiolirest.RolesApi(session)
|
|
41
38
|
response = api_instance.roles_assignments_get(args.username)
|
|
42
39
|
|
|
43
|
-
def format_assignments(r: RoleAssignment) -> List[Any]:
|
|
44
|
-
result = [
|
|
45
|
-
r.user_name,
|
|
46
|
-
r.role_name,
|
|
47
|
-
]
|
|
48
|
-
return result
|
|
49
|
-
|
|
50
40
|
headers = [
|
|
51
41
|
"User Name",
|
|
52
42
|
"Role Name",
|
|
53
43
|
]
|
|
54
44
|
|
|
55
|
-
|
|
56
|
-
|
|
45
|
+
if args.json:
|
|
46
|
+
render.print_json([r.to_dict() for r in response])
|
|
47
|
+
elif args.yaml:
|
|
48
|
+
print(render.format_object_as_yaml([r.to_dict() for r in response]))
|
|
49
|
+
else:
|
|
50
|
+
values = [[r.user_name, r.role_name] for r in response]
|
|
51
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
57
52
|
|
|
58
53
|
|
|
59
54
|
@authentication.required
|
|
@@ -88,7 +83,11 @@ main_cmd = Cmd(
|
|
|
88
83
|
list_roles,
|
|
89
84
|
"list roles",
|
|
90
85
|
[
|
|
91
|
-
|
|
86
|
+
Group(
|
|
87
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
88
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
89
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
90
|
+
),
|
|
92
91
|
],
|
|
93
92
|
is_default=True,
|
|
94
93
|
),
|
|
@@ -98,7 +97,11 @@ main_cmd = Cmd(
|
|
|
98
97
|
"list roles for a user",
|
|
99
98
|
[
|
|
100
99
|
Arg("username", help="The name of the user"),
|
|
101
|
-
|
|
100
|
+
Group(
|
|
101
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
102
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
103
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
104
|
+
),
|
|
102
105
|
],
|
|
103
106
|
),
|
|
104
107
|
Cmd(
|
|
@@ -24,6 +24,17 @@ def list_resource_templates(args: Namespace) -> None:
|
|
|
24
24
|
response = api_instance.templates_resources_get()
|
|
25
25
|
|
|
26
26
|
def format_resource_template(rt: ResourcesTemplate) -> List[Any]:
|
|
27
|
+
assert rt is not None
|
|
28
|
+
assert rt.resources is not None
|
|
29
|
+
assert rt.resources.requests is not None
|
|
30
|
+
assert rt.resources.requests.cpu is not None
|
|
31
|
+
assert rt.resources.requests.gpu is not None
|
|
32
|
+
assert rt.resources.requests.memory is not None
|
|
33
|
+
assert rt.resources.limits is not None
|
|
34
|
+
assert rt.resources.limits.cpu is not None
|
|
35
|
+
assert rt.resources.limits.gpu is not None
|
|
36
|
+
assert rt.resources.limits.memory is not None
|
|
37
|
+
|
|
27
38
|
result = [
|
|
28
39
|
rt.name,
|
|
29
40
|
rt.description,
|
|
@@ -34,9 +45,14 @@ def list_resource_templates(args: Namespace) -> None:
|
|
|
34
45
|
]
|
|
35
46
|
return result
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
if args.json:
|
|
49
|
+
render.print_json([r.to_dict() for r in response])
|
|
50
|
+
elif args.yaml:
|
|
51
|
+
print(render.format_object_as_yaml([r.to_dict() for r in response]))
|
|
52
|
+
else:
|
|
53
|
+
headers = ["Name", "Description", "CPU", "Memory", "GPU", "GPU Type"]
|
|
54
|
+
values = [format_resource_template(rt) for rt in response]
|
|
55
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
40
56
|
|
|
41
57
|
|
|
42
58
|
def lookup_resource_template(name: str, api: aiolirest.TemplatesApi) -> ResourcesTemplate:
|
|
@@ -69,7 +85,7 @@ def create_resource_template(args: Namespace) -> None:
|
|
|
69
85
|
description=args.description,
|
|
70
86
|
name=args.name,
|
|
71
87
|
resources=ConfigurationResources(
|
|
72
|
-
|
|
88
|
+
gpuType=args.gpu_type,
|
|
73
89
|
limits=ResourceProfile(
|
|
74
90
|
cpu=args.limits_cpu, gpu=args.limits_gpu, memory=args.limits_memory
|
|
75
91
|
),
|
|
@@ -87,11 +103,16 @@ def update_resource_template(args: Namespace) -> None:
|
|
|
87
103
|
api_instance = aiolirest.TemplatesApi(session)
|
|
88
104
|
found = lookup_resource_template(args.templatename, api_instance)
|
|
89
105
|
|
|
106
|
+
assert found is not None
|
|
107
|
+
assert found.resources is not None
|
|
108
|
+
assert found.resources.limits is not None
|
|
109
|
+
assert found.resources.requests is not None
|
|
110
|
+
|
|
90
111
|
request = ResourcesTemplateRequest(
|
|
91
112
|
name=found.name,
|
|
92
113
|
description=found.description,
|
|
93
114
|
resources=ConfigurationResources(
|
|
94
|
-
|
|
115
|
+
gpuType=found.resources.gpu_type,
|
|
95
116
|
limits=ResourceProfile(
|
|
96
117
|
cpu=found.resources.limits.cpu,
|
|
97
118
|
gpu=found.resources.limits.gpu,
|
|
@@ -105,6 +126,11 @@ def update_resource_template(args: Namespace) -> None:
|
|
|
105
126
|
),
|
|
106
127
|
)
|
|
107
128
|
|
|
129
|
+
assert request is not None
|
|
130
|
+
assert request.resources is not None
|
|
131
|
+
assert request.resources.limits is not None
|
|
132
|
+
assert request.resources.requests is not None
|
|
133
|
+
|
|
108
134
|
orig_name = found.name
|
|
109
135
|
|
|
110
136
|
if args.name is not None:
|
|
@@ -155,6 +181,10 @@ def list_autoscaling_templates(args: Namespace) -> None:
|
|
|
155
181
|
response = api_instance.templates_autoscaling_get()
|
|
156
182
|
|
|
157
183
|
def format_autoscaling_template(at: AutoScalingTemplate) -> List[Any]:
|
|
184
|
+
assert at is not None
|
|
185
|
+
assert at.description is not None
|
|
186
|
+
assert at.auto_scaling is not None
|
|
187
|
+
|
|
158
188
|
result = [
|
|
159
189
|
at.name,
|
|
160
190
|
at.description,
|
|
@@ -165,9 +195,14 @@ def list_autoscaling_templates(args: Namespace) -> None:
|
|
|
165
195
|
]
|
|
166
196
|
return result
|
|
167
197
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
198
|
+
if args.json:
|
|
199
|
+
render.print_json([r.to_dict() for r in response])
|
|
200
|
+
elif args.yaml:
|
|
201
|
+
print(render.format_object_as_yaml([r.to_dict() for r in response]))
|
|
202
|
+
else:
|
|
203
|
+
headers = ["Name", "Description", "MinReplicas", "MaxReplicas", "Metric", "Target"]
|
|
204
|
+
values = [format_autoscaling_template(at) for at in response]
|
|
205
|
+
render.tabulate_or_csv(headers, values, args.csv)
|
|
171
206
|
|
|
172
207
|
|
|
173
208
|
def lookup_autoscaling_template(name: str, api: aiolirest.TemplatesApi) -> AutoScalingTemplate:
|
|
@@ -197,10 +232,10 @@ def create_autoscaling_template(args: Namespace) -> None:
|
|
|
197
232
|
api_instance = aiolirest.TemplatesApi(session)
|
|
198
233
|
|
|
199
234
|
at = AutoScalingTemplateRequest(
|
|
200
|
-
|
|
201
|
-
|
|
235
|
+
autoScaling=Autoscaling(
|
|
236
|
+
maxReplicas=args.autoscaling_max_replicas,
|
|
202
237
|
metric=args.autoscaling_metric,
|
|
203
|
-
|
|
238
|
+
minReplicas=args.autoscaling_min_replicas,
|
|
204
239
|
target=args.autoscaling_target,
|
|
205
240
|
),
|
|
206
241
|
description=args.description,
|
|
@@ -215,11 +250,14 @@ def update_autoscaling_template(args: Namespace) -> None:
|
|
|
215
250
|
api_instance = aiolirest.TemplatesApi(session)
|
|
216
251
|
found = lookup_autoscaling_template(args.templatename, api_instance)
|
|
217
252
|
|
|
253
|
+
assert found is not None
|
|
254
|
+
assert found.auto_scaling is not None
|
|
255
|
+
|
|
218
256
|
request = AutoScalingTemplateRequest(
|
|
219
|
-
|
|
220
|
-
|
|
257
|
+
autoScaling=Autoscaling(
|
|
258
|
+
maxReplicas=found.auto_scaling.max_replicas,
|
|
221
259
|
metric=found.auto_scaling.metric,
|
|
222
|
-
|
|
260
|
+
minReplicas=found.auto_scaling.min_replicas,
|
|
223
261
|
target=found.auto_scaling.target,
|
|
224
262
|
),
|
|
225
263
|
description=found.description,
|
|
@@ -228,6 +266,9 @@ def update_autoscaling_template(args: Namespace) -> None:
|
|
|
228
266
|
|
|
229
267
|
orig_name = found.name
|
|
230
268
|
|
|
269
|
+
assert request is not None
|
|
270
|
+
assert request.auto_scaling is not None
|
|
271
|
+
|
|
231
272
|
if args.name is not None:
|
|
232
273
|
request.name = args.name
|
|
233
274
|
|
|
@@ -281,7 +322,18 @@ main_cmd = Cmd(
|
|
|
281
322
|
None,
|
|
282
323
|
"manage resource templates",
|
|
283
324
|
[
|
|
284
|
-
Cmd(
|
|
325
|
+
Cmd(
|
|
326
|
+
"list ls",
|
|
327
|
+
list_resource_templates,
|
|
328
|
+
"list resource templates",
|
|
329
|
+
[
|
|
330
|
+
Group(
|
|
331
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
332
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
333
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
334
|
+
),
|
|
335
|
+
],
|
|
336
|
+
),
|
|
285
337
|
Cmd(
|
|
286
338
|
"show",
|
|
287
339
|
show_resource_template,
|
|
@@ -335,7 +387,18 @@ main_cmd = Cmd(
|
|
|
335
387
|
None,
|
|
336
388
|
"manage autoscaling templates",
|
|
337
389
|
[
|
|
338
|
-
Cmd(
|
|
390
|
+
Cmd(
|
|
391
|
+
"list ls",
|
|
392
|
+
list_autoscaling_templates,
|
|
393
|
+
"list autoscaling templates",
|
|
394
|
+
[
|
|
395
|
+
Group(
|
|
396
|
+
Arg("--csv", action="store_true", help="print as CSV"),
|
|
397
|
+
Arg("--json", action="store_true", help="print as JSON"),
|
|
398
|
+
Arg("--yaml", action="store_true", help="print as YAML"),
|
|
399
|
+
),
|
|
400
|
+
],
|
|
401
|
+
),
|
|
339
402
|
Cmd(
|
|
340
403
|
"show",
|
|
341
404
|
show_autoscaling_template,
|