anyscale 0.26.16__py3-none-any.whl → 0.26.17__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.
- anyscale/anyscale-cloud-setup-gcp.yaml +2 -0
- anyscale/client/README.md +7 -0
- anyscale/client/openapi_client/__init__.py +5 -0
- anyscale/client/openapi_client/api/default_api.py +248 -0
- anyscale/client/openapi_client/models/__init__.py +5 -0
- anyscale/client/openapi_client/models/i_know_response.py +174 -0
- anyscale/client/openapi_client/models/i_know_time_series_event.py +148 -0
- anyscale/client/openapi_client/models/job_report.py +199 -0
- anyscale/client/openapi_client/models/job_with_report.py +254 -0
- anyscale/client/openapi_client/models/jobwithreport_list_response.py +147 -0
- anyscale/commands/cloud_commands.py +43 -0
- anyscale/controllers/cloud_controller.py +144 -1
- anyscale/job/_private/job_sdk.py +22 -24
- anyscale/version.py +1 -1
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.dist-info}/METADATA +1 -1
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.dist-info}/RECORD +21 -16
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.dist-info}/LICENSE +0 -0
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.dist-info}/NOTICE +0 -0
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.dist-info}/WHEEL +0 -0
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.dist-info}/entry_points.txt +0 -0
- {anyscale-0.26.16.dist-info → anyscale-0.26.17.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 JobwithreportListResponse(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[JobWithReport]',
|
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
|
+
"""JobwithreportListResponse - 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 JobwithreportListResponse. # noqa: E501
|
62
|
+
|
63
|
+
|
64
|
+
:return: The results of this JobwithreportListResponse. # noqa: E501
|
65
|
+
:rtype: list[JobWithReport]
|
66
|
+
"""
|
67
|
+
return self._results
|
68
|
+
|
69
|
+
@results.setter
|
70
|
+
def results(self, results):
|
71
|
+
"""Sets the results of this JobwithreportListResponse.
|
72
|
+
|
73
|
+
|
74
|
+
:param results: The results of this JobwithreportListResponse. # noqa: E501
|
75
|
+
:type: list[JobWithReport]
|
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 JobwithreportListResponse. # noqa: E501
|
85
|
+
|
86
|
+
|
87
|
+
:return: The metadata of this JobwithreportListResponse. # 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 JobwithreportListResponse.
|
95
|
+
|
96
|
+
|
97
|
+
:param metadata: The metadata of this JobwithreportListResponse. # 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, JobwithreportListResponse):
|
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, JobwithreportListResponse):
|
145
|
+
return True
|
146
|
+
|
147
|
+
return self.to_dict() != other.to_dict()
|
@@ -1166,3 +1166,46 @@ def get_default_cloud() -> None:
|
|
1166
1166
|
|
1167
1167
|
except ValueError as e:
|
1168
1168
|
log.error(f"Error retrieving default cloud: {e}")
|
1169
|
+
|
1170
|
+
|
1171
|
+
@cloud_cli.command(
|
1172
|
+
name="jobs-report",
|
1173
|
+
help=(
|
1174
|
+
"Generate a report of the jobs created in the last 7 days in HTML format. "
|
1175
|
+
"Shows unused CPU-hours, unused GPU-hours, and other data."
|
1176
|
+
),
|
1177
|
+
cls=AnyscaleCommand,
|
1178
|
+
hidden=True,
|
1179
|
+
)
|
1180
|
+
@click.option(
|
1181
|
+
"--cloud-id",
|
1182
|
+
help="ID of the cloud to generate a report on.",
|
1183
|
+
type=str,
|
1184
|
+
required=True,
|
1185
|
+
)
|
1186
|
+
@click.option(
|
1187
|
+
"--csv",
|
1188
|
+
help="Outputs the report in CSV format.",
|
1189
|
+
type=bool,
|
1190
|
+
required=False,
|
1191
|
+
default=False,
|
1192
|
+
)
|
1193
|
+
@click.option(
|
1194
|
+
"--out",
|
1195
|
+
help="Output file name for the report.",
|
1196
|
+
type=str,
|
1197
|
+
required=False,
|
1198
|
+
default="jobs_report.html",
|
1199
|
+
)
|
1200
|
+
def generate_jobs_report(cloud_id: str, csv: bool, out: str) -> None:
|
1201
|
+
"""
|
1202
|
+
Generate a report of the jobs created in the last 7 days in HTML format.
|
1203
|
+
Shows unused CPU-hours, unused GPU-hours, and other data.
|
1204
|
+
:param cloud_id: The ID of the cloud to generate a report on.
|
1205
|
+
:param csv: Outputs the report in CSV format.
|
1206
|
+
:param out: Output file name for the report.
|
1207
|
+
"""
|
1208
|
+
try:
|
1209
|
+
CloudController().generate_jobs_report(cloud_id, csv, out)
|
1210
|
+
except ValueError as e:
|
1211
|
+
log.error(f"Error generating jobs report: {e}")
|
@@ -3,6 +3,7 @@ Fetches data required and formats output for `anyscale cloud` commands.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
import copy
|
6
|
+
from datetime import datetime, timedelta
|
6
7
|
import json
|
7
8
|
from os import getenv
|
8
9
|
import pathlib
|
@@ -16,6 +17,7 @@ import boto3
|
|
16
17
|
from botocore.exceptions import ClientError, NoCredentialsError
|
17
18
|
import click
|
18
19
|
from click import Abort, ClickException
|
20
|
+
from rich.progress import Progress, track
|
19
21
|
import yaml
|
20
22
|
|
21
23
|
from anyscale import __version__ as anyscale_version
|
@@ -72,8 +74,12 @@ from anyscale.controllers.cloud_functional_verification_controller import (
|
|
72
74
|
CloudFunctionalVerificationType,
|
73
75
|
)
|
74
76
|
from anyscale.formatters import clouds_formatter
|
77
|
+
from anyscale.job._private.job_sdk import (
|
78
|
+
HA_JOB_STATE_TO_JOB_STATE,
|
79
|
+
TERMINAL_HA_JOB_STATES,
|
80
|
+
)
|
75
81
|
from anyscale.shared_anyscale_utils.aws import AwsRoleArn
|
76
|
-
from anyscale.shared_anyscale_utils.conf import ANYSCALE_ENV
|
82
|
+
from anyscale.shared_anyscale_utils.conf import ANYSCALE_ENV, ANYSCALE_HOST
|
77
83
|
from anyscale.util import ( # pylint:disable=private-import
|
78
84
|
_client,
|
79
85
|
_get_aws_efs_mount_target_ip,
|
@@ -3643,3 +3649,140 @@ class CloudController(BaseController):
|
|
3643
3649
|
)
|
3644
3650
|
|
3645
3651
|
### End of edit cloud ###
|
3652
|
+
|
3653
|
+
def generate_jobs_report(self, cloud_id: str, csv: bool, out_path: str) -> None:
|
3654
|
+
end_time = datetime.now()
|
3655
|
+
start_time = end_time - timedelta(days=7)
|
3656
|
+
|
3657
|
+
full_results = []
|
3658
|
+
paging_token: Optional[str] = None
|
3659
|
+
count_per_page = 20
|
3660
|
+
curr_page_results = None
|
3661
|
+
total_jobs: Optional[int] = None
|
3662
|
+
|
3663
|
+
with Progress() as progress:
|
3664
|
+
download_task = progress.add_task("Downloading jobs...", total=None)
|
3665
|
+
|
3666
|
+
while curr_page_results is None or len(curr_page_results) == count_per_page:
|
3667
|
+
response = self.api_client.list_job_reports_api_v2_job_reports_get(
|
3668
|
+
cloud_id,
|
3669
|
+
start_time=start_time,
|
3670
|
+
end_time=end_time,
|
3671
|
+
paging_token=paging_token,
|
3672
|
+
count=count_per_page,
|
3673
|
+
)
|
3674
|
+
curr_page_results = response.results
|
3675
|
+
full_results.extend(curr_page_results)
|
3676
|
+
paging_token = response.metadata.next_paging_token
|
3677
|
+
total_jobs = response.metadata.total
|
3678
|
+
progress.update(
|
3679
|
+
download_task, total=total_jobs, advance=len(curr_page_results)
|
3680
|
+
)
|
3681
|
+
|
3682
|
+
progress.update(download_task, completed=total_jobs)
|
3683
|
+
|
3684
|
+
if not full_results:
|
3685
|
+
self.log.info("No jobs found in the last 7 days.")
|
3686
|
+
return
|
3687
|
+
|
3688
|
+
filtered_results = [
|
3689
|
+
job
|
3690
|
+
for job in full_results
|
3691
|
+
if job.job_state in TERMINAL_HA_JOB_STATES and job.job_report is not None
|
3692
|
+
]
|
3693
|
+
filtered_results.sort(key=lambda x: x.created_at)
|
3694
|
+
|
3695
|
+
with open(out_path, "w") as out_file:
|
3696
|
+
if csv:
|
3697
|
+
out_file.write(
|
3698
|
+
"Job ID,Job name,Job state,Created at,Finished at,Duration,Unused CPU hours,Unused GPU hours,Max concurrent instances\n"
|
3699
|
+
)
|
3700
|
+
for job in track(filtered_results, description="Generating report..."):
|
3701
|
+
job_state = HA_JOB_STATE_TO_JOB_STATE[job.job_state]
|
3702
|
+
if job.finished_at is not None:
|
3703
|
+
duration = str(job.finished_at - job.created_at)
|
3704
|
+
finished_at = str(job.finished_at)
|
3705
|
+
else:
|
3706
|
+
duration = ""
|
3707
|
+
finished_at = ""
|
3708
|
+
unused_cpu_hours = job.job_report.unused_cpu_hours or ""
|
3709
|
+
unused_gpu_hours = job.job_report.unused_gpu_hours or ""
|
3710
|
+
max_instances_launched = job.job_report.max_instances_launched or ""
|
3711
|
+
|
3712
|
+
out_file.write(
|
3713
|
+
f"{job.job_id},{job.job_name},{job_state},{str(job.created_at)},{finished_at},{duration},{unused_cpu_hours},{unused_gpu_hours},{max_instances_launched}\n"
|
3714
|
+
)
|
3715
|
+
else:
|
3716
|
+
out_file.write(
|
3717
|
+
f"""
|
3718
|
+
<html>
|
3719
|
+
<head>
|
3720
|
+
<title>Jobs Report - {str(end_time)}</title>
|
3721
|
+
<style>
|
3722
|
+
table {{
|
3723
|
+
border: 1px solid black;
|
3724
|
+
border-collapse: collapse;
|
3725
|
+
}}
|
3726
|
+
th, td {{
|
3727
|
+
border: 1px solid black;
|
3728
|
+
border-collapse: collapse;
|
3729
|
+
padding: 8px;
|
3730
|
+
}}
|
3731
|
+
</style>
|
3732
|
+
</head>
|
3733
|
+
<body>
|
3734
|
+
<h1>Job Report - {str(end_time)}</h1>
|
3735
|
+
<p>Total jobs reported (finished jobs): {len(filtered_results)}</p>
|
3736
|
+
<p>Total jobs in the last 7 days: {total_jobs}</p>
|
3737
|
+
<table>
|
3738
|
+
<thead>
|
3739
|
+
<tr>
|
3740
|
+
<th>Job ID</th>
|
3741
|
+
<th>Job name</th>
|
3742
|
+
<th>Job state</th>
|
3743
|
+
<th>Created at</th>
|
3744
|
+
<th>Finished at</th>
|
3745
|
+
<th>Duration</th>
|
3746
|
+
<th>Unused CPU hours</th>
|
3747
|
+
<th>Unused GPU hours</th>
|
3748
|
+
<th>Max concurrent instances</th>
|
3749
|
+
</tr>
|
3750
|
+
</thead>
|
3751
|
+
<tbody>
|
3752
|
+
"""
|
3753
|
+
)
|
3754
|
+
|
3755
|
+
for job in track(filtered_results, description="Generating report..."):
|
3756
|
+
job_state = HA_JOB_STATE_TO_JOB_STATE[job.job_state]
|
3757
|
+
if job.finished_at is not None:
|
3758
|
+
duration = str(job.finished_at - job.created_at)
|
3759
|
+
finished_at = str(job.finished_at)
|
3760
|
+
else:
|
3761
|
+
duration = ""
|
3762
|
+
finished_at = ""
|
3763
|
+
unused_cpu_hours = job.job_report.unused_cpu_hours or ""
|
3764
|
+
unused_gpu_hours = job.job_report.unused_gpu_hours or ""
|
3765
|
+
max_instances_launched = job.job_report.max_instances_launched or ""
|
3766
|
+
|
3767
|
+
out_file.write(
|
3768
|
+
f"""
|
3769
|
+
<tr>
|
3770
|
+
<td><a target="_blank" rel="noreferrer" href="{ANYSCALE_HOST}/jobs/{job.job_id}">{job.job_id}</a></td>
|
3771
|
+
<td>{job.job_name}</td>
|
3772
|
+
<td>{job_state}</td>
|
3773
|
+
<td>{str(job.created_at)}</td>
|
3774
|
+
<td>{finished_at}</td>
|
3775
|
+
<td>{duration}</td>
|
3776
|
+
<td>{unused_cpu_hours}</td>
|
3777
|
+
<td>{unused_gpu_hours}</td>
|
3778
|
+
<td>{max_instances_launched}</td>
|
3779
|
+
</tr>
|
3780
|
+
"""
|
3781
|
+
)
|
3782
|
+
|
3783
|
+
out_file.write(
|
3784
|
+
"""
|
3785
|
+
</tbody>
|
3786
|
+
</table>
|
3787
|
+
"""
|
3788
|
+
)
|
anyscale/job/_private/job_sdk.py
CHANGED
@@ -33,6 +33,26 @@ from anyscale.utils.runtime_env import parse_requirements_file
|
|
33
33
|
|
34
34
|
logger = BlockLogger()
|
35
35
|
|
36
|
+
HA_JOB_STATE_TO_JOB_STATE = {
|
37
|
+
HaJobStates.UPDATING: JobState.RUNNING,
|
38
|
+
HaJobStates.RUNNING: JobState.RUNNING,
|
39
|
+
HaJobStates.RESTARTING: JobState.RUNNING,
|
40
|
+
HaJobStates.CLEANING_UP: JobState.RUNNING,
|
41
|
+
HaJobStates.PENDING: JobState.STARTING,
|
42
|
+
HaJobStates.AWAITING_CLUSTER_START: JobState.STARTING,
|
43
|
+
HaJobStates.SUCCESS: JobState.SUCCEEDED,
|
44
|
+
HaJobStates.ERRORED: JobState.FAILED,
|
45
|
+
HaJobStates.TERMINATED: JobState.FAILED,
|
46
|
+
HaJobStates.BROKEN: JobState.FAILED,
|
47
|
+
HaJobStates.OUT_OF_RETRIES: JobState.FAILED,
|
48
|
+
}
|
49
|
+
|
50
|
+
TERMINAL_HA_JOB_STATES = [
|
51
|
+
HaJobStates.SUCCESS,
|
52
|
+
HaJobStates.TERMINATED,
|
53
|
+
HaJobStates.OUT_OF_RETRIES,
|
54
|
+
]
|
55
|
+
|
36
56
|
|
37
57
|
class PrivateJobSDK(WorkloadSDK):
|
38
58
|
_POLLING_INTERVAL_SECONDS = 10.0
|
@@ -215,20 +235,6 @@ class PrivateJobSDK(WorkloadSDK):
|
|
215
235
|
)
|
216
236
|
return job.id
|
217
237
|
|
218
|
-
_HA_JOB_STATE_TO_JOB_STATE = {
|
219
|
-
HaJobStates.UPDATING: JobState.RUNNING,
|
220
|
-
HaJobStates.RUNNING: JobState.RUNNING,
|
221
|
-
HaJobStates.RESTARTING: JobState.RUNNING,
|
222
|
-
HaJobStates.CLEANING_UP: JobState.RUNNING,
|
223
|
-
HaJobStates.PENDING: JobState.STARTING,
|
224
|
-
HaJobStates.AWAITING_CLUSTER_START: JobState.STARTING,
|
225
|
-
HaJobStates.SUCCESS: JobState.SUCCEEDED,
|
226
|
-
HaJobStates.ERRORED: JobState.FAILED,
|
227
|
-
HaJobStates.TERMINATED: JobState.FAILED,
|
228
|
-
HaJobStates.BROKEN: JobState.FAILED,
|
229
|
-
HaJobStates.OUT_OF_RETRIES: JobState.FAILED,
|
230
|
-
}
|
231
|
-
|
232
238
|
_BACKEND_JOB_STATUS_TO_JOB_RUN_STATE = {
|
233
239
|
BackendJobStatus.RUNNING: JobRunState.RUNNING,
|
234
240
|
BackendJobStatus.COMPLETED: JobRunState.SUCCEEDED,
|
@@ -241,9 +247,7 @@ class PrivateJobSDK(WorkloadSDK):
|
|
241
247
|
|
242
248
|
def _job_state_from_job_model(self, model: ProductionJob) -> JobState:
|
243
249
|
ha_state = model.state.current_state if model.state else None
|
244
|
-
return cast(
|
245
|
-
JobState, self._HA_JOB_STATE_TO_JOB_STATE.get(ha_state, JobState.UNKNOWN)
|
246
|
-
)
|
250
|
+
return cast(JobState, HA_JOB_STATE_TO_JOB_STATE.get(ha_state, JobState.UNKNOWN))
|
247
251
|
|
248
252
|
def _job_run_model_to_job_run_status(self, run: Job) -> JobRunStatus:
|
249
253
|
state = self._BACKEND_JOB_STATUS_TO_JOB_RUN_STATE.get(
|
@@ -358,12 +362,6 @@ class PrivateJobSDK(WorkloadSDK):
|
|
358
362
|
self.logger.info(f"Marked job '{job_model.name}' for termination")
|
359
363
|
return job_model.id
|
360
364
|
|
361
|
-
_TERMINAL_HA_JOB_STATES = [
|
362
|
-
HaJobStates.SUCCESS,
|
363
|
-
HaJobStates.TERMINATED,
|
364
|
-
HaJobStates.OUT_OF_RETRIES,
|
365
|
-
]
|
366
|
-
|
367
365
|
def archive(
|
368
366
|
self,
|
369
367
|
*,
|
@@ -377,7 +375,7 @@ class PrivateJobSDK(WorkloadSDK):
|
|
377
375
|
)
|
378
376
|
|
379
377
|
ha_state = job_model.state.current_state if job_model.state else None
|
380
|
-
if ha_state not in
|
378
|
+
if ha_state not in TERMINAL_HA_JOB_STATES:
|
381
379
|
raise RuntimeError(
|
382
380
|
f"Job with ID '{job_model.id}' has not reached a terminal state and cannot be archived."
|
383
381
|
)
|
anyscale/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.26.
|
1
|
+
__version__ = "0.26.17"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
anyscale/__init__.py,sha256=YtAe4ql_2J7SnRMMvJzx1Fdw2ZjtC2VLfZFPSDMdLxA,8595
|
2
2
|
anyscale/anyscale-cloud-setup-gcp-oa.yaml,sha256=varT3AFGxDy7V8o3_zCwUyoi22MiDmZovfpvkbkyeAU,2715
|
3
|
-
anyscale/anyscale-cloud-setup-gcp.yaml,sha256=
|
3
|
+
anyscale/anyscale-cloud-setup-gcp.yaml,sha256=b9fKDG8syJuoZJOAr4LZdLGto3sDDil9EOoboXWC9UE,4011
|
4
4
|
anyscale/anyscale-cloud-setup-oa.yaml,sha256=MMfjT2UCNQS43I3mGOMoSq1cq1dufxtnXU9Zy260TK8,3192
|
5
5
|
anyscale/anyscale-cloud-setup.yaml,sha256=PoAPDoVbnWLayNGjEgLYJd1RoyopYhReVCwHoEUjuMM,8937
|
6
6
|
anyscale/anyscale_schema.json,sha256=pQtFMvsYLZF39HcfhFV-ze15W9oELuWHz16PED7sMSQ,193
|
@@ -27,7 +27,7 @@ anyscale/scripts.py,sha256=HR6JOCBVBXMVi1Kz5uJmjsh73t2l1W8UbUge83ofnqk,5474
|
|
27
27
|
anyscale/snapshot.py,sha256=UGJT5C1s_4xmQxjWODK5DFpGxHRBX5jOCdSCqXESH8E,1685
|
28
28
|
anyscale/tables.py,sha256=TV4F2uLnwehvbkAfaP7iuLlT2wLIo6ORH2LVdRGXW5g,2840
|
29
29
|
anyscale/util.py,sha256=Tqb9qWSxQI_PBJVSDxm9RWqFyGJFClgZDPByhb_fhU8,40813
|
30
|
-
anyscale/version.py,sha256=
|
30
|
+
anyscale/version.py,sha256=OWXB5PQB1lPtcMILip9aMkE-cXhBESEz6ArfUUlCX8g,24
|
31
31
|
anyscale/workspace_utils.py,sha256=OViE88CnIF5ruVxd3kazQ0Mf2BxqtMq6wx-XQ5A2cp8,1204
|
32
32
|
anyscale/_private/anyscale_client/README.md,sha256=gk8obk7kqg6VWoUHcqDMwJULh35tYKEZFC0UF_dixGA,718
|
33
33
|
anyscale/_private/anyscale_client/__init__.py,sha256=807Blx3RHQeS8BmKZcsOQQ4dYoKlCnpm6Bdsif2CrHg,337
|
@@ -105,7 +105,7 @@ anyscale/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
105
105
|
anyscale/background/job_runner.py,sha256=LTuv9JOahyv6C9i7DLQAONgQF6--FfYZEmJrKy-sUG8,2687
|
106
106
|
anyscale/client/.gitignore,sha256=JZyvYEtT2DCSK9V5Joi6lQofhMik4PXiJRCWsg7SvqI,807
|
107
107
|
anyscale/client/.openapi-generator-ignore,sha256=pu2PTide7pJtJ-DFLzDy0cTYQJRlrB-8RRH3zGLeUds,1040
|
108
|
-
anyscale/client/README.md,sha256=
|
108
|
+
anyscale/client/README.md,sha256=NZRw9OwsTRkN0sEcB4AYqY0rsYQSyZMzsKrt_FYvFBQ,119345
|
109
109
|
anyscale/client/git_push.sh,sha256=EDCZOTTiLxbtPHmiU63qC99rGH67B7dhdPZdNUKivF0,1827
|
110
110
|
anyscale/client/requirements.txt,sha256=dkVKYUStC5h_g_87SH7pRdhXCj7ySozAJMGAFEzGgFc,126
|
111
111
|
anyscale/client/setup.cfg,sha256=l7bdKSIedeBhhoDtupsBwx1xPrlBf2yYeTH7a8kMga4,28
|
@@ -113,14 +113,14 @@ anyscale/client/setup.py,sha256=tSxqw1kAL1B9adnrnOarjnQfSbwGmnTr_kg8ZXhlm5A,1109
|
|
113
113
|
anyscale/client/test-requirements.txt,sha256=sTjmDTj5W9fh1ZAeo8UT2EBdeGDBNttj_PHiPBXg1D4,111
|
114
114
|
anyscale/client/tox.ini,sha256=M6L3UmvAdvU65LsoAF-Oi7oRjwZlCJZn8I7ofdXn5Ok,156
|
115
115
|
anyscale/client/.openapi-generator/VERSION,sha256=J0RzX-4u4jfin1kviKtmncjUePyjHm2kyvmkobOrt_E,5
|
116
|
-
anyscale/client/openapi_client/__init__.py,sha256=
|
116
|
+
anyscale/client/openapi_client/__init__.py,sha256=g5yOLWPZG2Ej-mkVr8KT3CKJ9se2Iu89Ap_gTyn1Yjc,51307
|
117
117
|
anyscale/client/openapi_client/api_client.py,sha256=d8Un6j2Ny2vlS2qBXPVFj6_ql0k36DFahpWt_28TfCk,25563
|
118
118
|
anyscale/client/openapi_client/configuration.py,sha256=Dd5XrlHwv-wxnf0C35PG_-HBQoY3Yaz6hKrmkZz-m0E,12363
|
119
119
|
anyscale/client/openapi_client/exceptions.py,sha256=3egwsXQG2j_vARbqgBxUO1xSltAhpfiHTYVP7VXTvU0,3792
|
120
120
|
anyscale/client/openapi_client/rest.py,sha256=Ehj37v7GHW6SXV067Hze5HE42ayKaGi6a6ZlkR7u3Lg,12501
|
121
121
|
anyscale/client/openapi_client/api/__init__.py,sha256=i8u7BI2xX1GrXTL3hN0pKpYIlnT-D_uDxH2ElOfYG1I,141
|
122
|
-
anyscale/client/openapi_client/api/default_api.py,sha256=
|
123
|
-
anyscale/client/openapi_client/models/__init__.py,sha256
|
122
|
+
anyscale/client/openapi_client/api/default_api.py,sha256=nd9jzHg7cskIcYJN-gj2ejRSRFKDhHNlC9v7Ru7jfkI,1933658
|
123
|
+
anyscale/client/openapi_client/models/__init__.py,sha256=ajtzyW9qthIaOQSDqng9ND0Pca7wMvrfDJlgDhv2YYk,50817
|
124
124
|
anyscale/client/openapi_client/models/access_config.py,sha256=b2mA0qtuTA5PFbp6C61Jc_T2zUMaojM1v32IhZo0MfY,3648
|
125
125
|
anyscale/client/openapi_client/models/actor_status.py,sha256=6xyX_aIqURj2raBdY9DmBxsdDACFrqqYvElGiM6YG2E,2813
|
126
126
|
anyscale/client/openapi_client/models/admin_create_user.py,sha256=9DPr8D0lKgoEZ3Z2kGsAd8L7ocFCiP6woOGLVs8SRb8,7251
|
@@ -403,6 +403,8 @@ anyscale/client/openapi_client/models/head_ip.py,sha256=9tA-NZRKeMS_ZbVivHY8-sYi
|
|
403
403
|
anyscale/client/openapi_client/models/headip_response.py,sha256=IDibJ0klCJa8XCme3z97sN562tQnBOfjugCjNSgXeGc,3484
|
404
404
|
anyscale/client/openapi_client/models/http_protocol_config.py,sha256=Jx7OQY7paI8_QM1KuCnBRpSMoExMRSIvN9Tfgc7sUl0,4203
|
405
405
|
anyscale/client/openapi_client/models/http_validation_error.py,sha256=KsPu9vOlvrO888Ht7vNclZjbghvL_VCzCgAEowWIK10,3413
|
406
|
+
anyscale/client/openapi_client/models/i_know_response.py,sha256=zc8ksZIsLnO7QsUiDuXMZAVEOVSXRROiWsHTx5271AA,5229
|
407
|
+
anyscale/client/openapi_client/models/i_know_time_series_event.py,sha256=N3oYWEzC6DLpV0mFnc4wWEglkJf6C3Zi56yjUYKoKrs,4370
|
406
408
|
anyscale/client/openapi_client/models/idle_termination_status.py,sha256=gKV6Vhsk6qX9a0VpgkUTubyHrfVxAiiqvvz0YiGd3DY,3045
|
407
409
|
anyscale/client/openapi_client/models/instance_usage_budget.py,sha256=bmXndzjWt3FbpZYuPTFs_KuLy3JiQVJpF4CTuXIs3yk,18163
|
408
410
|
anyscale/client/openapi_client/models/instance_usage_budget_evaluation_period.py,sha256=CsNpLq0wAHqA47kDN-zAMPehDMvmRoCnqnaujs_P5RA,2918
|
@@ -423,10 +425,13 @@ anyscale/client/openapi_client/models/job_queue_execution_mode.py,sha256=5G2g8z_
|
|
423
425
|
anyscale/client/openapi_client/models/job_queue_spec.py,sha256=7s4kjatMjuFtYJd8trZVW1lEsQ3SdOFsVbppZfdOAvA,9693
|
424
426
|
anyscale/client/openapi_client/models/job_queue_state.py,sha256=5Ejli6rOUioLQj5EbABn02xPSwsBMgiFa3FW2WbCrp4,2830
|
425
427
|
anyscale/client/openapi_client/models/job_queues_query.py,sha256=eJ11_nKrpAm-6038VDRFraIB-mr8DPOvJYJ8Peg9ZCA,7693
|
428
|
+
anyscale/client/openapi_client/models/job_report.py,sha256=B1TFEjlPQ46J8BCDFSr7g7PHh5nkxNRMRKxrMwZm8dQ,5982
|
426
429
|
anyscale/client/openapi_client/models/job_run_type.py,sha256=S3eoraHzgnpxGysw3Sh24ZinKZYKWqgNWfO5oQg_p8o,2890
|
427
430
|
anyscale/client/openapi_client/models/job_state_log_level_types.py,sha256=FCBUP-XKYXD4NsyW2_dBOhXNGKrDhEEF7s1rALRuFgE,2853
|
431
|
+
anyscale/client/openapi_client/models/job_with_report.py,sha256=pkLUtF2d8RF3VNp_6RiiWpH0e9BYrZ2BRY9C50xi_6Y,7481
|
428
432
|
anyscale/client/openapi_client/models/jobqueue_response.py,sha256=cwvt1GkB2cKOWohhMukTazJGYmat0zBV4b2dvpqixkQ,3506
|
429
433
|
anyscale/client/openapi_client/models/jobs_sort_field.py,sha256=G5NGcfckLltrUMLhIJsgOjtu9ckBkjyXqOqvb__GNvc,2929
|
434
|
+
anyscale/client/openapi_client/models/jobwithreport_list_response.py,sha256=dOVXB8NVOhgkGt39AXgwDYykEG6RLWvhl3h6aPtRwf8,4392
|
430
435
|
anyscale/client/openapi_client/models/json_patch_operation.py,sha256=oHgT9WKmcuAp7fkkvFl0nPhoxdQVmPoxPfF82ivf73k,5419
|
431
436
|
anyscale/client/openapi_client/models/kubernetes_manager_registration_request.py,sha256=CaAwpENkOAjpRNPoJzd2mGuvTOm5l4ZtJFQkG0P4VPI,4039
|
432
437
|
anyscale/client/openapi_client/models/kubernetes_manager_registration_response.py,sha256=70j5F-CY429Z2yjCm7LRh4aebSwNV05L8pi087D1Uwc,4049
|
@@ -734,7 +739,7 @@ anyscale/cloud/_private/cloud_sdk.py,sha256=xCoAVomOfo75YWZzHMm9TDeL8UUx79Gn1DeE
|
|
734
739
|
anyscale/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
735
740
|
anyscale/commands/aggregated_instance_usage_commands.py,sha256=TRP1X3hdIWbKg9V20VtazlDXsYAeV--M0DH3-Z5tnj4,2293
|
736
741
|
anyscale/commands/auth_commands.py,sha256=X1g6Yu9kqgPb4HLODlZTYEk8G5AVLeyizPIgagWx-p0,1026
|
737
|
-
anyscale/commands/cloud_commands.py,sha256=
|
742
|
+
anyscale/commands/cloud_commands.py,sha256=RHEqGRRg7j2VeW9tCSQLzYEE4xVGQmSJmFFnBZWd90Q,42325
|
738
743
|
anyscale/commands/cloud_commands_util.py,sha256=d-6TSZ_syrGkZ3Fc1uRX6jG4dqYMebNkBNpYLojOJFg,247
|
739
744
|
anyscale/commands/cluster_commands.py,sha256=taNcffyFfqJ1MgOQd0cz9kzRXWFTdp-wfLPM4l_2tBc,13487
|
740
745
|
anyscale/commands/cluster_env_commands.py,sha256=KNWylyE8Ew1sDi7yu2Tp4RLcRu2_KJJJIzVGRyPflJo,3899
|
@@ -780,7 +785,7 @@ anyscale/connect_utils/start_interactive_session.py,sha256=DbuIK2wuWofmbwJ9MLbsb
|
|
780
785
|
anyscale/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
781
786
|
anyscale/controllers/auth_controller.py,sha256=hDY2sPvUP8pvh8PnlDYH5rCHjQes2v3b_KBVjMbrzeE,5127
|
782
787
|
anyscale/controllers/base_controller.py,sha256=1QFJoScFUV7YTzpKarhwPOc1SvI-xqX3TZmwxKonW6I,1998
|
783
|
-
anyscale/controllers/cloud_controller.py,sha256=
|
788
|
+
anyscale/controllers/cloud_controller.py,sha256=MKhyhN2_V8n4HI-MQAnfZ4UaVH0ROnb_ke4Gv0KLLxA,162749
|
784
789
|
anyscale/controllers/cloud_functional_verification_controller.py,sha256=bmRmHS89Pr4m9CxCRLCHiB1FeMOTplnxzo-LdX_uFVQ,33400
|
785
790
|
anyscale/controllers/cluster_controller.py,sha256=Sb5wVjrjpycg5iqmENAVtZ4iy9Kr6kM97_ck-KH85LM,28745
|
786
791
|
anyscale/controllers/cluster_env_controller.py,sha256=JalGzcmnFtMHefYL5U6ijMY3nX6W6BsMEfZSMtgBvtU,8048
|
@@ -809,7 +814,7 @@ anyscale/image/_private/image_sdk.py,sha256=c6ONvbcq1bUP0YbfIMw8QLRFfVbCiiTwULQA
|
|
809
814
|
anyscale/job/__init__.py,sha256=_5Nb3a11F4oAHXirTgx5vDdgpVzJ62FdGFmADxxvcPE,5051
|
810
815
|
anyscale/job/commands.py,sha256=je0WDrd3mxt3iuoGqKvE_2TuMWsffXXM_IQ5SRjUKnU,8524
|
811
816
|
anyscale/job/models.py,sha256=n-tVkvIRznes0QEwHn75i9u_LZ8whisTaN4iltz5JFs,17859
|
812
|
-
anyscale/job/_private/job_sdk.py,sha256=
|
817
|
+
anyscale/job/_private/job_sdk.py,sha256=6kQ5bDggA3f1MXcrlXAGrFRA7WAOcvKDVi8FXwq7z-E,18871
|
813
818
|
anyscale/llm/__init__.py,sha256=lRp09PWR2gcJF_1Y9ieIIQWirijP5p_l3AQkTir2iN4,76
|
814
819
|
anyscale/llm/sdk.py,sha256=VmA03eegizqikWR3eH2jYNiA8-FY3Qq1GGtvdkgU470,733
|
815
820
|
anyscale/llm/dataset/__init__.py,sha256=J-z8d7Bdvjf_5OOjcHrFQrXnCxbdcvzUBcyapawIuHg,131
|
@@ -1106,10 +1111,10 @@ anyscale/workspace/__init__.py,sha256=Innbm5ZhCyADEVBiYSo_vbpKwUNcMzVSAfxIGKOYe6
|
|
1106
1111
|
anyscale/workspace/commands.py,sha256=b1sqNseoPj-1VXznqQOLe0V_a663bOTvJX-TaOMJa1Y,14590
|
1107
1112
|
anyscale/workspace/models.py,sha256=Ey67KqxdslS51yK7xetbRaFjE8sURAArpf-F38r3cUU,9760
|
1108
1113
|
anyscale/workspace/_private/workspace_sdk.py,sha256=l2baX2BtLX90ZJU3XZpwiDK_xM3SCjvjNv-pr6yUK2o,26938
|
1109
|
-
anyscale-0.26.
|
1110
|
-
anyscale-0.26.
|
1111
|
-
anyscale-0.26.
|
1112
|
-
anyscale-0.26.
|
1113
|
-
anyscale-0.26.
|
1114
|
-
anyscale-0.26.
|
1115
|
-
anyscale-0.26.
|
1114
|
+
anyscale-0.26.17.dist-info/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
|
1115
|
+
anyscale-0.26.17.dist-info/METADATA,sha256=y6BWr9IEs4mi0Uz4En_fhYU2wg2rL26ofUXnnsb8Deg,3160
|
1116
|
+
anyscale-0.26.17.dist-info/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
|
1117
|
+
anyscale-0.26.17.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
1118
|
+
anyscale-0.26.17.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
|
1119
|
+
anyscale-0.26.17.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
|
1120
|
+
anyscale-0.26.17.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|