anyscale 0.26.13__py3-none-any.whl → 0.26.14__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 (32) hide show
  1. anyscale/_private/docgen/models.md +2 -2
  2. anyscale/client/README.md +19 -0
  3. anyscale/client/openapi_client/__init__.py +14 -0
  4. anyscale/client/openapi_client/api/default_api.py +575 -0
  5. anyscale/client/openapi_client/models/__init__.py +14 -0
  6. anyscale/client/openapi_client/models/baseimagesenum.py +2 -4
  7. anyscale/client/openapi_client/models/supportedbaseimagesenum.py +2 -2
  8. anyscale/client/openapi_client/models/task_exception_group_aggregate.py +148 -0
  9. anyscale/client/openapi_client/models/task_function_name_group_aggregate.py +175 -0
  10. anyscale/client/openapi_client/models/task_grouped_aggregate_metrics.py +337 -0
  11. anyscale/client/openapi_client/models/task_job_group_aggregate.py +148 -0
  12. anyscale/client/openapi_client/models/task_state.py +103 -0
  13. anyscale/client/openapi_client/models/task_summary.py +256 -0
  14. anyscale/client/openapi_client/models/task_table_config.py +250 -0
  15. anyscale/client/openapi_client/models/task_table_response.py +174 -0
  16. anyscale/client/openapi_client/models/task_table_row.py +491 -0
  17. anyscale/client/openapi_client/models/task_type.py +100 -0
  18. anyscale/client/openapi_client/models/taskexceptiongroupaggregate_list_response.py +147 -0
  19. anyscale/client/openapi_client/models/taskfunctionnamegroupaggregate_list_response.py +147 -0
  20. anyscale/client/openapi_client/models/taskjobgroupaggregate_list_response.py +147 -0
  21. anyscale/client/openapi_client/models/tasksummary_response.py +121 -0
  22. anyscale/commands/command_examples.py +22 -0
  23. anyscale/sdk/anyscale_client/models/baseimagesenum.py +2 -4
  24. anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py +2 -2
  25. anyscale/version.py +1 -1
  26. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/METADATA +1 -1
  27. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/RECORD +32 -18
  28. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/LICENSE +0 -0
  29. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/NOTICE +0 -0
  30. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/WHEEL +0 -0
  31. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/entry_points.txt +0 -0
  32. {anyscale-0.26.13.dist-info → anyscale-0.26.14.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,147 @@
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 TaskexceptiongroupaggregateListResponse(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
+ 'results': 'list[TaskExceptionGroupAggregate]',
37
+ 'metadata': 'ListResponseMetadata'
38
+ }
39
+
40
+ attribute_map = {
41
+ 'results': 'results',
42
+ 'metadata': 'metadata'
43
+ }
44
+
45
+ def __init__(self, results=None, metadata=None, local_vars_configuration=None): # noqa: E501
46
+ """TaskexceptiongroupaggregateListResponse - a model defined in OpenAPI""" # noqa: E501
47
+ if local_vars_configuration is None:
48
+ local_vars_configuration = Configuration()
49
+ self.local_vars_configuration = local_vars_configuration
50
+
51
+ self._results = None
52
+ self._metadata = None
53
+ self.discriminator = None
54
+
55
+ self.results = results
56
+ if metadata is not None:
57
+ self.metadata = metadata
58
+
59
+ @property
60
+ def results(self):
61
+ """Gets the results of this TaskexceptiongroupaggregateListResponse. # noqa: E501
62
+
63
+
64
+ :return: The results of this TaskexceptiongroupaggregateListResponse. # noqa: E501
65
+ :rtype: list[TaskExceptionGroupAggregate]
66
+ """
67
+ return self._results
68
+
69
+ @results.setter
70
+ def results(self, results):
71
+ """Sets the results of this TaskexceptiongroupaggregateListResponse.
72
+
73
+
74
+ :param results: The results of this TaskexceptiongroupaggregateListResponse. # noqa: E501
75
+ :type: list[TaskExceptionGroupAggregate]
76
+ """
77
+ if self.local_vars_configuration.client_side_validation and results is None: # noqa: E501
78
+ raise ValueError("Invalid value for `results`, must not be `None`") # noqa: E501
79
+
80
+ self._results = results
81
+
82
+ @property
83
+ def metadata(self):
84
+ """Gets the metadata of this TaskexceptiongroupaggregateListResponse. # noqa: E501
85
+
86
+
87
+ :return: The metadata of this TaskexceptiongroupaggregateListResponse. # noqa: E501
88
+ :rtype: ListResponseMetadata
89
+ """
90
+ return self._metadata
91
+
92
+ @metadata.setter
93
+ def metadata(self, metadata):
94
+ """Sets the metadata of this TaskexceptiongroupaggregateListResponse.
95
+
96
+
97
+ :param metadata: The metadata of this TaskexceptiongroupaggregateListResponse. # noqa: E501
98
+ :type: ListResponseMetadata
99
+ """
100
+
101
+ self._metadata = metadata
102
+
103
+ def to_dict(self):
104
+ """Returns the model properties as a dict"""
105
+ result = {}
106
+
107
+ for attr, _ in six.iteritems(self.openapi_types):
108
+ value = getattr(self, attr)
109
+ if isinstance(value, list):
110
+ result[attr] = list(map(
111
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
112
+ value
113
+ ))
114
+ elif hasattr(value, "to_dict"):
115
+ result[attr] = value.to_dict()
116
+ elif isinstance(value, dict):
117
+ result[attr] = dict(map(
118
+ lambda item: (item[0], item[1].to_dict())
119
+ if hasattr(item[1], "to_dict") else item,
120
+ value.items()
121
+ ))
122
+ else:
123
+ result[attr] = value
124
+
125
+ return result
126
+
127
+ def to_str(self):
128
+ """Returns the string representation of the model"""
129
+ return pprint.pformat(self.to_dict())
130
+
131
+ def __repr__(self):
132
+ """For `print` and `pprint`"""
133
+ return self.to_str()
134
+
135
+ def __eq__(self, other):
136
+ """Returns true if both objects are equal"""
137
+ if not isinstance(other, TaskexceptiongroupaggregateListResponse):
138
+ return False
139
+
140
+ return self.to_dict() == other.to_dict()
141
+
142
+ def __ne__(self, other):
143
+ """Returns true if both objects are not equal"""
144
+ if not isinstance(other, TaskexceptiongroupaggregateListResponse):
145
+ return True
146
+
147
+ return self.to_dict() != other.to_dict()
@@ -0,0 +1,147 @@
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 TaskfunctionnamegroupaggregateListResponse(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
+ 'results': 'list[TaskFunctionNameGroupAggregate]',
37
+ 'metadata': 'ListResponseMetadata'
38
+ }
39
+
40
+ attribute_map = {
41
+ 'results': 'results',
42
+ 'metadata': 'metadata'
43
+ }
44
+
45
+ def __init__(self, results=None, metadata=None, local_vars_configuration=None): # noqa: E501
46
+ """TaskfunctionnamegroupaggregateListResponse - a model defined in OpenAPI""" # noqa: E501
47
+ if local_vars_configuration is None:
48
+ local_vars_configuration = Configuration()
49
+ self.local_vars_configuration = local_vars_configuration
50
+
51
+ self._results = None
52
+ self._metadata = None
53
+ self.discriminator = None
54
+
55
+ self.results = results
56
+ if metadata is not None:
57
+ self.metadata = metadata
58
+
59
+ @property
60
+ def results(self):
61
+ """Gets the results of this TaskfunctionnamegroupaggregateListResponse. # noqa: E501
62
+
63
+
64
+ :return: The results of this TaskfunctionnamegroupaggregateListResponse. # noqa: E501
65
+ :rtype: list[TaskFunctionNameGroupAggregate]
66
+ """
67
+ return self._results
68
+
69
+ @results.setter
70
+ def results(self, results):
71
+ """Sets the results of this TaskfunctionnamegroupaggregateListResponse.
72
+
73
+
74
+ :param results: The results of this TaskfunctionnamegroupaggregateListResponse. # noqa: E501
75
+ :type: list[TaskFunctionNameGroupAggregate]
76
+ """
77
+ if self.local_vars_configuration.client_side_validation and results is None: # noqa: E501
78
+ raise ValueError("Invalid value for `results`, must not be `None`") # noqa: E501
79
+
80
+ self._results = results
81
+
82
+ @property
83
+ def metadata(self):
84
+ """Gets the metadata of this TaskfunctionnamegroupaggregateListResponse. # noqa: E501
85
+
86
+
87
+ :return: The metadata of this TaskfunctionnamegroupaggregateListResponse. # noqa: E501
88
+ :rtype: ListResponseMetadata
89
+ """
90
+ return self._metadata
91
+
92
+ @metadata.setter
93
+ def metadata(self, metadata):
94
+ """Sets the metadata of this TaskfunctionnamegroupaggregateListResponse.
95
+
96
+
97
+ :param metadata: The metadata of this TaskfunctionnamegroupaggregateListResponse. # noqa: E501
98
+ :type: ListResponseMetadata
99
+ """
100
+
101
+ self._metadata = metadata
102
+
103
+ def to_dict(self):
104
+ """Returns the model properties as a dict"""
105
+ result = {}
106
+
107
+ for attr, _ in six.iteritems(self.openapi_types):
108
+ value = getattr(self, attr)
109
+ if isinstance(value, list):
110
+ result[attr] = list(map(
111
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
112
+ value
113
+ ))
114
+ elif hasattr(value, "to_dict"):
115
+ result[attr] = value.to_dict()
116
+ elif isinstance(value, dict):
117
+ result[attr] = dict(map(
118
+ lambda item: (item[0], item[1].to_dict())
119
+ if hasattr(item[1], "to_dict") else item,
120
+ value.items()
121
+ ))
122
+ else:
123
+ result[attr] = value
124
+
125
+ return result
126
+
127
+ def to_str(self):
128
+ """Returns the string representation of the model"""
129
+ return pprint.pformat(self.to_dict())
130
+
131
+ def __repr__(self):
132
+ """For `print` and `pprint`"""
133
+ return self.to_str()
134
+
135
+ def __eq__(self, other):
136
+ """Returns true if both objects are equal"""
137
+ if not isinstance(other, TaskfunctionnamegroupaggregateListResponse):
138
+ return False
139
+
140
+ return self.to_dict() == other.to_dict()
141
+
142
+ def __ne__(self, other):
143
+ """Returns true if both objects are not equal"""
144
+ if not isinstance(other, TaskfunctionnamegroupaggregateListResponse):
145
+ return True
146
+
147
+ return self.to_dict() != other.to_dict()
@@ -0,0 +1,147 @@
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 TaskjobgroupaggregateListResponse(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
+ 'results': 'list[TaskJobGroupAggregate]',
37
+ 'metadata': 'ListResponseMetadata'
38
+ }
39
+
40
+ attribute_map = {
41
+ 'results': 'results',
42
+ 'metadata': 'metadata'
43
+ }
44
+
45
+ def __init__(self, results=None, metadata=None, local_vars_configuration=None): # noqa: E501
46
+ """TaskjobgroupaggregateListResponse - a model defined in OpenAPI""" # noqa: E501
47
+ if local_vars_configuration is None:
48
+ local_vars_configuration = Configuration()
49
+ self.local_vars_configuration = local_vars_configuration
50
+
51
+ self._results = None
52
+ self._metadata = None
53
+ self.discriminator = None
54
+
55
+ self.results = results
56
+ if metadata is not None:
57
+ self.metadata = metadata
58
+
59
+ @property
60
+ def results(self):
61
+ """Gets the results of this TaskjobgroupaggregateListResponse. # noqa: E501
62
+
63
+
64
+ :return: The results of this TaskjobgroupaggregateListResponse. # noqa: E501
65
+ :rtype: list[TaskJobGroupAggregate]
66
+ """
67
+ return self._results
68
+
69
+ @results.setter
70
+ def results(self, results):
71
+ """Sets the results of this TaskjobgroupaggregateListResponse.
72
+
73
+
74
+ :param results: The results of this TaskjobgroupaggregateListResponse. # noqa: E501
75
+ :type: list[TaskJobGroupAggregate]
76
+ """
77
+ if self.local_vars_configuration.client_side_validation and results is None: # noqa: E501
78
+ raise ValueError("Invalid value for `results`, must not be `None`") # noqa: E501
79
+
80
+ self._results = results
81
+
82
+ @property
83
+ def metadata(self):
84
+ """Gets the metadata of this TaskjobgroupaggregateListResponse. # noqa: E501
85
+
86
+
87
+ :return: The metadata of this TaskjobgroupaggregateListResponse. # noqa: E501
88
+ :rtype: ListResponseMetadata
89
+ """
90
+ return self._metadata
91
+
92
+ @metadata.setter
93
+ def metadata(self, metadata):
94
+ """Sets the metadata of this TaskjobgroupaggregateListResponse.
95
+
96
+
97
+ :param metadata: The metadata of this TaskjobgroupaggregateListResponse. # noqa: E501
98
+ :type: ListResponseMetadata
99
+ """
100
+
101
+ self._metadata = metadata
102
+
103
+ def to_dict(self):
104
+ """Returns the model properties as a dict"""
105
+ result = {}
106
+
107
+ for attr, _ in six.iteritems(self.openapi_types):
108
+ value = getattr(self, attr)
109
+ if isinstance(value, list):
110
+ result[attr] = list(map(
111
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
112
+ value
113
+ ))
114
+ elif hasattr(value, "to_dict"):
115
+ result[attr] = value.to_dict()
116
+ elif isinstance(value, dict):
117
+ result[attr] = dict(map(
118
+ lambda item: (item[0], item[1].to_dict())
119
+ if hasattr(item[1], "to_dict") else item,
120
+ value.items()
121
+ ))
122
+ else:
123
+ result[attr] = value
124
+
125
+ return result
126
+
127
+ def to_str(self):
128
+ """Returns the string representation of the model"""
129
+ return pprint.pformat(self.to_dict())
130
+
131
+ def __repr__(self):
132
+ """For `print` and `pprint`"""
133
+ return self.to_str()
134
+
135
+ def __eq__(self, other):
136
+ """Returns true if both objects are equal"""
137
+ if not isinstance(other, TaskjobgroupaggregateListResponse):
138
+ return False
139
+
140
+ return self.to_dict() == other.to_dict()
141
+
142
+ def __ne__(self, other):
143
+ """Returns true if both objects are not equal"""
144
+ if not isinstance(other, TaskjobgroupaggregateListResponse):
145
+ return True
146
+
147
+ return self.to_dict() != other.to_dict()
@@ -0,0 +1,121 @@
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 TasksummaryResponse(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
+ 'result': 'TaskSummary'
37
+ }
38
+
39
+ attribute_map = {
40
+ 'result': 'result'
41
+ }
42
+
43
+ def __init__(self, result=None, local_vars_configuration=None): # noqa: E501
44
+ """TasksummaryResponse - a model defined in OpenAPI""" # noqa: E501
45
+ if local_vars_configuration is None:
46
+ local_vars_configuration = Configuration()
47
+ self.local_vars_configuration = local_vars_configuration
48
+
49
+ self._result = None
50
+ self.discriminator = None
51
+
52
+ self.result = result
53
+
54
+ @property
55
+ def result(self):
56
+ """Gets the result of this TasksummaryResponse. # noqa: E501
57
+
58
+
59
+ :return: The result of this TasksummaryResponse. # noqa: E501
60
+ :rtype: TaskSummary
61
+ """
62
+ return self._result
63
+
64
+ @result.setter
65
+ def result(self, result):
66
+ """Sets the result of this TasksummaryResponse.
67
+
68
+
69
+ :param result: The result of this TasksummaryResponse. # noqa: E501
70
+ :type: TaskSummary
71
+ """
72
+ if self.local_vars_configuration.client_side_validation and result is None: # noqa: E501
73
+ raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501
74
+
75
+ self._result = result
76
+
77
+ def to_dict(self):
78
+ """Returns the model properties as a dict"""
79
+ result = {}
80
+
81
+ for attr, _ in six.iteritems(self.openapi_types):
82
+ value = getattr(self, attr)
83
+ if isinstance(value, list):
84
+ result[attr] = list(map(
85
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
86
+ value
87
+ ))
88
+ elif hasattr(value, "to_dict"):
89
+ result[attr] = value.to_dict()
90
+ elif isinstance(value, dict):
91
+ result[attr] = dict(map(
92
+ lambda item: (item[0], item[1].to_dict())
93
+ if hasattr(item[1], "to_dict") else item,
94
+ value.items()
95
+ ))
96
+ else:
97
+ result[attr] = value
98
+
99
+ return result
100
+
101
+ def to_str(self):
102
+ """Returns the string representation of the model"""
103
+ return pprint.pformat(self.to_dict())
104
+
105
+ def __repr__(self):
106
+ """For `print` and `pprint`"""
107
+ return self.to_str()
108
+
109
+ def __eq__(self, other):
110
+ """Returns true if both objects are equal"""
111
+ if not isinstance(other, TasksummaryResponse):
112
+ return False
113
+
114
+ return self.to_dict() == other.to_dict()
115
+
116
+ def __ne__(self, other):
117
+ """Returns true if both objects are not equal"""
118
+ if not isinstance(other, TasksummaryResponse):
119
+ return True
120
+
121
+ return self.to_dict() != other.to_dict()
@@ -1,4 +1,5 @@
1
1
  JOB_SUBMIT_EXAMPLE = """\
2
+ # Submit a job without a yaml file, this will inherit the environment from the workspace.
2
3
  $ anyscale job submit --name my-job --wait -- python main.py
3
4
  Output
4
5
  (anyscale +1.0s) Submitting job with config JobConfig(name='my-job', image_uri=None, compute_config=None, env_vars=None, py_modules=None, cloud=None, project=None, ray_version=None, job_queue_config=None).
@@ -10,6 +11,27 @@ Output
10
11
  (anyscale +3.5s) Waiting for job 'prodjob_6ntzknwk1i9b1uw1zk1gp9dbhe' to reach target state SUCCEEDED, currently in state: STARTING
11
12
  (anyscale +1m19.7s) Job 'prodjob_6ntzknwk1i9b1uw1zk1gp9dbhe' transitioned from STARTING to SUCCEEDED
12
13
  (anyscale +1m19.7s) Job 'prodjob_6ntzknwk1i9b1uw1zk1gp9dbhe' reached target state, exiting
14
+
15
+ # Submit a job specified by a yaml file, this will run a job with the specified settings.
16
+ # See https://docs.anyscale.com/reference/job-api/#jobconfig for a list of all available fields.
17
+ $ cat job.yaml
18
+ name: my-job
19
+ entrypoint: python main.py
20
+ image_uri: anyscale/ray:2.44.1-slim-py312-cu128 # (Optional) Exclusive with `containerfile`.
21
+ # compute_config: # (Optional) An inline dictionary can also be provided.
22
+ # head_node:
23
+ # instance_type: m5.8xlarge
24
+ working_dir: . # (Optional) Use current working directory "." as the working_dir. Can be any local path or remote .zip file in cloud storage.
25
+ requirements: # (Optional) List of requirements files to install. Can also be a path to a requirements.txt.
26
+ - emoji
27
+ max_retries: 0 # (Optional) Maximum number of times the job will be retried before being marked failed. Defaults to `1`.
28
+ $ anyscale job submit -f job.yaml
29
+ Output
30
+ (anyscale +1.0s) Submitting job with config JobConfig(name='my-job', image_uri='anyscale/ray:2.44.1-slim-py312-cu128', compute_config=None, env_vars=None, py_modules=None, py_executable=None, cloud=None, project=None, ray_version=None, job_queue_config=None).
31
+ (anyscale +4.2s) Uploading local dir '.' to cloud storage.
32
+ (anyscale +5.4s) Job 'my-job' submitted, ID: 'prodjob_ugk21r7pt6sbsxfuxn1an82x3e'.
33
+ (anyscale +5.4s) View the job in the UI: https://console.anyscale.com/jobs/prodjob_ugk21r7pt6sbsxfuxn1an82x3e
34
+ (anyscale +5.4s) Use `--wait` to wait for the job to run and stream logs.
13
35
  """
14
36
 
15
37
  JOB_STATUS_EXAMPLE = """\