skypilot-nightly 1.0.0.dev20250128__py3-none-any.whl → 1.0.0.dev20250130__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 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 = 'e5c999be4c32bfb263f55baeaf929c4a2fd811a0'
8
+ _SKYPILOT_COMMIT_SHA = 'db90a41f4dff842aaaacd105d77f9e9a4e29b4bc'
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.dev20250128'
38
+ __version__ = '1.0.0.dev20250130'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
sky/adaptors/aws.py CHANGED
@@ -120,9 +120,17 @@ def _create_aws_object(creation_fn_or_cls: Callable[[], Any],
120
120
  # The LRU cache needs to be thread-local to avoid multiple threads sharing the
121
121
  # same session object, which is not guaranteed to be thread-safe.
122
122
  @_thread_local_lru_cache()
123
- def session():
123
+ def session(check_credentials: bool = True):
124
124
  """Create an AWS session."""
125
- return _create_aws_object(boto3.session.Session, 'session')
125
+ s = _create_aws_object(boto3.session.Session, 'session')
126
+ if check_credentials and s.get_credentials() is None:
127
+ # s.get_credentials() can be None if there are actually no credentials,
128
+ # or if we fail to get credentials from IMDS (e.g. due to throttling).
129
+ # Technically, it could be okay to have no credentials, as certain AWS
130
+ # APIs don't actually need them. But afaik everything we use AWS for
131
+ # needs credentials.
132
+ raise botocore_exceptions().NoCredentialsError()
133
+ return s
126
134
 
127
135
 
128
136
  # Avoid caching the resource/client objects. If we are using the assumed role,
@@ -149,11 +157,15 @@ def resource(service_name: str, **kwargs):
149
157
  config = botocore_config().Config(
150
158
  retries={'max_attempts': max_attempts})
151
159
  kwargs['config'] = config
160
+
161
+ check_credentials = kwargs.pop('check_credentials', True)
162
+
152
163
  # Need to use the client retrieved from the per-thread session to avoid
153
164
  # thread-safety issues (Directly creating the client with boto3.resource()
154
165
  # is not thread-safe). Reference: https://stackoverflow.com/a/59635814
155
166
  return _create_aws_object(
156
- lambda: session().resource(service_name, **kwargs), 'resource')
167
+ lambda: session(check_credentials=check_credentials).resource(
168
+ service_name, **kwargs), 'resource')
157
169
 
158
170
 
159
171
  def client(service_name: str, **kwargs):
@@ -164,12 +176,16 @@ def client(service_name: str, **kwargs):
164
176
  kwargs: Other options.
165
177
  """
166
178
  _assert_kwargs_builtin_type(kwargs)
179
+
180
+ check_credentials = kwargs.pop('check_credentials', True)
181
+
167
182
  # Need to use the client retrieved from the per-thread session to avoid
168
183
  # thread-safety issues (Directly creating the client with boto3.client() is
169
184
  # not thread-safe). Reference: https://stackoverflow.com/a/59635814
170
185
 
171
- return _create_aws_object(lambda: session().client(service_name, **kwargs),
172
- 'client')
186
+ return _create_aws_object(
187
+ lambda: session(check_credentials=check_credentials).client(
188
+ service_name, **kwargs), 'client')
173
189
 
174
190
 
175
191
  @common.load_lazy_modules(modules=_LAZY_MODULES)
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
- service_port: Optional[int] = None
4063
- for requested_resources in list(task.resources):
4064
- if requested_resources.ports is None or len(
4065
- requested_resources.ports) != 1:
4066
- with ux_utils.print_exception_no_traceback():
4067
- raise ValueError(
4068
- 'Must only specify one port in resources. Each replica '
4069
- 'will use the port specified as application ingress port.')
4070
- service_port_str = requested_resources.ports[0]
4071
- if not service_port_str.isdigit():
4072
- # For the case when the user specified a port range like 10000-10010
4073
- with ux_utils.print_exception_no_traceback():
4074
- raise ValueError(f'Port {service_port_str!r} is not a valid '
4075
- 'port number. Please specify a single port '
4076
- f'instead. Got: {service_port_str!r}')
4077
- # We request all the replicas using the same port for now, but it
4078
- # should be fine to allow different replicas to use different ports
4079
- # in the future.
4080
- resource_port = int(service_port_str)
4081
- if service_port is None:
4082
- service_port = resource_port
4083
- if service_port != resource_port:
4084
- with ux_utils.print_exception_no_traceback():
4085
- raise ValueError(f'Got multiple ports: {service_port} and '
4086
- f'{resource_port} in different resources. '
4087
- 'Please specify single port instead.')
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/clouds/aws.py CHANGED
@@ -711,7 +711,7 @@ class AWS(clouds.Cloud):
711
711
  @functools.lru_cache(maxsize=1) # Cache since getting identity is slow.
712
712
  def _sts_get_caller_identity(cls) -> Optional[List[List[str]]]:
713
713
  try:
714
- sts = aws.client('sts')
714
+ sts = aws.client('sts', check_credentials=False)
715
715
  # The caller identity contains 3 fields: UserId, Account, Arn.
716
716
  # 1. 'UserId' is unique across all AWS entity, which looks like
717
717
  # "AROADBQP57FF2AEXAMPLE:role-session-name"
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
- 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
- ) -> None:
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])
@@ -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
- stream_logs=stream_logs,
145
- cluster_name=controller_name,
146
- detach_run=detach_run,
147
- idle_minutes_to_autostop=skylet_constants.
148
- CONTROLLER_IDLE_MINUTES_TO_AUTOSTOP,
149
- retry_until_up=True,
150
- fast=True,
151
- _disable_controller_check=True)
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(
@@ -55,7 +55,7 @@ _RESUME_PER_INSTANCE_TIMEOUT = 120 # 2 minutes
55
55
  # https://aws.amazon.com/ec2/pricing/on-demand/#Data_Transfer_within_the_same_AWS_Region
56
56
 
57
57
 
58
- def _default_ec2_resource(region: str) -> Any:
58
+ def _default_ec2_resource(region: str, check_credentials: bool = True) -> Any:
59
59
  if not hasattr(aws, 'version'):
60
60
  # For backward compatibility, reload the module if the aws module was
61
61
  # imported before and stale. Used for, e.g., a live jobs controller
@@ -95,7 +95,8 @@ def _default_ec2_resource(region: str) -> Any:
95
95
  importlib.reload(aws)
96
96
  return aws.resource('ec2',
97
97
  region_name=region,
98
- max_attempts=BOTO_MAX_RETRIES)
98
+ max_attempts=BOTO_MAX_RETRIES,
99
+ check_credentials=check_credentials)
99
100
 
100
101
 
101
102
  def _cluster_name_filter(cluster_name_on_cloud: str) -> List[Dict[str, Any]]:
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] = None
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
- requested_ports = list(
81
- resources_utils.port_ranges_to_set(requested_resources.ports))
82
- if len(requested_ports) != 1:
83
- with ux_utils.print_exception_no_traceback():
84
- raise ValueError(
85
- 'Must only specify one port in resources. Each replica '
86
- 'will use the port specified as application ingress port.')
87
- service_port = requested_ports[0]
88
- if replica_ingress_port is None:
89
- replica_ingress_port = service_port
90
- elif service_port != replica_ingress_port:
91
- with ux_utils.print_exception_no_traceback():
92
- raise ValueError(
93
- f'Got multiple ports: {service_port} and '
94
- f'{replica_ingress_port} in different resources. '
95
- 'Please specify the same port instead.')
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(
@@ -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 the same in sky.serve.core.up
174
+ # Already checked all ports are valid in sky.serve.core.up
175
175
  assert task.resources, task
176
- task_resources: 'resources.Resources' = list(task.resources)[0]
177
- # Already checked the resources have and only have one port
178
- # before upload the task yaml.
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/utils/schemas.py CHANGED
@@ -388,6 +388,9 @@ def get_service_schema():
388
388
  },
389
389
  }
390
390
  },
391
+ 'ports': {
392
+ 'type': 'integer',
393
+ },
391
394
  'replicas': {
392
395
  'type': 'integer',
393
396
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250128
3
+ Version: 1.0.0.dev20250130
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,8 +1,8 @@
1
- sky/__init__.py,sha256=dy37SX5Qkrli69o5_ODmhM3BzjCvwquqr4Fa_-SQtkU,5529
1
+ sky/__init__.py,sha256=_2mFMzFyJAHhW4BNdYQodCXMrGYYxEh_Dod5PwSOzJc,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=xy5moD0W-retbQHxj7hq3q1mggU3dIWfepbj2Z8GCg0,213217
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
@@ -16,7 +16,7 @@ sky/skypilot_config.py,sha256=FN93hSG-heQCHBnemlIK2TwrJngKbpx4vMXNUzPIzV8,9087
16
16
  sky/status_lib.py,sha256=J7Jb4_Dz0v2T64ttOdyUgpokvl4S0sBJrMfH7Fvo51A,1457
17
17
  sky/task.py,sha256=zri5_Ghh5-fjDf2rl997ZmL4IlXetW9u9XXJIRUJ3Qg,51353
18
18
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- sky/adaptors/aws.py,sha256=jz3E8YyeGscgLZvFE6A1SkxpH6o_inZ-0NiXdRnxSGA,6863
19
+ sky/adaptors/aws.py,sha256=FNNC8B-iqSSiCLPiWGK_PLm1R-Kt4yI5JPIpdE0QJxQ,7565
20
20
  sky/adaptors/azure.py,sha256=yjM8nAPW-mlSXfmA8OmJNnSIrZ9lQx2-GxiI-TIVrwE,21910
21
21
  sky/adaptors/cloudflare.py,sha256=5NUvRGZ1gNf6xwL4CfsjekQTAsTsQQCH7l3tQIhkFxQ,7587
22
22
  sky/adaptors/common.py,sha256=nJmuBYFokCH0vX2oFqdAJYS-84FnUSTmIPKjAi4gqzo,2877
@@ -41,7 +41,7 @@ sky/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  sky/benchmark/benchmark_state.py,sha256=X8CXmuU9KgsDRhKedhFgjeRMUFWtQsjFs1qECvPG2yg,8723
42
42
  sky/benchmark/benchmark_utils.py,sha256=mP8Ox2WiKfthq6LcUAZnHknFQ0n8v9o_rCh1LXLgkqc,26192
43
43
  sky/clouds/__init__.py,sha256=iORaV6auqMxa6-6FKgt1C9f3UqRk1GASUtakua3tb9A,1395
44
- sky/clouds/aws.py,sha256=6mwI6wb1ry11KTMMdRVJ6W5cQuGF_v3gmRs4axJxEQw,53806
44
+ sky/clouds/aws.py,sha256=eYhCdHrp7niqt6rT3PX0jd92gtx1NG0A8KTl-Ob-BsI,53831
45
45
  sky/clouds/azure.py,sha256=UlBsgVH3dTV1INFLwHCntpXrdZ4ByTkdXQmjvVdGyQo,31608
46
46
  sky/clouds/cloud.py,sha256=5_ZduUcyCEY1JnX_h0PrJ5xwtPP4oor4jf6cICgSArc,35370
47
47
  sky/clouds/cloud_registry.py,sha256=oLoYFjm_SDTgdHokY7b6A5Utq80HXRQNxV0fLjDdVsQ,2361
@@ -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=2_Q9thiBPnd3i2nDqyUtQY-dsGZ1kRgAdnLcXHoycYo,19938
102
+ sky/jobs/core.py,sha256=99fXKR-lhhFI4fTV7aGpbtbqgAkSgZBeUJ8Zt-68ar4,20314
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
@@ -117,7 +117,7 @@ sky/provision/metadata_utils.py,sha256=LrxeV4wD2QPzNdXV_npj8q-pr35FatxBBjF_jSbpO
117
117
  sky/provision/provisioner.py,sha256=ZOgFOO0NB4QZVPwd4qikRqi615Bq67n0Vcl3cTDVxNE,29153
118
118
  sky/provision/aws/__init__.py,sha256=mxq8PeWJqUtalDozTNpbtENErRZ1ktEs8uf2aG9UUgU,731
119
119
  sky/provision/aws/config.py,sha256=-4mr5uxgsl_8eLm_4DfP8JurZGSysGuY0iDeBTHnX5Q,25943
120
- sky/provision/aws/instance.py,sha256=eCslJ2XfJo_pkQMnKFQqhGnUIRvwKiT12oxBY5-klss,40750
120
+ sky/provision/aws/instance.py,sha256=3-R8ohuN8ooNh2Fqqb7-c4vNFy1xsw2GQF4PHg3APhE,40843
121
121
  sky/provision/aws/utils.py,sha256=m49pS-SHGW7Au3bhDeTPsL8N5iRzbwOXzyEWRCc1Vho,3238
122
122
  sky/provision/azure/__init__.py,sha256=87cgk1_Ws7n9rqaDDPv-HpfrkVeSQMdFQnhnXwyx9g4,548
123
123
  sky/provision/azure/azure-config-template.json,sha256=jrjAgOtpe0e6FSg3vsVqHKQqJe0w-HeWOFT1HuwzS2c,4712
@@ -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=RHPobivYdQj2PWs0uRLd_KvyAa7altqrT81si1IUlIs,35402
194
+ sky/serve/core.py,sha256=rUCXibVGixO7j7b7nUcBY1pCcejOoa6tztIVf5MQ9bw,35778
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=SFvK7ewilc3NVRcqXg63WtU1WmhJKPtJd27JfKR2aow,57716
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=26MCrv0mRbwfPCtg7uKD0xJjFXHzdajKM0gKuIGOKMc,16259
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
@@ -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=50bzZfjseNky8jUqmrjRYaOQQxkaM3mzQYyLiRq0qfs,30482
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.dev20250128.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
293
- skypilot_nightly-1.0.0.dev20250128.dist-info/METADATA,sha256=3QZ3gCbhkRS8POjK1YNj-JSQQb3F6gb50oFV1Wmb-Rk,21249
294
- skypilot_nightly-1.0.0.dev20250128.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
295
- skypilot_nightly-1.0.0.dev20250128.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
296
- skypilot_nightly-1.0.0.dev20250128.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
297
- skypilot_nightly-1.0.0.dev20250128.dist-info/RECORD,,
292
+ skypilot_nightly-1.0.0.dev20250130.dist-info/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
293
+ skypilot_nightly-1.0.0.dev20250130.dist-info/METADATA,sha256=h7cYgI0Xy2rdgSRNc8aciOdrnEJ4oqZuAlnCy0N9xb8,21249
294
+ skypilot_nightly-1.0.0.dev20250130.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
295
+ skypilot_nightly-1.0.0.dev20250130.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
296
+ skypilot_nightly-1.0.0.dev20250130.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
297
+ skypilot_nightly-1.0.0.dev20250130.dist-info/RECORD,,