skypilot-nightly 1.0.0.dev20250129__py3-none-any.whl → 1.0.0.dev20250131__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.
- sky/__init__.py +2 -2
- sky/cli.py +58 -26
- sky/jobs/core.py +25 -18
- sky/serve/core.py +24 -19
- sky/serve/replica_managers.py +4 -6
- sky/serve/service_spec.py +18 -0
- sky/skylet/constants.py +1 -1
- sky/utils/controller_utils.py +23 -7
- sky/utils/schemas.py +3 -0
- {skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/RECORD +15 -15
- {skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/top_level.txt +0 -0
sky/__init__.py
CHANGED
@@ -5,7 +5,7 @@ from typing import Optional
|
|
5
5
|
import urllib.request
|
6
6
|
|
7
7
|
# Replaced with the current commit when building the wheels.
|
8
|
-
_SKYPILOT_COMMIT_SHA = '
|
8
|
+
_SKYPILOT_COMMIT_SHA = '706e7c0f7cacdcc7dcf94799863767a0d4ae71c4'
|
9
9
|
|
10
10
|
|
11
11
|
def _get_git_commit():
|
@@ -35,7 +35,7 @@ def _get_git_commit():
|
|
35
35
|
|
36
36
|
|
37
37
|
__commit__ = _get_git_commit()
|
38
|
-
__version__ = '1.0.0.
|
38
|
+
__version__ = '1.0.0.dev20250131'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
sky/cli.py
CHANGED
@@ -4059,32 +4059,64 @@ def _generate_task_with_service(
|
|
4059
4059
|
with ux_utils.print_exception_no_traceback():
|
4060
4060
|
raise ValueError('Service section not found in the YAML file. '
|
4061
4061
|
'To fix, add a valid `service` field.')
|
4062
|
-
|
4063
|
-
|
4064
|
-
|
4065
|
-
|
4066
|
-
|
4067
|
-
|
4068
|
-
|
4069
|
-
|
4070
|
-
|
4071
|
-
|
4072
|
-
|
4073
|
-
|
4074
|
-
|
4075
|
-
|
4076
|
-
|
4077
|
-
|
4078
|
-
|
4079
|
-
|
4080
|
-
|
4081
|
-
|
4082
|
-
|
4083
|
-
|
4084
|
-
|
4085
|
-
|
4086
|
-
|
4087
|
-
|
4062
|
+
|
4063
|
+
# NOTE(yi): we only allow one service port now.
|
4064
|
+
service_port: Optional[int] = int(
|
4065
|
+
task.service.ports) if task.service.ports is not None else None
|
4066
|
+
if service_port is None:
|
4067
|
+
for requested_resources in list(task.resources):
|
4068
|
+
if requested_resources.ports is None:
|
4069
|
+
with ux_utils.print_exception_no_traceback():
|
4070
|
+
raise ValueError(
|
4071
|
+
'Must specify at least one ports in resources. Each '
|
4072
|
+
'replica will use the port specified as application '
|
4073
|
+
'ingress port if only one port is specified in the '
|
4074
|
+
'replica resources. If there are multiple ports opened '
|
4075
|
+
'in the replica, please set the `service.ports` field '
|
4076
|
+
'in the service config.')
|
4077
|
+
requested_ports = list(
|
4078
|
+
resources_utils.port_ranges_to_set(requested_resources.ports))
|
4079
|
+
if len(requested_ports) > 1:
|
4080
|
+
with ux_utils.print_exception_no_traceback():
|
4081
|
+
raise ValueError(
|
4082
|
+
'Multiple ports specified in resources. Please '
|
4083
|
+
'specify the main port in the `service.ports` field.')
|
4084
|
+
# We request all the replicas using the same port for now, but it
|
4085
|
+
# should be fine to allow different replicas to use different ports
|
4086
|
+
# in the future.
|
4087
|
+
resource_port = requested_ports[0]
|
4088
|
+
if service_port is None:
|
4089
|
+
service_port = resource_port
|
4090
|
+
if service_port != resource_port:
|
4091
|
+
with ux_utils.print_exception_no_traceback():
|
4092
|
+
raise ValueError(
|
4093
|
+
f'Got multiple ports: {service_port} and '
|
4094
|
+
f'{resource_port} in different resources. '
|
4095
|
+
'Please specify the same port in all replicas, or '
|
4096
|
+
'explicitly set the service port in the '
|
4097
|
+
'`service.ports` section.')
|
4098
|
+
assert service_port is not None
|
4099
|
+
task.service.set_ports(str(service_port))
|
4100
|
+
else:
|
4101
|
+
for requested_resources in list(task.resources):
|
4102
|
+
if requested_resources.ports is None:
|
4103
|
+
with ux_utils.print_exception_no_traceback():
|
4104
|
+
raise ValueError(
|
4105
|
+
'Must specify at least one ports in every replica '
|
4106
|
+
'resources.')
|
4107
|
+
ports_set = resources_utils.port_ranges_to_set(
|
4108
|
+
requested_resources.ports)
|
4109
|
+
if service_port not in ports_set:
|
4110
|
+
with ux_utils.print_exception_no_traceback():
|
4111
|
+
# TODO(tian): Automatically infer resource port from
|
4112
|
+
# service port if none of them is specified in the
|
4113
|
+
# replica resources.
|
4114
|
+
raise ValueError(
|
4115
|
+
f'The service port {service_port} specified in the '
|
4116
|
+
'service section is not found in some resources. '
|
4117
|
+
'Please check if the service port is correct or add '
|
4118
|
+
'the service port to replica resources.')
|
4119
|
+
|
4088
4120
|
return task
|
4089
4121
|
|
4090
4122
|
|
sky/jobs/core.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
import os
|
3
3
|
import tempfile
|
4
4
|
import typing
|
5
|
-
from typing import Any, Dict, List, Optional, Union
|
5
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
6
6
|
import uuid
|
7
7
|
|
8
8
|
import colorama
|
@@ -37,13 +37,13 @@ if typing.TYPE_CHECKING:
|
|
37
37
|
@timeline.event
|
38
38
|
@usage_lib.entrypoint
|
39
39
|
def launch(
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
) ->
|
40
|
+
task: Union['sky.Task', 'sky.Dag'],
|
41
|
+
name: Optional[str] = None,
|
42
|
+
stream_logs: bool = True,
|
43
|
+
detach_run: bool = False,
|
44
|
+
# TODO(cooperc): remove fast arg before 0.8.0
|
45
|
+
fast: bool = True, # pylint: disable=unused-argument for compatibility
|
46
|
+
) -> Tuple[Optional[int], Optional[backends.ResourceHandle]]:
|
47
47
|
# NOTE(dev): Keep the docstring consistent between the Python API and CLI.
|
48
48
|
"""Launch a managed job.
|
49
49
|
|
@@ -61,6 +61,13 @@ def launch(
|
|
61
61
|
ValueError: cluster does not exist. Or, the entrypoint is not a valid
|
62
62
|
chain dag.
|
63
63
|
sky.exceptions.NotSupportedError: the feature is not supported.
|
64
|
+
|
65
|
+
Returns:
|
66
|
+
job_id: Optional[int]; the job ID of the submitted job. None if the
|
67
|
+
backend is not CloudVmRayBackend, or no job is submitted to
|
68
|
+
the cluster.
|
69
|
+
handle: Optional[backends.ResourceHandle]; handle to the controller VM.
|
70
|
+
None if dryrun.
|
64
71
|
"""
|
65
72
|
entrypoint = task
|
66
73
|
dag_uuid = str(uuid.uuid4().hex[:4])
|
@@ -94,7 +101,7 @@ def launch(
|
|
94
101
|
ux_utils.spinner_message('Initializing managed job')):
|
95
102
|
for task_ in dag.tasks:
|
96
103
|
controller_utils.maybe_translate_local_file_mounts_and_sync_up(
|
97
|
-
task_,
|
104
|
+
task_, task_type='jobs')
|
98
105
|
|
99
106
|
with tempfile.NamedTemporaryFile(prefix=f'managed-dag-{dag.name}-',
|
100
107
|
mode='w') as f:
|
@@ -140,15 +147,15 @@ def launch(
|
|
140
147
|
f'{colorama.Fore.YELLOW}'
|
141
148
|
f'Launching managed job {dag.name!r} from jobs controller...'
|
142
149
|
f'{colorama.Style.RESET_ALL}')
|
143
|
-
sky.launch(task=controller_task,
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
150
|
+
return sky.launch(task=controller_task,
|
151
|
+
stream_logs=stream_logs,
|
152
|
+
cluster_name=controller_name,
|
153
|
+
detach_run=detach_run,
|
154
|
+
idle_minutes_to_autostop=skylet_constants.
|
155
|
+
CONTROLLER_IDLE_MINUTES_TO_AUTOSTOP,
|
156
|
+
retry_until_up=True,
|
157
|
+
fast=True,
|
158
|
+
_disable_controller_check=True)
|
152
159
|
|
153
160
|
|
154
161
|
def queue_from_kubernetes_pod(
|
sky/serve/core.py
CHANGED
@@ -68,7 +68,8 @@ def _validate_service_task(task: 'sky.Task') -> None:
|
|
68
68
|
'SkyServe will replenish preempted spot '
|
69
69
|
f'with {policy_description} instances.')
|
70
70
|
|
71
|
-
replica_ingress_port: Optional[int] =
|
71
|
+
replica_ingress_port: Optional[int] = int(
|
72
|
+
task.service.ports) if (task.service.ports is not None) else None
|
72
73
|
for requested_resources in task.resources:
|
73
74
|
if (task.service.use_ondemand_fallback and
|
74
75
|
not requested_resources.use_spot):
|
@@ -77,22 +78,26 @@ def _validate_service_task(task: 'sky.Task') -> None:
|
|
77
78
|
'`use_ondemand_fallback` is only supported '
|
78
79
|
'for spot resources. Please explicitly specify '
|
79
80
|
'`use_spot: true` in resources for on-demand fallback.')
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
81
|
+
if task.service.ports is None:
|
82
|
+
requested_ports = list(
|
83
|
+
resources_utils.port_ranges_to_set(requested_resources.ports))
|
84
|
+
if len(requested_ports) != 1:
|
85
|
+
with ux_utils.print_exception_no_traceback():
|
86
|
+
raise ValueError(
|
87
|
+
'To open multiple ports on the replica, please set the '
|
88
|
+
'`service.ports` field to specify a main service port. '
|
89
|
+
'Must only specify one port in resources otherwise. '
|
90
|
+
'Each replica will use the port specified as '
|
91
|
+
'application ingress port.')
|
92
|
+
service_port = requested_ports[0]
|
93
|
+
if replica_ingress_port is None:
|
94
|
+
replica_ingress_port = service_port
|
95
|
+
elif service_port != replica_ingress_port:
|
96
|
+
with ux_utils.print_exception_no_traceback():
|
97
|
+
raise ValueError(
|
98
|
+
f'Got multiple ports: {service_port} and '
|
99
|
+
f'{replica_ingress_port} in different resources. '
|
100
|
+
'Please specify the same port instead.')
|
96
101
|
|
97
102
|
|
98
103
|
def _rewrite_tls_credential_paths_and_get_tls_env_vars(
|
@@ -170,7 +175,7 @@ def up(
|
|
170
175
|
with rich_utils.safe_status(
|
171
176
|
ux_utils.spinner_message('Initializing service')):
|
172
177
|
controller_utils.maybe_translate_local_file_mounts_and_sync_up(
|
173
|
-
task,
|
178
|
+
task, task_type='serve')
|
174
179
|
|
175
180
|
tls_template_vars = _rewrite_tls_credential_paths_and_get_tls_env_vars(
|
176
181
|
service_name, task)
|
@@ -453,7 +458,7 @@ def update(
|
|
453
458
|
with rich_utils.safe_status(
|
454
459
|
ux_utils.spinner_message('Initializing service')):
|
455
460
|
controller_utils.maybe_translate_local_file_mounts_and_sync_up(
|
456
|
-
task,
|
461
|
+
task, task_type='serve')
|
457
462
|
|
458
463
|
code = serve_utils.ServeCodeGen.add_version(service_name)
|
459
464
|
returncode, version_string_payload, stderr = backend.run_on_head(
|
sky/serve/replica_managers.py
CHANGED
@@ -171,13 +171,11 @@ def terminate_cluster(cluster_name: str,
|
|
171
171
|
def _get_resources_ports(task_yaml: str) -> str:
|
172
172
|
"""Get the resources ports used by the task."""
|
173
173
|
task = sky.Task.from_yaml(task_yaml)
|
174
|
-
# Already checked all ports are
|
174
|
+
# Already checked all ports are valid in sky.serve.core.up
|
175
175
|
assert task.resources, task
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
assert task_resources.ports is not None
|
180
|
-
return task_resources.ports[0]
|
176
|
+
assert task.service is not None, task
|
177
|
+
assert task.service.ports is not None, task
|
178
|
+
return task.service.ports
|
181
179
|
|
182
180
|
|
183
181
|
def _should_use_spot(task_yaml: str,
|
sky/serve/service_spec.py
CHANGED
@@ -25,6 +25,7 @@ class SkyServiceSpec:
|
|
25
25
|
readiness_timeout_seconds: int,
|
26
26
|
min_replicas: int,
|
27
27
|
max_replicas: Optional[int] = None,
|
28
|
+
ports: Optional[str] = None,
|
28
29
|
target_qps_per_replica: Optional[float] = None,
|
29
30
|
post_data: Optional[Dict[str, Any]] = None,
|
30
31
|
tls_credential: Optional[serve_utils.TLSCredential] = None,
|
@@ -72,6 +73,7 @@ class SkyServiceSpec:
|
|
72
73
|
self._readiness_timeout_seconds: int = readiness_timeout_seconds
|
73
74
|
self._min_replicas: int = min_replicas
|
74
75
|
self._max_replicas: Optional[int] = max_replicas
|
76
|
+
self._ports: Optional[str] = ports
|
75
77
|
self._target_qps_per_replica: Optional[float] = target_qps_per_replica
|
76
78
|
self._post_data: Optional[Dict[str, Any]] = post_data
|
77
79
|
self._tls_credential: Optional[serve_utils.TLSCredential] = (
|
@@ -137,6 +139,14 @@ class SkyServiceSpec:
|
|
137
139
|
service_config['post_data'] = post_data
|
138
140
|
service_config['readiness_headers'] = readiness_headers
|
139
141
|
|
142
|
+
ports = config.get('ports', None)
|
143
|
+
if ports is not None:
|
144
|
+
assert isinstance(ports, int)
|
145
|
+
if not 1 <= ports <= 65535:
|
146
|
+
with ux_utils.print_exception_no_traceback():
|
147
|
+
raise ValueError('Port must be between 1 and 65535.')
|
148
|
+
service_config['ports'] = str(ports) if ports is not None else None
|
149
|
+
|
140
150
|
policy_section = config.get('replica_policy', None)
|
141
151
|
simplified_policy_section = config.get('replicas', None)
|
142
152
|
if policy_section is None or simplified_policy_section is not None:
|
@@ -235,6 +245,7 @@ class SkyServiceSpec:
|
|
235
245
|
self.downscale_delay_seconds)
|
236
246
|
add_if_not_none('load_balancing_policy', None,
|
237
247
|
self._load_balancing_policy)
|
248
|
+
add_if_not_none('ports', None, int(self.ports) if self.ports else None)
|
238
249
|
if self.tls_credential is not None:
|
239
250
|
add_if_not_none('tls', 'keyfile', self.tls_credential.keyfile)
|
240
251
|
add_if_not_none('tls', 'certfile', self.tls_credential.certfile)
|
@@ -282,6 +293,9 @@ class SkyServiceSpec:
|
|
282
293
|
f'replica{max_plural} (target QPS per replica: '
|
283
294
|
f'{self.target_qps_per_replica})')
|
284
295
|
|
296
|
+
def set_ports(self, ports: str) -> None:
|
297
|
+
self._ports = ports
|
298
|
+
|
285
299
|
def tls_str(self):
|
286
300
|
if self.tls_credential is None:
|
287
301
|
return 'No TLS Enabled'
|
@@ -320,6 +334,10 @@ class SkyServiceSpec:
|
|
320
334
|
# If None, treated as having the same value of min_replicas.
|
321
335
|
return self._max_replicas
|
322
336
|
|
337
|
+
@property
|
338
|
+
def ports(self) -> Optional[str]:
|
339
|
+
return self._ports
|
340
|
+
|
323
341
|
@property
|
324
342
|
def target_qps_per_replica(self) -> Optional[float]:
|
325
343
|
return self._target_qps_per_replica
|
sky/skylet/constants.py
CHANGED
@@ -268,7 +268,7 @@ CLUSTER_NAME_VALID_REGEX = '[a-zA-Z]([-_.a-zA-Z0-9]*[a-zA-Z0-9])?'
|
|
268
268
|
# Used for translate local file mounts to cloud storage. Please refer to
|
269
269
|
# sky/execution.py::_maybe_translate_local_file_mounts_and_sync_up for
|
270
270
|
# more details.
|
271
|
-
FILE_MOUNTS_BUCKET_NAME = 'skypilot-filemounts-{username}-{id}'
|
271
|
+
FILE_MOUNTS_BUCKET_NAME = 'skypilot-filemounts-{username}-{user_hash}-{id}'
|
272
272
|
FILE_MOUNTS_LOCAL_TMP_DIR = 'skypilot-filemounts-files-{id}'
|
273
273
|
FILE_MOUNTS_REMOTE_TMP_DIR = '/tmp/sky-{}-filemounts-files'
|
274
274
|
|
sky/utils/controller_utils.py
CHANGED
@@ -7,6 +7,7 @@ import os
|
|
7
7
|
import tempfile
|
8
8
|
import typing
|
9
9
|
from typing import Any, Dict, Iterable, List, Optional, Set
|
10
|
+
import uuid
|
10
11
|
|
11
12
|
import colorama
|
12
13
|
|
@@ -642,7 +643,7 @@ def replace_skypilot_config_path_in_file_mounts(
|
|
642
643
|
|
643
644
|
|
644
645
|
def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
|
645
|
-
|
646
|
+
task_type: str) -> None:
|
646
647
|
"""Translates local->VM mounts into Storage->VM, then syncs up any Storage.
|
647
648
|
|
648
649
|
Eagerly syncing up local->Storage ensures Storage->VM would work at task
|
@@ -651,6 +652,13 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
|
|
651
652
|
If there are no local source paths to be translated, this function would
|
652
653
|
still sync up any storage mounts with local source paths (which do not
|
653
654
|
undergo translation).
|
655
|
+
|
656
|
+
When jobs.bucket or serve.bucket is not specified, an intermediate storage
|
657
|
+
dedicated for the job is created for the workdir and local file mounts and
|
658
|
+
the storage is deleted when the job finishes. We don't share the storage
|
659
|
+
between jobs, because jobs might have different resources requirements, and
|
660
|
+
sharing storage between jobs may cause egress costs or slower transfer
|
661
|
+
speeds.
|
654
662
|
"""
|
655
663
|
|
656
664
|
# ================================================================
|
@@ -669,11 +677,17 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
|
|
669
677
|
store.delete()
|
670
678
|
with ux_utils.print_exception_no_traceback():
|
671
679
|
raise exceptions.StorageBucketCreateError(
|
672
|
-
f'
|
673
|
-
'Please check
|
680
|
+
f'{task_type.capitalize()} bucket {store.name!r} does not '
|
681
|
+
f'exist. Please check {task_type}.bucket configuration in '
|
674
682
|
'your SkyPilot config.')
|
675
683
|
|
676
|
-
|
684
|
+
# We use uuid to generate a unique run id for the job, so that the bucket/
|
685
|
+
# subdirectory name is unique across different jobs/services.
|
686
|
+
# We should not use common_utils.get_usage_run_id() here, because when
|
687
|
+
# Python API is used, the run id will be the same across multiple
|
688
|
+
# jobs.launch/serve.up calls after the sky is imported.
|
689
|
+
run_id = common_utils.base36_encode(uuid.uuid4().hex)[:8]
|
690
|
+
user_hash = common_utils.get_user_hash()
|
677
691
|
original_file_mounts = task.file_mounts if task.file_mounts else {}
|
678
692
|
original_storage_mounts = task.storage_mounts if task.storage_mounts else {}
|
679
693
|
|
@@ -701,13 +715,15 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
|
|
701
715
|
|
702
716
|
# Get the bucket name for the workdir and file mounts,
|
703
717
|
# we store all these files in same bucket from config.
|
704
|
-
bucket_wth_prefix = skypilot_config.get_nested((
|
718
|
+
bucket_wth_prefix = skypilot_config.get_nested((task_type, 'bucket'), None)
|
705
719
|
store_kwargs: Dict[str, Any] = {}
|
706
720
|
if bucket_wth_prefix is None:
|
707
721
|
store_type = store_cls = sub_path = None
|
708
722
|
storage_account_name = region = None
|
709
723
|
bucket_name = constants.FILE_MOUNTS_BUCKET_NAME.format(
|
710
|
-
username=common_utils.get_cleaned_username(),
|
724
|
+
username=common_utils.get_cleaned_username(),
|
725
|
+
user_hash=user_hash,
|
726
|
+
id=run_id)
|
711
727
|
else:
|
712
728
|
store_type, store_cls, bucket_name, sub_path, storage_account_name, \
|
713
729
|
region = storage_lib.StoreType.get_fields_from_store_url(
|
@@ -798,7 +814,7 @@ def maybe_translate_local_file_mounts_and_sync_up(task: 'task_lib.Task',
|
|
798
814
|
constants.FILE_MOUNTS_LOCAL_TMP_DIR.format(id=run_id))
|
799
815
|
os.makedirs(local_fm_path, exist_ok=True)
|
800
816
|
file_mount_remote_tmp_dir = constants.FILE_MOUNTS_REMOTE_TMP_DIR.format(
|
801
|
-
|
817
|
+
task_type)
|
802
818
|
if copy_mounts_with_file_in_src:
|
803
819
|
src_to_file_id = {}
|
804
820
|
for i, src in enumerate(set(copy_mounts_with_file_in_src.values())):
|
sky/utils/schemas.py
CHANGED
{skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/RECORD
RENAMED
@@ -1,8 +1,8 @@
|
|
1
|
-
sky/__init__.py,sha256=
|
1
|
+
sky/__init__.py,sha256=xALGcdGFZrlaOqt9ZRal3KgMIXXjWrecV7lmncKm6Os,5529
|
2
2
|
sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
|
3
3
|
sky/authentication.py,sha256=LXUDABKP1FJCS256xTTDJa40WXwHKF5x49S-4hZbD1M,21501
|
4
4
|
sky/check.py,sha256=qTpm3N1zUZi2inEZPsrbt278B3h8nsk2gnepzIgLybE,10899
|
5
|
-
sky/cli.py,sha256
|
5
|
+
sky/cli.py,sha256=-41DELQxAwIqLN3T1meUctCnjomujK9PK7njIiQUhKc,214883
|
6
6
|
sky/cloud_stores.py,sha256=PcLT57_8SZy7o6paAluElfBynaLkbaOq3l-8dNg1AVM,23672
|
7
7
|
sky/core.py,sha256=fE1rn4Ku94S0XmWTO5-6t6eT6aaJImNczRqEnTe8v7Q,38742
|
8
8
|
sky/dag.py,sha256=f3sJlkH4bE6Uuz3ozNtsMhcBpRx7KmC9Sa4seDKt4hU,3104
|
@@ -99,7 +99,7 @@ sky/data/storage_utils.py,sha256=cM3kxlffYE7PnJySDu8huyUsMX_JYsf9uer8r5OYsjo,955
|
|
99
99
|
sky/jobs/__init__.py,sha256=ObZcz3lL1ip8JcmR6gbfZ4RMMfXJJdsnuU2zLQUb8jY,1546
|
100
100
|
sky/jobs/constants.py,sha256=6RphkJ6pmafQ7XYW5qwId1Zvqb99HJelA9kgrgfNR7o,1421
|
101
101
|
sky/jobs/controller.py,sha256=0WcOk8xRZ-mZWuza-WE-ICKZTgZvXxNzj9pWXUslm6E,28312
|
102
|
-
sky/jobs/core.py,sha256=
|
102
|
+
sky/jobs/core.py,sha256=mYg4ZI1FqxhaDu7-41LfcHfA7rh6riCfO9sHQUuO3RM,20319
|
103
103
|
sky/jobs/recovery_strategy.py,sha256=m-EA-MWXPFrgx2CYFPr6MmgeUoDTEBmY2xruD2PRSGY,26365
|
104
104
|
sky/jobs/scheduler.py,sha256=WAvNb8-vBk8q1zFordFdpH7gxqWDjPHDGZZay6aodOk,12028
|
105
105
|
sky/jobs/state.py,sha256=bvBNZMg3DzPfS4eHNzMqYaMui2cqnWoWGDIaiOpaXSk,40770
|
@@ -191,14 +191,14 @@ sky/serve/__init__.py,sha256=Bqw8nB9u1QF3ryjbV797SPZq0DWAcjT94E_5B8J24ag,1808
|
|
191
191
|
sky/serve/autoscalers.py,sha256=OxaynplCqbmrMA3fIGhxkugaGm-50QoI8S1fIfHK0M0,31667
|
192
192
|
sky/serve/constants.py,sha256=7MflfgTHO9gDSux93U4BmNeEMWXxZB4q7I54KUwgp-s,4651
|
193
193
|
sky/serve/controller.py,sha256=jtzWHsLHnVPQ727ZpDZTUpGTtIOssbnQpXeWOyAuW_s,11886
|
194
|
-
sky/serve/core.py,sha256=
|
194
|
+
sky/serve/core.py,sha256=ANjALyYiQUmcpWjQ1YJor2rqHJypQpzuQxuIPnDyEk0,35788
|
195
195
|
sky/serve/load_balancer.py,sha256=2nkMPRvy-h7hJL4Qq__tkT8nIAVC_nmjyXf8mMGYEFk,13658
|
196
196
|
sky/serve/load_balancing_policies.py,sha256=XVj76qBgqh7h6wfx53RKQFzBefDWTE4TCdCEtFLLtI4,5398
|
197
|
-
sky/serve/replica_managers.py,sha256=
|
197
|
+
sky/serve/replica_managers.py,sha256=SW7k2iivUZ6dw_YMgGYOHOGD9_yyV4byfKa8e5t8_HE,57587
|
198
198
|
sky/serve/serve_state.py,sha256=2V9WVD9OZ26vgyIJ-kZcrlouazwFTrpjlZAK9DRv3uA,20084
|
199
199
|
sky/serve/serve_utils.py,sha256=m1Zcjslnzcr5AAppzV48WDOwMWjRaXotTUd_iN-dHgc,40654
|
200
200
|
sky/serve/service.py,sha256=DPU1PJGuHa1WaNqxYqgpmqd4LA9jBbQM-KlLrA6C1M0,12156
|
201
|
-
sky/serve/service_spec.py,sha256=
|
201
|
+
sky/serve/service_spec.py,sha256=Q0qnFRjNnfGIpksubH5VqPKIlvpWs5had_Ma_PSHyo8,16940
|
202
202
|
sky/setup_files/MANIFEST.in,sha256=WF0T89NLichHxZDDSQzvSpiONtAEFyur2MPmGczgTIo,555
|
203
203
|
sky/setup_files/dependencies.py,sha256=OftFwWuV41sb_ZMD5euA6DABZx1Th1V_vCZcLV9CyMU,6234
|
204
204
|
sky/setup_files/setup.py,sha256=HMqAIxHrhtQUOlm6_Iz5E_bL4dUvsYgXc9YVQIFayPs,7417
|
@@ -207,7 +207,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
207
207
|
sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
|
208
208
|
sky/skylet/autostop_lib.py,sha256=JPDHmByuhoNYXSUHl-OnyeJUkOFWn7gDM1FrS7Kr3E8,4478
|
209
209
|
sky/skylet/configs.py,sha256=UtnpmEL0F9hH6PSjhsps7xgjGZ6qzPOfW1p2yj9tSng,1887
|
210
|
-
sky/skylet/constants.py,sha256=
|
210
|
+
sky/skylet/constants.py,sha256=cMUJmj9iEY7dFW5pllijwrUlcKQmsJxgQSSrvTq9Ua8,16057
|
211
211
|
sky/skylet/events.py,sha256=0bOjUYpphuAficD9wDB5NOan2vwJDaRqdnm4sl0RK0U,12535
|
212
212
|
sky/skylet/job_lib.py,sha256=Rk-C069cusJIRXsks8xqCb016JSt7GlpU7LrpX0qFJk,42785
|
213
213
|
sky/skylet/log_lib.py,sha256=oFEBd85vDYFrIyyZKekH30yc4rRYILC0F0o-COQ64oE,20445
|
@@ -263,7 +263,7 @@ sky/utils/command_runner.py,sha256=ewDjFxcCOv0OeG2aUOIfVWmTls65up9DvSnAXURvGfM,3
|
|
263
263
|
sky/utils/command_runner.pyi,sha256=mJOzCgcYZAfHwnY_6Wf1YwlTEJGb9ihzc2f0rE0Kw98,7751
|
264
264
|
sky/utils/common_utils.py,sha256=Kh0iymQl9I4HXxYSc3TTcv-xeso27pU_1hGNOc9Xw2o,25370
|
265
265
|
sky/utils/control_master_utils.py,sha256=90hnxiAUP20gbJ9e3MERh7rb04ZO_I3LsljNjR26H5I,1416
|
266
|
-
sky/utils/controller_utils.py,sha256=
|
266
|
+
sky/utils/controller_utils.py,sha256=Zvf4jbI1zAtsz-iz63nnAtOi-uXRs6egKjteAAXqkQk,45289
|
267
267
|
sky/utils/dag_utils.py,sha256=R1yhJssvzDg13p6PJIC8OkYFBiR64eIx5xQeRpAG9n4,6099
|
268
268
|
sky/utils/db_utils.py,sha256=K2-OHPg0FeHCarevMdWe0IWzm6wWumViEeYeJuGoFUE,3747
|
269
269
|
sky/utils/env_options.py,sha256=E5iwRFBUY2Iq6e0y0c1Mv5OSQ4MRNdk0-p38xUyVerc,1366
|
@@ -271,7 +271,7 @@ sky/utils/kubernetes_enums.py,sha256=imGqHSa8O07zD_6xH1SDMM7dBU5lF5fzFFlQuQy00QM
|
|
271
271
|
sky/utils/log_utils.py,sha256=xEbUZfDiIiZkyWoLHXwIcqVMCBDEENsLCiogEXMDLt0,14139
|
272
272
|
sky/utils/resources_utils.py,sha256=06Kx6AfbBdwBYGmIYFEY_qm6OBc2a5esZMPvIX7gCvc,7787
|
273
273
|
sky/utils/rich_utils.py,sha256=hmnI1X5dKvRIQzB7EyNb34FT97qFNve-0QHqM5r0mVk,3066
|
274
|
-
sky/utils/schemas.py,sha256=
|
274
|
+
sky/utils/schemas.py,sha256=32w70vJN0-C-00--QPGw_8zQTRnpgDMH-eSuxPII4bM,30555
|
275
275
|
sky/utils/subprocess_utils.py,sha256=YhtxqHoaZLw2M9TikTH56dTboZN3Qu2RsGeWo4uwJVA,12054
|
276
276
|
sky/utils/timeline.py,sha256=ebHxKJK2HX0utGArrUgSezTPkcwav3VETa_AQS34t-E,3925
|
277
277
|
sky/utils/ux_utils.py,sha256=CqyIFGDuSE8fQasPkna_loZMwtboC9KedR09WEQ7qz0,6502
|
@@ -289,9 +289,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_job.yaml,sha256=k0TBoQ4zgf79-sVkixKSGYFHQ7Z
|
|
289
289
|
sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488oMQvhRZWwsj9vBbPUg,3812
|
290
290
|
sky/utils/kubernetes/rsync_helper.sh,sha256=h4YwrPFf9727CACnMJvF3EyK_0OeOYKKt4su_daKekw,1256
|
291
291
|
sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
|
292
|
-
skypilot_nightly-1.0.0.
|
293
|
-
skypilot_nightly-1.0.0.
|
294
|
-
skypilot_nightly-1.0.0.
|
295
|
-
skypilot_nightly-1.0.0.
|
296
|
-
skypilot_nightly-1.0.0.
|
297
|
-
skypilot_nightly-1.0.0.
|
292
|
+
skypilot_nightly-1.0.0.dev20250131.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
|
293
|
+
skypilot_nightly-1.0.0.dev20250131.dist-info/METADATA,sha256=jvmN8-XKmH2-fQa_8IK3QHZlgN_xwPEPBr_8TldL7r0,21249
|
294
|
+
skypilot_nightly-1.0.0.dev20250131.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
295
|
+
skypilot_nightly-1.0.0.dev20250131.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
|
296
|
+
skypilot_nightly-1.0.0.dev20250131.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
|
297
|
+
skypilot_nightly-1.0.0.dev20250131.dist-info/RECORD,,
|
File without changes
|
{skypilot_nightly-1.0.0.dev20250129.dist-info → skypilot_nightly-1.0.0.dev20250131.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|