anyscale 0.26.0__py3-none-any.whl → 0.26.2__py3-none-any.whl

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.
Files changed (47) hide show
  1. anyscale/_private/anyscale_client/anyscale_client.py +13 -1
  2. anyscale/_private/anyscale_client/common.py +1 -1
  3. anyscale/_private/docgen/models.md +2 -2
  4. anyscale/client/README.md +21 -10
  5. anyscale/client/openapi_client/__init__.py +15 -6
  6. anyscale/client/openapi_client/api/default_api.py +322 -83
  7. anyscale/client/openapi_client/models/__init__.py +15 -6
  8. anyscale/client/openapi_client/models/{customer_billing_type.py → actor_status.py} +7 -8
  9. anyscale/client/openapi_client/models/aggregated_instance_usage_csv.py +81 -3
  10. anyscale/client/openapi_client/models/baseimagesenum.py +59 -1
  11. anyscale/client/openapi_client/models/create_organization_configuration.py +3 -3
  12. anyscale/client/openapi_client/models/{create_resource_alert.py → create_resource_notification.py} +40 -40
  13. anyscale/client/openapi_client/models/job_details.py +173 -0
  14. anyscale/client/openapi_client/models/{list_resource_alerts_query.py → list_resource_notifications_query.py} +24 -24
  15. anyscale/client/openapi_client/models/machine_launch_failure.py +152 -0
  16. anyscale/client/openapi_client/models/organization_configuration.py +3 -3
  17. anyscale/client/openapi_client/models/organization_configuration_response.py +3 -3
  18. anyscale/client/openapi_client/models/resource_alert_event_type.py +5 -1
  19. anyscale/client/openapi_client/models/{resource_alert.py → resource_notification.py} +64 -64
  20. anyscale/client/openapi_client/models/resourcenotification_list_response.py +147 -0
  21. anyscale/client/openapi_client/models/{resourcealert_response.py → resourcenotification_response.py} +11 -11
  22. anyscale/client/openapi_client/models/run_attempt_status.py +103 -0
  23. anyscale/client/openapi_client/models/run_status.py +106 -0
  24. anyscale/client/openapi_client/models/scheduler_info.py +32 -3
  25. anyscale/client/openapi_client/models/supportedbaseimagesenum.py +59 -1
  26. anyscale/client/openapi_client/models/tool.py +2 -1
  27. anyscale/client/openapi_client/models/train_resources.py +121 -0
  28. anyscale/client/openapi_client/models/train_run.py +387 -0
  29. anyscale/client/openapi_client/models/train_run_attempt.py +308 -0
  30. anyscale/client/openapi_client/models/train_worker.py +363 -0
  31. anyscale/client/openapi_client/models/{resourcealert_list_response.py → trainrun_list_response.py} +15 -15
  32. anyscale/client/openapi_client/models/workspace_dataplane_proxied_artifacts.py +31 -3
  33. anyscale/commands/machine_pool_commands.py +15 -10
  34. anyscale/resource_quota/commands.py +1 -2
  35. anyscale/sdk/anyscale_client/models/baseimagesenum.py +59 -1
  36. anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py +59 -1
  37. anyscale/service/_private/service_sdk.py +2 -3
  38. anyscale/shared_anyscale_utils/constants.py +3 -0
  39. anyscale/shared_anyscale_utils/latest_ray_version.py +1 -1
  40. anyscale/version.py +1 -1
  41. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/METADATA +1 -1
  42. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/RECORD +47 -37
  43. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/LICENSE +0 -0
  44. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/NOTICE +0 -0
  45. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/WHEEL +0 -0
  46. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/entry_points.txt +0 -0
  47. {anyscale-0.26.0.dist-info → anyscale-0.26.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,363 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Managed Ray API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
+
8
+ The version of the OpenAPI document: 0.1.0
9
+ Generated by: https://openapi-generator.tech
10
+ """
11
+
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ from openapi_client.configuration import Configuration
19
+
20
+
21
+ class TrainWorker(object):
22
+ """NOTE: This class is auto generated by OpenAPI Generator.
23
+ Ref: https://openapi-generator.tech
24
+
25
+ Do not edit the class manually.
26
+ """
27
+
28
+ """
29
+ Attributes:
30
+ openapi_types (dict): The key is attribute name
31
+ and the value is attribute type.
32
+ attribute_map (dict): The key is attribute name
33
+ and the value is json key in definition.
34
+ """
35
+ openapi_types = {
36
+ 'actor_id': 'str',
37
+ 'world_rank': 'int',
38
+ 'local_rank': 'int',
39
+ 'node_rank': 'int',
40
+ 'node_id': 'str',
41
+ 'node_ip': 'str',
42
+ 'pid': 'int',
43
+ 'gpu_ids': 'list[int]',
44
+ 'status': 'ActorStatus',
45
+ 'resources': 'TrainResources'
46
+ }
47
+
48
+ attribute_map = {
49
+ 'actor_id': 'actor_id',
50
+ 'world_rank': 'world_rank',
51
+ 'local_rank': 'local_rank',
52
+ 'node_rank': 'node_rank',
53
+ 'node_id': 'node_id',
54
+ 'node_ip': 'node_ip',
55
+ 'pid': 'pid',
56
+ 'gpu_ids': 'gpu_ids',
57
+ 'status': 'status',
58
+ 'resources': 'resources'
59
+ }
60
+
61
+ def __init__(self, actor_id=None, world_rank=None, local_rank=None, node_rank=None, node_id=None, node_ip=None, pid=None, gpu_ids=None, status=None, resources=None, local_vars_configuration=None): # noqa: E501
62
+ """TrainWorker - a model defined in OpenAPI""" # noqa: E501
63
+ if local_vars_configuration is None:
64
+ local_vars_configuration = Configuration()
65
+ self.local_vars_configuration = local_vars_configuration
66
+
67
+ self._actor_id = None
68
+ self._world_rank = None
69
+ self._local_rank = None
70
+ self._node_rank = None
71
+ self._node_id = None
72
+ self._node_ip = None
73
+ self._pid = None
74
+ self._gpu_ids = None
75
+ self._status = None
76
+ self._resources = None
77
+ self.discriminator = None
78
+
79
+ self.actor_id = actor_id
80
+ self.world_rank = world_rank
81
+ self.local_rank = local_rank
82
+ self.node_rank = node_rank
83
+ self.node_id = node_id
84
+ self.node_ip = node_ip
85
+ self.pid = pid
86
+ self.gpu_ids = gpu_ids
87
+ self.status = status
88
+ if resources is not None:
89
+ self.resources = resources
90
+
91
+ @property
92
+ def actor_id(self):
93
+ """Gets the actor_id of this TrainWorker. # noqa: E501
94
+
95
+
96
+ :return: The actor_id of this TrainWorker. # noqa: E501
97
+ :rtype: str
98
+ """
99
+ return self._actor_id
100
+
101
+ @actor_id.setter
102
+ def actor_id(self, actor_id):
103
+ """Sets the actor_id of this TrainWorker.
104
+
105
+
106
+ :param actor_id: The actor_id of this TrainWorker. # noqa: E501
107
+ :type: str
108
+ """
109
+ if self.local_vars_configuration.client_side_validation and actor_id is None: # noqa: E501
110
+ raise ValueError("Invalid value for `actor_id`, must not be `None`") # noqa: E501
111
+
112
+ self._actor_id = actor_id
113
+
114
+ @property
115
+ def world_rank(self):
116
+ """Gets the world_rank of this TrainWorker. # noqa: E501
117
+
118
+
119
+ :return: The world_rank of this TrainWorker. # noqa: E501
120
+ :rtype: int
121
+ """
122
+ return self._world_rank
123
+
124
+ @world_rank.setter
125
+ def world_rank(self, world_rank):
126
+ """Sets the world_rank of this TrainWorker.
127
+
128
+
129
+ :param world_rank: The world_rank of this TrainWorker. # noqa: E501
130
+ :type: int
131
+ """
132
+ if self.local_vars_configuration.client_side_validation and world_rank is None: # noqa: E501
133
+ raise ValueError("Invalid value for `world_rank`, must not be `None`") # noqa: E501
134
+
135
+ self._world_rank = world_rank
136
+
137
+ @property
138
+ def local_rank(self):
139
+ """Gets the local_rank of this TrainWorker. # noqa: E501
140
+
141
+
142
+ :return: The local_rank of this TrainWorker. # noqa: E501
143
+ :rtype: int
144
+ """
145
+ return self._local_rank
146
+
147
+ @local_rank.setter
148
+ def local_rank(self, local_rank):
149
+ """Sets the local_rank of this TrainWorker.
150
+
151
+
152
+ :param local_rank: The local_rank of this TrainWorker. # noqa: E501
153
+ :type: int
154
+ """
155
+ if self.local_vars_configuration.client_side_validation and local_rank is None: # noqa: E501
156
+ raise ValueError("Invalid value for `local_rank`, must not be `None`") # noqa: E501
157
+
158
+ self._local_rank = local_rank
159
+
160
+ @property
161
+ def node_rank(self):
162
+ """Gets the node_rank of this TrainWorker. # noqa: E501
163
+
164
+
165
+ :return: The node_rank of this TrainWorker. # noqa: E501
166
+ :rtype: int
167
+ """
168
+ return self._node_rank
169
+
170
+ @node_rank.setter
171
+ def node_rank(self, node_rank):
172
+ """Sets the node_rank of this TrainWorker.
173
+
174
+
175
+ :param node_rank: The node_rank of this TrainWorker. # noqa: E501
176
+ :type: int
177
+ """
178
+ if self.local_vars_configuration.client_side_validation and node_rank is None: # noqa: E501
179
+ raise ValueError("Invalid value for `node_rank`, must not be `None`") # noqa: E501
180
+
181
+ self._node_rank = node_rank
182
+
183
+ @property
184
+ def node_id(self):
185
+ """Gets the node_id of this TrainWorker. # noqa: E501
186
+
187
+
188
+ :return: The node_id of this TrainWorker. # noqa: E501
189
+ :rtype: str
190
+ """
191
+ return self._node_id
192
+
193
+ @node_id.setter
194
+ def node_id(self, node_id):
195
+ """Sets the node_id of this TrainWorker.
196
+
197
+
198
+ :param node_id: The node_id of this TrainWorker. # noqa: E501
199
+ :type: str
200
+ """
201
+ if self.local_vars_configuration.client_side_validation and node_id is None: # noqa: E501
202
+ raise ValueError("Invalid value for `node_id`, must not be `None`") # noqa: E501
203
+
204
+ self._node_id = node_id
205
+
206
+ @property
207
+ def node_ip(self):
208
+ """Gets the node_ip of this TrainWorker. # noqa: E501
209
+
210
+
211
+ :return: The node_ip of this TrainWorker. # noqa: E501
212
+ :rtype: str
213
+ """
214
+ return self._node_ip
215
+
216
+ @node_ip.setter
217
+ def node_ip(self, node_ip):
218
+ """Sets the node_ip of this TrainWorker.
219
+
220
+
221
+ :param node_ip: The node_ip of this TrainWorker. # noqa: E501
222
+ :type: str
223
+ """
224
+ if self.local_vars_configuration.client_side_validation and node_ip is None: # noqa: E501
225
+ raise ValueError("Invalid value for `node_ip`, must not be `None`") # noqa: E501
226
+
227
+ self._node_ip = node_ip
228
+
229
+ @property
230
+ def pid(self):
231
+ """Gets the pid of this TrainWorker. # noqa: E501
232
+
233
+
234
+ :return: The pid of this TrainWorker. # noqa: E501
235
+ :rtype: int
236
+ """
237
+ return self._pid
238
+
239
+ @pid.setter
240
+ def pid(self, pid):
241
+ """Sets the pid of this TrainWorker.
242
+
243
+
244
+ :param pid: The pid of this TrainWorker. # noqa: E501
245
+ :type: int
246
+ """
247
+ if self.local_vars_configuration.client_side_validation and pid is None: # noqa: E501
248
+ raise ValueError("Invalid value for `pid`, must not be `None`") # noqa: E501
249
+
250
+ self._pid = pid
251
+
252
+ @property
253
+ def gpu_ids(self):
254
+ """Gets the gpu_ids of this TrainWorker. # noqa: E501
255
+
256
+
257
+ :return: The gpu_ids of this TrainWorker. # noqa: E501
258
+ :rtype: list[int]
259
+ """
260
+ return self._gpu_ids
261
+
262
+ @gpu_ids.setter
263
+ def gpu_ids(self, gpu_ids):
264
+ """Sets the gpu_ids of this TrainWorker.
265
+
266
+
267
+ :param gpu_ids: The gpu_ids of this TrainWorker. # noqa: E501
268
+ :type: list[int]
269
+ """
270
+ if self.local_vars_configuration.client_side_validation and gpu_ids is None: # noqa: E501
271
+ raise ValueError("Invalid value for `gpu_ids`, must not be `None`") # noqa: E501
272
+
273
+ self._gpu_ids = gpu_ids
274
+
275
+ @property
276
+ def status(self):
277
+ """Gets the status of this TrainWorker. # noqa: E501
278
+
279
+
280
+ :return: The status of this TrainWorker. # noqa: E501
281
+ :rtype: ActorStatus
282
+ """
283
+ return self._status
284
+
285
+ @status.setter
286
+ def status(self, status):
287
+ """Sets the status of this TrainWorker.
288
+
289
+
290
+ :param status: The status of this TrainWorker. # noqa: E501
291
+ :type: ActorStatus
292
+ """
293
+ if self.local_vars_configuration.client_side_validation and status is None: # noqa: E501
294
+ raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501
295
+
296
+ self._status = status
297
+
298
+ @property
299
+ def resources(self):
300
+ """Gets the resources of this TrainWorker. # noqa: E501
301
+
302
+
303
+ :return: The resources of this TrainWorker. # noqa: E501
304
+ :rtype: TrainResources
305
+ """
306
+ return self._resources
307
+
308
+ @resources.setter
309
+ def resources(self, resources):
310
+ """Sets the resources of this TrainWorker.
311
+
312
+
313
+ :param resources: The resources of this TrainWorker. # noqa: E501
314
+ :type: TrainResources
315
+ """
316
+
317
+ self._resources = resources
318
+
319
+ def to_dict(self):
320
+ """Returns the model properties as a dict"""
321
+ result = {}
322
+
323
+ for attr, _ in six.iteritems(self.openapi_types):
324
+ value = getattr(self, attr)
325
+ if isinstance(value, list):
326
+ result[attr] = list(map(
327
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
328
+ value
329
+ ))
330
+ elif hasattr(value, "to_dict"):
331
+ result[attr] = value.to_dict()
332
+ elif isinstance(value, dict):
333
+ result[attr] = dict(map(
334
+ lambda item: (item[0], item[1].to_dict())
335
+ if hasattr(item[1], "to_dict") else item,
336
+ value.items()
337
+ ))
338
+ else:
339
+ result[attr] = value
340
+
341
+ return result
342
+
343
+ def to_str(self):
344
+ """Returns the string representation of the model"""
345
+ return pprint.pformat(self.to_dict())
346
+
347
+ def __repr__(self):
348
+ """For `print` and `pprint`"""
349
+ return self.to_str()
350
+
351
+ def __eq__(self, other):
352
+ """Returns true if both objects are equal"""
353
+ if not isinstance(other, TrainWorker):
354
+ return False
355
+
356
+ return self.to_dict() == other.to_dict()
357
+
358
+ def __ne__(self, other):
359
+ """Returns true if both objects are not equal"""
360
+ if not isinstance(other, TrainWorker):
361
+ return True
362
+
363
+ return self.to_dict() != other.to_dict()
@@ -18,7 +18,7 @@ import six
18
18
  from openapi_client.configuration import Configuration
19
19
 
20
20
 
21
- class ResourcealertListResponse(object):
21
+ class TrainrunListResponse(object):
22
22
  """NOTE: This class is auto generated by OpenAPI Generator.
23
23
  Ref: https://openapi-generator.tech
24
24
 
@@ -33,7 +33,7 @@ class ResourcealertListResponse(object):
33
33
  and the value is json key in definition.
34
34
  """
35
35
  openapi_types = {
36
- 'results': 'list[ResourceAlert]',
36
+ 'results': 'list[TrainRun]',
37
37
  'metadata': 'ListResponseMetadata'
38
38
  }
39
39
 
@@ -43,7 +43,7 @@ class ResourcealertListResponse(object):
43
43
  }
44
44
 
45
45
  def __init__(self, results=None, metadata=None, local_vars_configuration=None): # noqa: E501
46
- """ResourcealertListResponse - a model defined in OpenAPI""" # noqa: E501
46
+ """TrainrunListResponse - a model defined in OpenAPI""" # noqa: E501
47
47
  if local_vars_configuration is None:
48
48
  local_vars_configuration = Configuration()
49
49
  self.local_vars_configuration = local_vars_configuration
@@ -58,21 +58,21 @@ class ResourcealertListResponse(object):
58
58
 
59
59
  @property
60
60
  def results(self):
61
- """Gets the results of this ResourcealertListResponse. # noqa: E501
61
+ """Gets the results of this TrainrunListResponse. # noqa: E501
62
62
 
63
63
 
64
- :return: The results of this ResourcealertListResponse. # noqa: E501
65
- :rtype: list[ResourceAlert]
64
+ :return: The results of this TrainrunListResponse. # noqa: E501
65
+ :rtype: list[TrainRun]
66
66
  """
67
67
  return self._results
68
68
 
69
69
  @results.setter
70
70
  def results(self, results):
71
- """Sets the results of this ResourcealertListResponse.
71
+ """Sets the results of this TrainrunListResponse.
72
72
 
73
73
 
74
- :param results: The results of this ResourcealertListResponse. # noqa: E501
75
- :type: list[ResourceAlert]
74
+ :param results: The results of this TrainrunListResponse. # noqa: E501
75
+ :type: list[TrainRun]
76
76
  """
77
77
  if self.local_vars_configuration.client_side_validation and results is None: # noqa: E501
78
78
  raise ValueError("Invalid value for `results`, must not be `None`") # noqa: E501
@@ -81,20 +81,20 @@ class ResourcealertListResponse(object):
81
81
 
82
82
  @property
83
83
  def metadata(self):
84
- """Gets the metadata of this ResourcealertListResponse. # noqa: E501
84
+ """Gets the metadata of this TrainrunListResponse. # noqa: E501
85
85
 
86
86
 
87
- :return: The metadata of this ResourcealertListResponse. # noqa: E501
87
+ :return: The metadata of this TrainrunListResponse. # noqa: E501
88
88
  :rtype: ListResponseMetadata
89
89
  """
90
90
  return self._metadata
91
91
 
92
92
  @metadata.setter
93
93
  def metadata(self, metadata):
94
- """Sets the metadata of this ResourcealertListResponse.
94
+ """Sets the metadata of this TrainrunListResponse.
95
95
 
96
96
 
97
- :param metadata: The metadata of this ResourcealertListResponse. # noqa: E501
97
+ :param metadata: The metadata of this TrainrunListResponse. # noqa: E501
98
98
  :type: ListResponseMetadata
99
99
  """
100
100
 
@@ -134,14 +134,14 @@ class ResourcealertListResponse(object):
134
134
 
135
135
  def __eq__(self, other):
136
136
  """Returns true if both objects are equal"""
137
- if not isinstance(other, ResourcealertListResponse):
137
+ if not isinstance(other, TrainrunListResponse):
138
138
  return False
139
139
 
140
140
  return self.to_dict() == other.to_dict()
141
141
 
142
142
  def __ne__(self, other):
143
143
  """Returns true if both objects are not equal"""
144
- if not isinstance(other, ResourcealertListResponse):
144
+ if not isinstance(other, TrainrunListResponse):
145
145
  return True
146
146
 
147
147
  return self.to_dict() != other.to_dict()
@@ -36,17 +36,19 @@ class WorkspaceDataplaneProxiedArtifacts(object):
36
36
  'requirements': 'str',
37
37
  'skip_packages_tracking': 'str',
38
38
  'environment_variables': 'list[str]',
39
- 'dockerfile': 'str'
39
+ 'dockerfile': 'str',
40
+ 'dockerfile_draft': 'str'
40
41
  }
41
42
 
42
43
  attribute_map = {
43
44
  'requirements': 'requirements',
44
45
  'skip_packages_tracking': 'skip_packages_tracking',
45
46
  'environment_variables': 'environment_variables',
46
- 'dockerfile': 'dockerfile'
47
+ 'dockerfile': 'dockerfile',
48
+ 'dockerfile_draft': 'dockerfile_draft'
47
49
  }
48
50
 
49
- def __init__(self, requirements=None, skip_packages_tracking=None, environment_variables=None, dockerfile=None, local_vars_configuration=None): # noqa: E501
51
+ def __init__(self, requirements=None, skip_packages_tracking=None, environment_variables=None, dockerfile=None, dockerfile_draft=None, local_vars_configuration=None): # noqa: E501
50
52
  """WorkspaceDataplaneProxiedArtifacts - a model defined in OpenAPI""" # noqa: E501
51
53
  if local_vars_configuration is None:
52
54
  local_vars_configuration = Configuration()
@@ -56,6 +58,7 @@ class WorkspaceDataplaneProxiedArtifacts(object):
56
58
  self._skip_packages_tracking = None
57
59
  self._environment_variables = None
58
60
  self._dockerfile = None
61
+ self._dockerfile_draft = None
59
62
  self.discriminator = None
60
63
 
61
64
  if requirements is not None:
@@ -66,6 +69,8 @@ class WorkspaceDataplaneProxiedArtifacts(object):
66
69
  self.environment_variables = environment_variables
67
70
  if dockerfile is not None:
68
71
  self.dockerfile = dockerfile
72
+ if dockerfile_draft is not None:
73
+ self.dockerfile_draft = dockerfile_draft
69
74
 
70
75
  @property
71
76
  def requirements(self):
@@ -159,6 +164,29 @@ class WorkspaceDataplaneProxiedArtifacts(object):
159
164
 
160
165
  self._dockerfile = dockerfile
161
166
 
167
+ @property
168
+ def dockerfile_draft(self):
169
+ """Gets the dockerfile_draft of this WorkspaceDataplaneProxiedArtifacts. # noqa: E501
170
+
171
+ The Dockerfile.draft of the workspace. # noqa: E501
172
+
173
+ :return: The dockerfile_draft of this WorkspaceDataplaneProxiedArtifacts. # noqa: E501
174
+ :rtype: str
175
+ """
176
+ return self._dockerfile_draft
177
+
178
+ @dockerfile_draft.setter
179
+ def dockerfile_draft(self, dockerfile_draft):
180
+ """Sets the dockerfile_draft of this WorkspaceDataplaneProxiedArtifacts.
181
+
182
+ The Dockerfile.draft of the workspace. # noqa: E501
183
+
184
+ :param dockerfile_draft: The dockerfile_draft of this WorkspaceDataplaneProxiedArtifacts. # noqa: E501
185
+ :type: str
186
+ """
187
+
188
+ self._dockerfile_draft = dockerfile_draft
189
+
162
190
  def to_dict(self):
163
191
  """Returns the model properties as a dict"""
164
192
  result = {}
@@ -102,6 +102,10 @@ def describe(name: str, format_: str) -> None:
102
102
  if format_ == "json":
103
103
  print(json.dumps(scheduler_info.to_dict(), default=str))
104
104
  elif format_ == "table":
105
+
106
+ def format_time(timestamp):
107
+ return str(timestamp.astimezone().strftime("%m/%d/%Y %I:%M:%S %p %Z"))
108
+
105
109
  machines_table = []
106
110
  columns = [
107
111
  "MACHINE ID",
@@ -124,11 +128,7 @@ def describe(name: str, format_: str) -> None:
124
128
  if row.workload_info.workload_name
125
129
  else "",
126
130
  row.workload_score,
127
- str(
128
- row.workload_info.workload_start_time.astimezone().strftime(
129
- "%m/%d/%Y %I:%M:%S %p %Z"
130
- )
131
- )
131
+ format_time(row.workload_info.workload_start_time)
132
132
  if row.workload_info.workload_name
133
133
  else "",
134
134
  row.cloud_instance_id,
@@ -160,11 +160,7 @@ def describe(name: str, format_: str) -> None:
160
160
  row.size,
161
161
  row.machine_type,
162
162
  f"{row.workload_info.workload_type}/{row.workload_info.workload_name}",
163
- str(
164
- row.workload_info.workload_start_time.astimezone().strftime(
165
- "%m/%d/%Y %I:%M:%S %p %Z"
166
- )
167
- )
163
+ format_time(row.workload_info.workload_start_time)
168
164
  if row.workload_info.workload_name
169
165
  else "",
170
166
  row.workload_info.workload_cloud,
@@ -180,6 +176,15 @@ def describe(name: str, format_: str) -> None:
180
176
  )
181
177
  )
182
178
 
179
+ if (
180
+ scheduler_info.recent_launch_failures
181
+ and len(scheduler_info.recent_launch_failures) > 0
182
+ ):
183
+ print("Recent Launch Failures:")
184
+ for failure in scheduler_info.recent_launch_failures:
185
+ error = failure.error.replace("\n", " ")
186
+ print(f"- [{format_time(failure.timestamp)}] {error}")
187
+
183
188
 
184
189
  @machine_pool_cli.command(
185
190
  name="delete",
@@ -12,7 +12,7 @@ import anyscale
12
12
  from anyscale.resource_quota.models import CreateResourceQuota
13
13
 
14
14
  anyscale.resource_quota.create(
15
- ResourceQuota(
15
+ CreateResourceQuota(
16
16
  name="my-resource-quota",
17
17
  cloud="my-cloud",
18
18
  project="my-project",
@@ -25,7 +25,6 @@ _CREATE_DOCSTRINGS = {"create_resource_quota": "The resource quota to be created
25
25
 
26
26
  _LIST_EXAMPLE = """
27
27
  import anyscale
28
- from anyscale.resource_quota.models import CreateResourceQuota
29
28
 
30
29
  anyscale.resource_quota.list(
31
30
  name="my-resource-quota",