skypilot-nightly 1.0.0.dev20250824__py3-none-any.whl → 1.0.0.dev20250825__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (33) hide show
  1. sky/__init__.py +2 -2
  2. sky/catalog/data_fetchers/fetch_lambda_cloud.py +1 -0
  3. sky/dashboard/out/404.html +1 -1
  4. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  5. sky/dashboard/out/clusters/[cluster].html +1 -1
  6. sky/dashboard/out/clusters.html +1 -1
  7. sky/dashboard/out/config.html +1 -1
  8. sky/dashboard/out/index.html +1 -1
  9. sky/dashboard/out/infra/[context].html +1 -1
  10. sky/dashboard/out/infra.html +1 -1
  11. sky/dashboard/out/jobs/[job].html +1 -1
  12. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  13. sky/dashboard/out/jobs.html +1 -1
  14. sky/dashboard/out/users.html +1 -1
  15. sky/dashboard/out/volumes.html +1 -1
  16. sky/dashboard/out/workspace/new.html +1 -1
  17. sky/dashboard/out/workspaces/[name].html +1 -1
  18. sky/dashboard/out/workspaces.html +1 -1
  19. sky/serve/autoscalers.py +347 -5
  20. sky/serve/controller.py +36 -6
  21. sky/serve/load_balancer.py +49 -16
  22. sky/serve/load_balancing_policies.py +115 -1
  23. sky/serve/service.py +2 -1
  24. sky/serve/service_spec.py +26 -4
  25. sky/utils/schemas.py +18 -2
  26. {skypilot_nightly-1.0.0.dev20250824.dist-info → skypilot_nightly-1.0.0.dev20250825.dist-info}/METADATA +1 -1
  27. {skypilot_nightly-1.0.0.dev20250824.dist-info → skypilot_nightly-1.0.0.dev20250825.dist-info}/RECORD +33 -33
  28. /sky/dashboard/out/_next/static/{P-Au_yHqNENhnPF3shEpK → n7XGGtvnHqbVUS8eayoGG}/_buildManifest.js +0 -0
  29. /sky/dashboard/out/_next/static/{P-Au_yHqNENhnPF3shEpK → n7XGGtvnHqbVUS8eayoGG}/_ssgManifest.js +0 -0
  30. {skypilot_nightly-1.0.0.dev20250824.dist-info → skypilot_nightly-1.0.0.dev20250825.dist-info}/WHEEL +0 -0
  31. {skypilot_nightly-1.0.0.dev20250824.dist-info → skypilot_nightly-1.0.0.dev20250825.dist-info}/entry_points.txt +0 -0
  32. {skypilot_nightly-1.0.0.dev20250824.dist-info → skypilot_nightly-1.0.0.dev20250825.dist-info}/licenses/LICENSE +0 -0
  33. {skypilot_nightly-1.0.0.dev20250824.dist-info → skypilot_nightly-1.0.0.dev20250825.dist-info}/top_level.txt +0 -0
@@ -3,7 +3,7 @@ import collections
3
3
  import random
4
4
  import threading
5
5
  import typing
6
- from typing import Dict, List, Optional
6
+ from typing import Any, Dict, List, Optional
7
7
 
8
8
  from sky import sky_logging
9
9
 
@@ -146,3 +146,117 @@ class LeastLoadPolicy(LoadBalancingPolicy, name='least_load', default=True):
146
146
  del request # Unused.
147
147
  with self.lock:
148
148
  self.load_map[replica_url] -= 1
149
+
150
+
151
+ class InstanceAwareLeastLoadPolicy(LeastLoadPolicy,
152
+ name='instance_aware_least_load'):
153
+ """Instance-aware least load load balancing policy.
154
+
155
+ This policy considers the accelerator type and its QPS capabilities
156
+ when distributing load. It normalizes the load by dividing the current
157
+ load by the target QPS for that accelerator type.
158
+ """
159
+
160
+ def __init__(self) -> None:
161
+ super().__init__()
162
+ self.replica_info: Dict[str, Dict[str, Any]] = {} # replica_url -> info
163
+ self.target_qps_per_accelerator: Dict[str, float] = {
164
+ } # accelerator_type -> target_qps
165
+
166
+ def set_ready_replicas(self, ready_replicas: List[str]) -> None:
167
+ if set(self.ready_replicas) == set(ready_replicas):
168
+ return
169
+ with self.lock:
170
+ self.ready_replicas = ready_replicas
171
+ # Clean up load map for removed replicas
172
+ for r in list(self.load_map.keys()):
173
+ if r not in ready_replicas:
174
+ del self.load_map[r]
175
+ # Initialize load for new replicas
176
+ for replica in ready_replicas:
177
+ if replica not in self.load_map:
178
+ self.load_map[replica] = 0
179
+
180
+ def set_replica_info(self, replica_info: Dict[str, Dict[str, Any]]) -> None:
181
+ """Set replica information including accelerator types.
182
+
183
+ Args:
184
+ replica_info: Dict mapping replica URL to replica information
185
+ e.g., {'http://url1': {'gpu_type': 'A100'}}
186
+ """
187
+ with self.lock:
188
+ self.replica_info = replica_info
189
+ logger.debug('Set replica info: %s', self.replica_info)
190
+
191
+ def set_target_qps_per_accelerator(
192
+ self, target_qps_per_accelerator: Dict[str, float]) -> None:
193
+ """Set target QPS for each accelerator type."""
194
+ with self.lock:
195
+ self.target_qps_per_accelerator = target_qps_per_accelerator
196
+
197
+ def _get_normalized_load(self, replica_url: str) -> float:
198
+ """Get normalized load for a replica based on its accelerator type."""
199
+ current_load = self.load_map.get(replica_url, 0)
200
+
201
+ # Get accelerator type for this replica
202
+ replica_data = self.replica_info.get(replica_url, {})
203
+ accelerator_type = replica_data.get('gpu_type', 'unknown')
204
+
205
+ # Get target QPS for this accelerator type with flexible matching
206
+ target_qps = self._get_target_qps_for_accelerator(accelerator_type)
207
+ if target_qps <= 0:
208
+ logger.warning(
209
+ 'Non-positive target QPS (%s) for accelerator type %s; '
210
+ 'using default value 1.0 to avoid division by zero.',
211
+ target_qps, accelerator_type)
212
+ target_qps = 1.0
213
+
214
+ # Load is normalized by target QPS
215
+ normalized_load = current_load / target_qps
216
+
217
+ logger.debug(
218
+ 'InstanceAwareLeastLoadPolicy: Replica %s - GPU type: %s, '
219
+ 'current load: %s, target QPS: %s, normalized load: %s',
220
+ replica_url, accelerator_type, current_load, target_qps,
221
+ normalized_load)
222
+
223
+ return normalized_load
224
+
225
+ def _get_target_qps_for_accelerator(self, accelerator_type: str) -> float:
226
+ """Get target QPS for accelerator type with flexible matching."""
227
+ # Direct match first
228
+ if accelerator_type in self.target_qps_per_accelerator:
229
+ return self.target_qps_per_accelerator[accelerator_type]
230
+
231
+ # Try matching by base name (e.g., 'A100' matches 'A100:1')
232
+ for config_key in self.target_qps_per_accelerator.keys():
233
+ # Remove count suffix (e.g., 'A100:1' -> 'A100')
234
+ base_name = config_key.split(':')[0]
235
+ if accelerator_type == base_name:
236
+ return self.target_qps_per_accelerator[config_key]
237
+
238
+ # Fallback to minimum QPS
239
+ logger.warning(
240
+ f'No matching QPS found for accelerator type: {accelerator_type}. '
241
+ f'Available types: {list(self.target_qps_per_accelerator.keys())}. '
242
+ f'Using default value 1.0 as fallback.')
243
+ return 1.0
244
+
245
+ def _select_replica(self, request: 'fastapi.Request') -> Optional[str]:
246
+ del request # Unused.
247
+ if not self.ready_replicas:
248
+ return None
249
+ with self.lock:
250
+ # Calculate normalized loads for all replicas
251
+ replica_loads = []
252
+ for replica in self.ready_replicas:
253
+ normalized_load = self._get_normalized_load(replica)
254
+ replica_loads.append((replica, normalized_load))
255
+
256
+ # Select replica with minimum normalized load
257
+ selected_replica = min(replica_loads, key=lambda x: x[1])[0]
258
+ logger.debug('Available replicas and loads: %s', replica_loads)
259
+ logger.debug('Selected replica: %s', selected_replica)
260
+ return selected_replica
261
+
262
+ # pre_execute_hook and post_execute_hook are inherited from LeastLoadPolicy
sky/serve/service.py CHANGED
@@ -359,7 +359,8 @@ def _start(service_name: str, tmp_task_yaml: str, job_id: int, entrypoint: str):
359
359
  load_balancer_log_file).run,
360
360
  args=(controller_addr, load_balancer_port,
361
361
  service_spec.load_balancing_policy,
362
- service_spec.tls_credential))
362
+ service_spec.tls_credential,
363
+ service_spec.target_qps_per_replica))
363
364
  load_balancer_process.start()
364
365
 
365
366
  if not is_recovery:
sky/serve/service_spec.py CHANGED
@@ -3,7 +3,7 @@ import json
3
3
  import os
4
4
  import textwrap
5
5
  import typing
6
- from typing import Any, Dict, List, Optional
6
+ from typing import Any, Dict, List, Optional, Union
7
7
 
8
8
  from sky import serve
9
9
  from sky.adaptors import common as adaptors_common
@@ -33,7 +33,7 @@ class SkyServiceSpec:
33
33
  max_replicas: Optional[int] = None,
34
34
  num_overprovision: Optional[int] = None,
35
35
  ports: Optional[str] = None,
36
- target_qps_per_replica: Optional[float] = None,
36
+ target_qps_per_replica: Optional[Union[float, Dict[str, float]]] = None,
37
37
  post_data: Optional[Dict[str, Any]] = None,
38
38
  tls_credential: Optional[serve_utils.TLSCredential] = None,
39
39
  readiness_headers: Optional[Dict[str, str]] = None,
@@ -109,7 +109,8 @@ class SkyServiceSpec:
109
109
  self._max_replicas: Optional[int] = max_replicas
110
110
  self._num_overprovision: Optional[int] = num_overprovision
111
111
  self._ports: Optional[str] = ports
112
- self._target_qps_per_replica: Optional[float] = target_qps_per_replica
112
+ self._target_qps_per_replica: Optional[Union[float, Dict[
113
+ str, float]]] = target_qps_per_replica
113
114
  self._post_data: Optional[Dict[str, Any]] = post_data
114
115
  self._tls_credential: Optional[serve_utils.TLSCredential] = (
115
116
  tls_credential)
@@ -241,6 +242,26 @@ class SkyServiceSpec:
241
242
  service_config['load_balancing_policy'] = config.get(
242
243
  'load_balancing_policy', None)
243
244
 
245
+ # Validate instance-aware settings
246
+ target_qps_per_replica = service_config['target_qps_per_replica']
247
+ load_balancing_policy = service_config['load_balancing_policy']
248
+
249
+ if isinstance(target_qps_per_replica, dict):
250
+ if load_balancing_policy != 'instance_aware_least_load':
251
+ with ux_utils.print_exception_no_traceback():
252
+ raise ValueError(
253
+ 'When using dict type target_qps_per_replica, '
254
+ 'load_balancing_policy must be '
255
+ '"instance_aware_least_load".')
256
+
257
+ if load_balancing_policy == 'instance_aware_least_load':
258
+ if not isinstance(target_qps_per_replica, dict):
259
+ with ux_utils.print_exception_no_traceback():
260
+ raise ValueError(
261
+ 'When using "instance_aware_least_load" policy, '
262
+ 'target_qps_per_replica must be a '
263
+ 'dict mapping GPU types to QPS values.')
264
+
244
265
  tls_section = config.get('tls', None)
245
266
  if tls_section is not None:
246
267
  service_config['tls_credential'] = serve_utils.TLSCredential(
@@ -435,7 +456,8 @@ class SkyServiceSpec:
435
456
  return self._ports
436
457
 
437
458
  @property
438
- def target_qps_per_replica(self) -> Optional[float]:
459
+ def target_qps_per_replica(
460
+ self) -> Optional[Union[float, Dict[str, float]]]:
439
461
  return self._target_qps_per_replica
440
462
 
441
463
  @property
sky/utils/schemas.py CHANGED
@@ -668,8 +668,24 @@ def get_service_schema():
668
668
  'minimum': 0,
669
669
  },
670
670
  'target_qps_per_replica': {
671
- 'type': 'number',
672
- 'minimum': 0,
671
+ 'anyOf': [
672
+ {
673
+ 'type': 'number',
674
+ 'minimum': 0,
675
+ },
676
+ {
677
+ 'type': 'object',
678
+ 'patternProperties': {
679
+ # Pattern for accelerator types like
680
+ # "H100:1", "A100:1", "H100", "A100"
681
+ '^[A-Z0-9]+(?::[0-9]+)?$': {
682
+ 'type': 'number',
683
+ 'minimum': 0,
684
+ }
685
+ },
686
+ 'additionalProperties': False,
687
+ }
688
+ ]
673
689
  },
674
690
  'dynamic_ondemand_fallback': {
675
691
  'type': 'boolean',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250824
3
+ Version: 1.0.0.dev20250825
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,4 +1,4 @@
1
- sky/__init__.py,sha256=ErYYKEgFO1itJZeoNiYaFkEnJ9HkapcA0vIZ-tQx1g8,6615
1
+ sky/__init__.py,sha256=Wslkmn1jwDngdDc1ZFei39lcOcbia_KUk2SBuKOrgYA,6615
2
2
  sky/admin_policy.py,sha256=BeSowGnWfDj58ALiNf3cc2N4gMQWzjO6aXnX7vaqYhk,9782
3
3
  sky/authentication.py,sha256=V7zGSV7bqcAKC_EGOOS0KhJ01ZFLnme0WnjLFO7zavs,25603
4
4
  sky/check.py,sha256=Z7D6txaOAEL7fyEQ8q-Zxk1aWaHpEcl412Rj2mThbQ0,31025
@@ -71,7 +71,7 @@ sky/catalog/data_fetchers/fetch_fluidstack.py,sha256=hsqpQi_YUI-qil3zLCEGatrR7Bk
71
71
  sky/catalog/data_fetchers/fetch_gcp.py,sha256=iFOpPq52c2ENg-oV9OXqFqPMG4Dpv5VGtRhcxkMir90,31950
72
72
  sky/catalog/data_fetchers/fetch_hyperbolic.py,sha256=VLBJXWvrKJH5QbMUiREPEMfO3x37_XsqMAmOo7bCQtc,4537
73
73
  sky/catalog/data_fetchers/fetch_ibm.py,sha256=WPzR1y5ZaTdv-R3HLIdSUnOfWh4N9cqzKoKiKJQkjFk,7414
74
- sky/catalog/data_fetchers/fetch_lambda_cloud.py,sha256=MUzogyLruLQmIt-To6TsfnGPgv_nnlp49XYbeshsd7I,5003
74
+ sky/catalog/data_fetchers/fetch_lambda_cloud.py,sha256=9-_gMwErwSbitC5ByZWWOKrn1S6_KfOUIfFbfbJbXZo,5033
75
75
  sky/catalog/data_fetchers/fetch_nebius.py,sha256=PeiVTWsaw0P01cfq2xDcS1tcIhLIe4ObSPF1XLO67gc,12181
76
76
  sky/catalog/data_fetchers/fetch_vast.py,sha256=xoVDSsQVgMLzyibCFN7yDgyH1Y96gk5G53to1ZAGRyg,5017
77
77
  sky/catalog/data_fetchers/fetch_vsphere.py,sha256=Yf7tKzwJsQ_4f64IT1EAP108C1D3Rg35RUIwp7UX8KI,21438
@@ -112,19 +112,17 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
112
112
  sky/clouds/utils/gcp_utils.py,sha256=09MF4Vx0EW7S-GXGpyxpl2aQlHrqeu9ioV0nyionAyk,9890
113
113
  sky/clouds/utils/oci_utils.py,sha256=TFqAqRLggg4Z0bhxrrq8nouSSomZy-ub1frHXEkud2M,7302
114
114
  sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
115
- sky/dashboard/out/404.html,sha256=3zgZj8MoYvjd_seRSq42nzhsxQgvMcRuR3R3cINyTD8,1423
116
- sky/dashboard/out/clusters.html,sha256=P3iL-erjnenog559rLvVoSbdqKNFd5V4x5uc0iFelTo,1418
117
- sky/dashboard/out/config.html,sha256=ulAdJyD3MlL2cFKxRoIpsK09hMgimnZpdSqEn7G_8iQ,1414
115
+ sky/dashboard/out/404.html,sha256=gOLqYY-zUgkcjFhZygPV6Xk5m7y3GD1s4J6rYsj4IjU,1423
116
+ sky/dashboard/out/clusters.html,sha256=k9E5gDKF9JqrPoq7Q3IlFbz2k4Jp9jf1SYEJsTxX1Co,1418
117
+ sky/dashboard/out/config.html,sha256=AmoEqsX9sWL2sGWCcXO6QXGPFQRAx7qLXoyRb8czqoc,1414
118
118
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
119
- sky/dashboard/out/index.html,sha256=HbOILrCfCvtDGfcdzYxcI4y8bUVlv3Xo_is8renm-08,1407
120
- sky/dashboard/out/infra.html,sha256=X40H7RxFfnnDGQKak_CdbNCm08vUb9E2FPTdKmyzAbE,1412
121
- sky/dashboard/out/jobs.html,sha256=AIfTWtz6jUNAf2134oS-nKAm3TgWVOH4Jxt8uhvxUYU,1410
119
+ sky/dashboard/out/index.html,sha256=iHvm9XtESv6Prpg7DIbqxH9CEu400wTT2H1DhQ3Fhvc,1407
120
+ sky/dashboard/out/infra.html,sha256=e39vy-xUUocasCgxep5vJ290W9om397HMaEnjbBcrFg,1412
121
+ sky/dashboard/out/jobs.html,sha256=EBTQd0ccgl1d0RRagGVNeLmBSEEIX23Z4PtMxwbiC8I,1410
122
122
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
123
- sky/dashboard/out/users.html,sha256=j8tk1SCcPJPvNVnzfvuG9sVr0KM9INnVno6TnbXllEg,1412
124
- sky/dashboard/out/volumes.html,sha256=h5y034-4H3XQThxjD3HOj6Ffe0p6UeSLWlpKRc4KtV4,1416
125
- sky/dashboard/out/workspaces.html,sha256=_1A1rUYps3rz4sqiSFk1edpFqG8M9FmxJVg1LKMaru0,1422
126
- sky/dashboard/out/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js,sha256=osxUordT3Fb32OsAF270nSx4GMgfsKF6Vc8OBBxtPgk,2428
127
- sky/dashboard/out/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
123
+ sky/dashboard/out/users.html,sha256=BrlNGz8yT6HEbyFWlX6XmDKWNAywXmXUb4u-5rTOb4w,1412
124
+ sky/dashboard/out/volumes.html,sha256=dDYQWDDlLNKAcI-B_jQBZsm40QV3JaRppz2q0iaU9DM,1416
125
+ sky/dashboard/out/workspaces.html,sha256=7RKilLFW4R9tlNY1fYOi6gQds9soCn9Lw0InXtfrqLA,1422
128
126
  sky/dashboard/out/_next/static/chunks/1121-8afcf719ea87debc.js,sha256=fLXxFyYpxIIH-GAL9X9Ew3rc2f6zqOZqg6TjrapDZUM,8554
129
127
  sky/dashboard/out/_next/static/chunks/1141-943efc7aff0f0c06.js,sha256=tUOoU0nIEShZeD5pBiOWrl8-czHc6PpnxxJilnDplHM,17330
130
128
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -179,14 +177,16 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-07349868f7905d37.j
179
177
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js,sha256=83s5N5CZwIaRcmYMfqn2we60n2VRmgFw6Tbx18b8-e0,762
180
178
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-de06e613e20bc977.js,sha256=8d4XLtF8E3ahNnsbdNUQkJVbM1b9sIG9wRaoRjRwMhE,1495
181
179
  sky/dashboard/out/_next/static/css/4614e06482d7309e.css,sha256=nk6GriyGVd1aGXrLd7BcMibnN4v0z-Q_mXGxrHFWqrE,56126
182
- sky/dashboard/out/clusters/[cluster].html,sha256=X1D6tb-oYeVkCsmd9M4SOTBNFTt_0F2pabLeX6kdqi0,2936
183
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=GC_09YG2cYyXLfMfFavEdsteChdoyWgHQjnOVKlWB5s,2073
184
- sky/dashboard/out/infra/[context].html,sha256=aK8corxweqCa8HPl6xP87-9ONlkSuCtXfMIP8Rs4SOo,1436
185
- sky/dashboard/out/jobs/[job].html,sha256=pnOvaPI2uMKtAcK8v0qkC5hvodHt0GUS72NJRWjYGhY,2304
186
- sky/dashboard/out/jobs/pools/[pool].html,sha256=IQPvRWlwSDHH7ZIpWQkBDv2GOsy2BiJ_PZAWwWXj2uM,2142
180
+ sky/dashboard/out/_next/static/n7XGGtvnHqbVUS8eayoGG/_buildManifest.js,sha256=osxUordT3Fb32OsAF270nSx4GMgfsKF6Vc8OBBxtPgk,2428
181
+ sky/dashboard/out/_next/static/n7XGGtvnHqbVUS8eayoGG/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
182
+ sky/dashboard/out/clusters/[cluster].html,sha256=AzFdbOEIzfISctoUySs1ucrYJETyrwvijzVpax3-Ujo,2936
183
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=tpAvQ8nSLLPv4HblRXGz2m-4BxUOfFJumsNlY5QXQjY,2073
184
+ sky/dashboard/out/infra/[context].html,sha256=nUCG2-39tV4-Nu4wYBa-76XrmdJ8pqlwpldoTa_Cx0U,1436
185
+ sky/dashboard/out/jobs/[job].html,sha256=DfGeqVfkt24G8d7j70jUWJE_OEXnxFb0VNhVFvF_Nek,2304
186
+ sky/dashboard/out/jobs/pools/[pool].html,sha256=_1WfYs1P0IIYHqQGJO4r65ip8XyTN093IUfjRYPMlpo,2142
187
187
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
188
- sky/dashboard/out/workspace/new.html,sha256=fGFgyYn19fP_7sqmfo25MZbDECC3Lo4rWrseDFO90fQ,1428
189
- sky/dashboard/out/workspaces/[name].html,sha256=EHGka1l0lW0p1CE1ir8LL58sl1YuEWE3XiiWVNYSv6I,2759
188
+ sky/dashboard/out/workspace/new.html,sha256=3ewPkbYYHuY-7VrdiXUs0tHQyZP4GX68Joi4nWhc4ew,1428
189
+ sky/dashboard/out/workspaces/[name].html,sha256=TSgkW7QaNPYFklc74wOiNbi_AyAOHgNZcrJHDZABKDI,2759
190
190
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
191
191
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
192
192
  sky/data/data_utils.py,sha256=AjEA_JRjo9NBMlv-Lq5iV4lBED_YZ1VqBR9pG6fGVWE,35179
@@ -333,16 +333,16 @@ sky/schemas/generated/autostopv1_pb2.py,sha256=3w4k0woHFxK0qXvYGljLtqpp3IB-oGV15
333
333
  sky/schemas/generated/autostopv1_pb2.pyi,sha256=1slXiAfgnh-Ds-yHJglvhGddatmlOPfh3AAOCheipCk,1772
334
334
  sky/schemas/generated/autostopv1_pb2_grpc.py,sha256=sUoHZNUNjxpsiYzJhSchC7p-uvigYuh8DwhhyhgfPcE,5921
335
335
  sky/serve/__init__.py,sha256=jlwErB4VeKh0wp9FkTIQoE5JQvc6KIB-vrqhtsJ2q-E,1810
336
- sky/serve/autoscalers.py,sha256=CWPooRr5mdtwmD2PZWl9GmcS1tifW21Hapv5mp6nB50,32971
336
+ sky/serve/autoscalers.py,sha256=4qS01f3-UUMC4kPe7HI7ayyWNwX1oMKVF7lwW_DX2wk,48542
337
337
  sky/serve/constants.py,sha256=VYQKGuwaPI9o2xC5HzB0TGKdiMeE9gOiX82K5yGEfGg,5062
338
- sky/serve/controller.py,sha256=JlDvk275fBt5d_I1B2KiBHiBlz-98NlgNF-7ShvU9tE,12445
339
- sky/serve/load_balancer.py,sha256=ZUt1QEf8b7tpmtedg7oiWkXDapm8fb7a6YdLqDK7Tno,14204
340
- sky/serve/load_balancing_policies.py,sha256=Ssr0GtHKyzzAIEOUAMCLvND5rapmrpxI-OQemf3dgxU,5177
338
+ sky/serve/controller.py,sha256=lyB6EHIfEMqKg-gshFLKUHEZqs77ufsD_ev6catz10Q,13975
339
+ sky/serve/load_balancer.py,sha256=gQpjOwnpu2HLdymbYCeCgJodDklMEwYMGgYU9ThXHPM,15774
340
+ sky/serve/load_balancing_policies.py,sha256=hhPrcuwT_rEJx4DMRC6iuLpUY8wOabUtXtPK7clg1F8,10148
341
341
  sky/serve/replica_managers.py,sha256=YaNyB8czSbxwlZP3oQqM4fOwxK0chIp9e7XVJYiTB4g,70830
342
342
  sky/serve/serve_state.py,sha256=k9rvkz-l8tpZZN1cL7aBtb60l_DE_3dE0DVyfT4tYzg,33328
343
343
  sky/serve/serve_utils.py,sha256=JptYHFMMlRGsHF10HjUnIiVc2MUHok393B24WJyO2Aw,69220
344
- sky/serve/service.py,sha256=yiqNIAJ2-whyrux-uY4CZrLDFcmNVhWZxQq2HfcFJdo,18401
345
- sky/serve/service_spec.py,sha256=c92moNwtjg1gCXug1ydsnoVG7mvUWNZ5esCT6GpS-K4,21689
344
+ sky/serve/service.py,sha256=mD5bOfw6VeyyqkBG-NPiM89ZP4V7I4ACTiqg4jLQaJg,18464
345
+ sky/serve/service_spec.py,sha256=yro9RJw62FADF-lsEQMGmyLvHancjQD9ez7B0eaPGVE,22821
346
346
  sky/serve/spot_placer.py,sha256=auRlYZNg8uIW-lxiirxpDP-iIaJtkrhesm6OGMgwPq4,11288
347
347
  sky/serve/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
348
348
  sky/serve/client/impl.py,sha256=TMvZGnui5QeqhqGzCzrMrLXO_As8RDUFSZa67cDbJJs,9466
@@ -488,7 +488,7 @@ sky/utils/resource_checker.py,sha256=0rwr7yLVkYO3Qq5FZmniyPp-p66tIXmSoK5t0ZgIfso
488
488
  sky/utils/resources_utils.py,sha256=3wnzmSIldFS5NmHTx6r2viS8zaP1q20noQolgQqucUU,16722
489
489
  sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
490
490
  sky/utils/rich_utils.py,sha256=Q-N5bZGfvqciU5cuQacInoNpldZcaMKCdBX2368KIDA,19971
491
- sky/utils/schemas.py,sha256=d7vWIQWCYCzGYgNNbN-jWArHYspXMmgjwLhjgNXgoU0,56352
491
+ sky/utils/schemas.py,sha256=sqID5M6nknukfVtTlTShAp-nhptjnZJbkLBjO-i_doY,57114
492
492
  sky/utils/serialize_utils.py,sha256=nn2x-8cTZeiVr5cgaBpLOGGpSFtms62QAJFyxs_bodI,630
493
493
  sky/utils/status_lib.py,sha256=QGkd6COD1GX1h30Mk9RMUdyeUOMJs5971GkxTcFgdsU,1705
494
494
  sky/utils/subprocess_utils.py,sha256=tOpFY_1ml7JkVGAN1o473lcKPklGR95qBCW61eu8kEo,15773
@@ -533,9 +533,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
533
533
  sky/workspaces/core.py,sha256=AjwbbRwk0glzCnqICJk4sQzMoUcawixbXoQWKLB3-aQ,25372
534
534
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
535
535
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
536
- skypilot_nightly-1.0.0.dev20250824.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
537
- skypilot_nightly-1.0.0.dev20250824.dist-info/METADATA,sha256=ttUO6cdP3knZ5TtZZm6jdT6HcWiQeda4dpvBnsbicoE,20310
538
- skypilot_nightly-1.0.0.dev20250824.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
539
- skypilot_nightly-1.0.0.dev20250824.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
540
- skypilot_nightly-1.0.0.dev20250824.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
541
- skypilot_nightly-1.0.0.dev20250824.dist-info/RECORD,,
536
+ skypilot_nightly-1.0.0.dev20250825.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
537
+ skypilot_nightly-1.0.0.dev20250825.dist-info/METADATA,sha256=I8mzL8eppAdlISYBHRj2aHwGZRKKrXdR1Ro2p5YMn40,20310
538
+ skypilot_nightly-1.0.0.dev20250825.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
539
+ skypilot_nightly-1.0.0.dev20250825.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
540
+ skypilot_nightly-1.0.0.dev20250825.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
541
+ skypilot_nightly-1.0.0.dev20250825.dist-info/RECORD,,