skypilot-nightly 1.0.0.dev20250907__py3-none-any.whl → 1.0.0.dev20250909__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 (40) hide show
  1. sky/__init__.py +2 -2
  2. sky/dashboard/out/404.html +1 -1
  3. sky/dashboard/out/_next/static/chunks/8969-0487dfbf149d9e53.js +1 -0
  4. sky/dashboard/out/_next/static/chunks/{webpack-6f5f27e9d7900777.js → webpack-d4fabc08788e14af.js} +1 -1
  5. sky/dashboard/out/_next/static/{i60KpqkwvB9QVScj-NeKo → eWytLgin5zvayQw3Xk46m}/_buildManifest.js +1 -1
  6. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  7. sky/dashboard/out/clusters/[cluster].html +1 -1
  8. sky/dashboard/out/clusters.html +1 -1
  9. sky/dashboard/out/config.html +1 -1
  10. sky/dashboard/out/index.html +1 -1
  11. sky/dashboard/out/infra/[context].html +1 -1
  12. sky/dashboard/out/infra.html +1 -1
  13. sky/dashboard/out/jobs/[job].html +1 -1
  14. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  15. sky/dashboard/out/jobs.html +1 -1
  16. sky/dashboard/out/users.html +1 -1
  17. sky/dashboard/out/volumes.html +1 -1
  18. sky/dashboard/out/workspace/new.html +1 -1
  19. sky/dashboard/out/workspaces/[name].html +1 -1
  20. sky/dashboard/out/workspaces.html +1 -1
  21. sky/jobs/server/core.py +44 -2
  22. sky/jobs/server/server.py +17 -0
  23. sky/server/constants.py +1 -1
  24. sky/server/metrics.py +60 -9
  25. sky/server/requests/executor.py +33 -32
  26. sky/server/requests/payloads.py +8 -0
  27. sky/server/requests/serializers/decoders.py +7 -1
  28. sky/server/requests/serializers/encoders.py +10 -2
  29. sky/server/server.py +49 -3
  30. sky/server/uvicorn.py +4 -0
  31. sky/utils/common_utils.py +8 -6
  32. sky/utils/resource_checker.py +2 -3
  33. {skypilot_nightly-1.0.0.dev20250907.dist-info → skypilot_nightly-1.0.0.dev20250909.dist-info}/METADATA +32 -32
  34. {skypilot_nightly-1.0.0.dev20250907.dist-info → skypilot_nightly-1.0.0.dev20250909.dist-info}/RECORD +39 -39
  35. sky/dashboard/out/_next/static/chunks/8969-0be3036bf86f8256.js +0 -1
  36. /sky/dashboard/out/_next/static/{i60KpqkwvB9QVScj-NeKo → eWytLgin5zvayQw3Xk46m}/_ssgManifest.js +0 -0
  37. {skypilot_nightly-1.0.0.dev20250907.dist-info → skypilot_nightly-1.0.0.dev20250909.dist-info}/WHEEL +0 -0
  38. {skypilot_nightly-1.0.0.dev20250907.dist-info → skypilot_nightly-1.0.0.dev20250909.dist-info}/entry_points.txt +0 -0
  39. {skypilot_nightly-1.0.0.dev20250907.dist-info → skypilot_nightly-1.0.0.dev20250909.dist-info}/licenses/LICENSE +0 -0
  40. {skypilot_nightly-1.0.0.dev20250907.dist-info → skypilot_nightly-1.0.0.dev20250909.dist-info}/top_level.txt +0 -0
@@ -130,6 +130,9 @@ queue_backend = server_config.QueueBackend.MULTIPROCESSING
130
130
  def executor_initializer(proc_group: str):
131
131
  setproctitle.setproctitle(f'SkyPilot:executor:{proc_group}:'
132
132
  f'{multiprocessing.current_process().pid}')
133
+ threading.Thread(target=metrics_lib.process_monitor,
134
+ args=(f'worker:{proc_group}',),
135
+ daemon=True).start()
133
136
 
134
137
 
135
138
  class RequestWorker:
@@ -281,34 +284,34 @@ def override_request_env_and_config(
281
284
  request_id: str) -> Generator[None, None, None]:
282
285
  """Override the environment and SkyPilot config for a request."""
283
286
  original_env = os.environ.copy()
284
- # Unset SKYPILOT_DEBUG by default, to avoid the value set on the API server
285
- # affecting client requests. If set on the client side, it will be
286
- # overridden by the request body.
287
- os.environ.pop('SKYPILOT_DEBUG', None)
288
- # Remove the db connection uri from client supplied env vars, as the
289
- # client should not set the db string on server side.
290
- request_body.env_vars.pop(constants.ENV_VAR_DB_CONNECTION_URI, None)
291
- os.environ.update(request_body.env_vars)
292
- # Note: may be overridden by AuthProxyMiddleware.
293
- # TODO(zhwu): we need to make the entire request a context available to the
294
- # entire request execution, so that we can access info like user through
295
- # the execution.
296
- user = models.User(id=request_body.env_vars[constants.USER_ID_ENV_VAR],
297
- name=request_body.env_vars[constants.USER_ENV_VAR])
298
- global_user_state.add_or_update_user(user)
299
- # Refetch the user to get the latest user info, including the created_at
300
- # field.
301
- user = global_user_state.get_user(user.id)
302
-
303
- # Force color to be enabled.
304
- os.environ['CLICOLOR_FORCE'] = '1'
305
- server_common.reload_for_new_request(
306
- client_entrypoint=request_body.entrypoint,
307
- client_command=request_body.entrypoint_command,
308
- using_remote_api_server=request_body.using_remote_api_server,
309
- user=user,
310
- request_id=request_id)
311
287
  try:
288
+ # Unset SKYPILOT_DEBUG by default, to avoid the value set on the API
289
+ # server affecting client requests. If set on the client side, it will
290
+ # be overridden by the request body.
291
+ os.environ.pop('SKYPILOT_DEBUG', None)
292
+ # Remove the db connection uri from client supplied env vars, as the
293
+ # client should not set the db string on server side.
294
+ request_body.env_vars.pop(constants.ENV_VAR_DB_CONNECTION_URI, None)
295
+ os.environ.update(request_body.env_vars)
296
+ # Note: may be overridden by AuthProxyMiddleware.
297
+ # TODO(zhwu): we need to make the entire request a context available to
298
+ # the entire request execution, so that we can access info like user
299
+ # through the execution.
300
+ user = models.User(id=request_body.env_vars[constants.USER_ID_ENV_VAR],
301
+ name=request_body.env_vars[constants.USER_ENV_VAR])
302
+ global_user_state.add_or_update_user(user)
303
+ # Refetch the user to get the latest user info, including the created_at
304
+ # field.
305
+ user = global_user_state.get_user(user.id)
306
+
307
+ # Force color to be enabled.
308
+ os.environ['CLICOLOR_FORCE'] = '1'
309
+ server_common.reload_for_new_request(
310
+ client_entrypoint=request_body.entrypoint,
311
+ client_command=request_body.entrypoint_command,
312
+ using_remote_api_server=request_body.using_remote_api_server,
313
+ user=user,
314
+ request_id=request_id)
312
315
  logger.debug(
313
316
  f'override path: {request_body.override_skypilot_config_path}')
314
317
  with skypilot_config.override_skypilot_config(
@@ -401,6 +404,8 @@ def _request_execution_wrapper(request_id: str,
401
404
  config = skypilot_config.to_dict()
402
405
  logger.debug(f'request config: \n'
403
406
  f'{yaml_utils.dump_yaml_str(dict(config))}')
407
+ metrics_lib.SKY_APISERVER_PROCESS_EXECUTION_START_TOTAL.labels(
408
+ request=request_name, pid=pid).inc()
404
409
  with metrics_lib.time_it(name=request_name,
405
410
  group='request_execution'):
406
411
  return_value = func(**request_body.to_kwargs())
@@ -439,11 +444,7 @@ def _request_execution_wrapper(request_id: str,
439
444
  logger.info(f'Request {request_id} finished')
440
445
  finally:
441
446
  with metrics_lib.time_it(name='release_memory', group='internal'):
442
- try:
443
- common_utils.release_memory()
444
- except Exception as e: # pylint: disable=broad-except
445
- logger.error(f'Failed to release memory: '
446
- f'{common_utils.format_exception(e)}')
447
+ common_utils.release_memory()
447
448
 
448
449
 
449
450
  async def execute_request_coroutine(request: api_requests.Request):
@@ -512,6 +512,14 @@ class JobsQueueBody(RequestBody):
512
512
  skip_finished: bool = False
513
513
  all_users: bool = False
514
514
  job_ids: Optional[List[int]] = None
515
+
516
+
517
+ class JobsQueueV2Body(RequestBody):
518
+ """The request body for the jobs queue endpoint."""
519
+ refresh: bool = False
520
+ skip_finished: bool = False
521
+ all_users: bool = False
522
+ job_ids: Optional[List[int]] = None
515
523
  user_match: Optional[str] = None
516
524
  workspace_match: Optional[str] = None
517
525
  name_match: Optional[str] = None
@@ -109,7 +109,13 @@ def decode_queue(return_value: List[dict],) -> List[Dict[str, Any]]:
109
109
 
110
110
 
111
111
  @register_decoders('jobs.queue')
112
- def decode_jobs_queue(return_value):
112
+ def decode_jobs_queue(return_value: List[dict],) -> List[Dict[str, Any]]:
113
+ # To keep backward compatibility with v0.10.2
114
+ return decode_jobs_queue_v2(return_value)
115
+
116
+
117
+ @register_decoders('jobs.queue_v2')
118
+ def decode_jobs_queue_v2(return_value) -> List[Dict[str, Any]]:
113
119
  """Decode jobs queue response.
114
120
 
115
121
  Supports legacy list, or a dict {jobs, total}.
@@ -6,7 +6,7 @@ import base64
6
6
  import dataclasses
7
7
  import pickle
8
8
  import typing
9
- from typing import Any, Dict, List, Optional, Tuple
9
+ from typing import Any, Dict, List, Optional, Tuple, Union
10
10
 
11
11
  from sky.schemas.api import responses
12
12
  from sky.server import constants as server_constants
@@ -121,7 +121,15 @@ def encode_status_kubernetes(
121
121
 
122
122
 
123
123
  @register_encoder('jobs.queue')
124
- def encode_jobs_queue(jobs_or_tuple):
124
+ def encode_jobs_queue(jobs: List[dict],) -> List[Dict[str, Any]]:
125
+ for job in jobs:
126
+ job['status'] = job['status'].value
127
+ return jobs
128
+
129
+
130
+ @register_encoder('jobs.queue_v2')
131
+ def encode_jobs_queue_v2(
132
+ jobs_or_tuple) -> Union[List[Dict[str, Any]], Dict[str, Any]]:
125
133
  # Support returning either a plain jobs list or a (jobs, total) tuple
126
134
  status_counts = {}
127
135
  if isinstance(jobs_or_tuple, tuple):
sky/server/server.py CHANGED
@@ -1734,7 +1734,12 @@ async def kubernetes_pod_ssh_proxy(websocket: fastapi.WebSocket,
1734
1734
  return
1735
1735
 
1736
1736
  logger.info(f'Starting port-forward to local port: {local_port}')
1737
+ conn_gauge = metrics.SKY_APISERVER_WEBSOCKET_CONNECTIONS.labels(
1738
+ pid=os.getpid())
1739
+ ssh_failed = False
1740
+ websocket_closed = False
1737
1741
  try:
1742
+ conn_gauge.inc()
1738
1743
  # Connect to the local port
1739
1744
  reader, writer = await asyncio.open_connection('127.0.0.1', local_port)
1740
1745
 
@@ -1742,9 +1747,21 @@ async def kubernetes_pod_ssh_proxy(websocket: fastapi.WebSocket,
1742
1747
  try:
1743
1748
  async for message in websocket.iter_bytes():
1744
1749
  writer.write(message)
1745
- await writer.drain()
1750
+ try:
1751
+ await writer.drain()
1752
+ except Exception as e: # pylint: disable=broad-except
1753
+ # Typically we will not reach here, if the ssh to pod
1754
+ # is disconnected, ssh_to_websocket will exit first.
1755
+ # But just in case.
1756
+ logger.error('Failed to write to pod through '
1757
+ f'port-forward connection: {e}')
1758
+ nonlocal ssh_failed
1759
+ ssh_failed = True
1760
+ break
1746
1761
  except fastapi.WebSocketDisconnect:
1747
1762
  pass
1763
+ nonlocal websocket_closed
1764
+ websocket_closed = True
1748
1765
  writer.close()
1749
1766
 
1750
1767
  async def ssh_to_websocket():
@@ -1752,15 +1769,44 @@ async def kubernetes_pod_ssh_proxy(websocket: fastapi.WebSocket,
1752
1769
  while True:
1753
1770
  data = await reader.read(1024)
1754
1771
  if not data:
1772
+ if not websocket_closed:
1773
+ logger.warning('SSH connection to pod is '
1774
+ 'disconnected before websocket '
1775
+ 'connection is closed')
1776
+ nonlocal ssh_failed
1777
+ ssh_failed = True
1755
1778
  break
1756
1779
  await websocket.send_bytes(data)
1757
1780
  except Exception: # pylint: disable=broad-except
1758
1781
  pass
1759
- await websocket.close()
1782
+ try:
1783
+ await websocket.close()
1784
+ except Exception: # pylint: disable=broad-except
1785
+ # The websocket might has been closed by the client.
1786
+ pass
1760
1787
 
1761
1788
  await asyncio.gather(websocket_to_ssh(), ssh_to_websocket())
1762
1789
  finally:
1763
- proc.terminate()
1790
+ conn_gauge.dec()
1791
+ reason = ''
1792
+ try:
1793
+ logger.info('Terminating kubectl port-forward process')
1794
+ proc.terminate()
1795
+ except ProcessLookupError:
1796
+ stdout = await proc.stdout.read()
1797
+ logger.error('kubectl port-forward was terminated before the '
1798
+ 'ssh websocket connection was closed. Remaining '
1799
+ f'output: {str(stdout)}')
1800
+ reason = 'KubectlPortForwardExit'
1801
+ metrics.SKY_APISERVER_WEBSOCKET_CLOSED_TOTAL.labels(
1802
+ pid=os.getpid(), reason='KubectlPortForwardExit').inc()
1803
+ else:
1804
+ if ssh_failed:
1805
+ reason = 'SSHToPodDisconnected'
1806
+ else:
1807
+ reason = 'ClientClosed'
1808
+ metrics.SKY_APISERVER_WEBSOCKET_CLOSED_TOTAL.labels(
1809
+ pid=os.getpid(), reason=reason).inc()
1764
1810
 
1765
1811
 
1766
1812
  @app.get('/all_contexts')
sky/server/uvicorn.py CHANGED
@@ -19,6 +19,7 @@ from uvicorn.supervisors import multiprocess
19
19
 
20
20
  from sky import sky_logging
21
21
  from sky.server import daemons
22
+ from sky.server import metrics as metrics_lib
22
23
  from sky.server import state
23
24
  from sky.server.requests import requests as requests_lib
24
25
  from sky.skylet import constants
@@ -212,6 +213,9 @@ class Server(uvicorn.Server):
212
213
  # Same as set PYTHONASYNCIODEBUG=1, but with custom threshold.
213
214
  event_loop.set_debug(True)
214
215
  event_loop.slow_callback_duration = lag_threshold
216
+ threading.Thread(target=metrics_lib.process_monitor,
217
+ args=('server',),
218
+ daemon=True).start()
215
219
  with self.capture_signals():
216
220
  asyncio.run(self.serve(*args, **kwargs))
217
221
 
sky/utils/common_utils.py CHANGED
@@ -1098,13 +1098,15 @@ def release_memory():
1098
1098
  """Release the process memory"""
1099
1099
  # Do the best effort to release the python heap and let malloc_trim
1100
1100
  # be more efficient.
1101
- gc.collect()
1102
- if sys.platform.startswith('linux'):
1103
- try:
1101
+ try:
1102
+ gc.collect()
1103
+ if sys.platform.startswith('linux'):
1104
1104
  # Will fail on musl (alpine), but at least it works on our
1105
1105
  # offical docker images.
1106
1106
  libc = ctypes.CDLL('libc.so.6')
1107
1107
  return libc.malloc_trim(0)
1108
- except (AttributeError, OSError):
1109
- return 0
1110
- return 0
1108
+ return 0
1109
+ except Exception as e: # pylint: disable=broad-except
1110
+ logger.error(f'Failed to release memory: '
1111
+ f'{format_exception(e)}')
1112
+ return 0
@@ -276,9 +276,8 @@ def _get_active_resources(
276
276
  # pylint: disable=import-outside-toplevel
277
277
  from sky.jobs.server import core as managed_jobs_core
278
278
  try:
279
- filtered_jobs, _, _, _ = managed_jobs_core.queue(refresh=False,
280
- skip_finished=True,
281
- all_users=True)
279
+ filtered_jobs, _, _, _ = managed_jobs_core.queue_v2(
280
+ refresh=False, skip_finished=True, all_users=True)
282
281
  return filtered_jobs
283
282
  except exceptions.ClusterNotUpError:
284
283
  logger.warning('All jobs should be finished.')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250907
3
+ Version: 1.0.0.dev20250909
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -145,48 +145,48 @@ Requires-Dist: grpcio>=1.63.0; extra == "server"
145
145
  Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "server"
146
146
  Requires-Dist: aiosqlite; extra == "server"
147
147
  Provides-Extra: all
148
- Requires-Dist: azure-common; extra == "all"
149
- Requires-Dist: azure-identity>=1.19.0; extra == "all"
150
- Requires-Dist: nebius>=0.2.47; extra == "all"
151
- Requires-Dist: azure-core>=1.24.0; extra == "all"
148
+ Requires-Dist: passlib; extra == "all"
149
+ Requires-Dist: boto3>=1.26.1; extra == "all"
150
+ Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
151
+ Requires-Dist: awscli>=1.27.10; extra == "all"
152
+ Requires-Dist: runpod>=1.6.1; extra == "all"
152
153
  Requires-Dist: python-dateutil; extra == "all"
153
- Requires-Dist: cudo-compute>=0.1.10; extra == "all"
154
- Requires-Dist: colorama<0.4.5; extra == "all"
155
- Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
154
+ Requires-Dist: anyio; extra == "all"
155
+ Requires-Dist: oci; extra == "all"
156
+ Requires-Dist: ibm-vpc; extra == "all"
157
+ Requires-Dist: pyjwt; extra == "all"
158
+ Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
159
+ Requires-Dist: casbin; extra == "all"
160
+ Requires-Dist: nebius>=0.2.47; extra == "all"
161
+ Requires-Dist: azure-common; extra == "all"
162
+ Requires-Dist: azure-core>=1.31.0; extra == "all"
163
+ Requires-Dist: azure-mgmt-network>=27.0.0; extra == "all"
156
164
  Requires-Dist: pydo>=0.3.0; extra == "all"
157
165
  Requires-Dist: aiosqlite; extra == "all"
158
- Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
159
- Requires-Dist: azure-core>=1.31.0; extra == "all"
160
166
  Requires-Dist: google-cloud-storage; extra == "all"
161
- Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
162
- Requires-Dist: casbin; extra == "all"
163
- Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
164
- Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
167
+ Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
168
+ Requires-Dist: colorama<0.4.5; extra == "all"
169
+ Requires-Dist: azure-cli>=2.65.0; extra == "all"
170
+ Requires-Dist: grpcio>=1.63.0; extra == "all"
165
171
  Requires-Dist: ibm-cloud-sdk-core; extra == "all"
172
+ Requires-Dist: msrestazure; extra == "all"
173
+ Requires-Dist: azure-identity>=1.19.0; extra == "all"
174
+ Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
175
+ Requires-Dist: msgraph-sdk; extra == "all"
176
+ Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
177
+ Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
178
+ Requires-Dist: docker; extra == "all"
179
+ Requires-Dist: ibm-cos-sdk; extra == "all"
166
180
  Requires-Dist: aiohttp; extra == "all"
167
181
  Requires-Dist: azure-storage-blob>=12.23.1; extra == "all"
168
- Requires-Dist: azure-mgmt-network>=27.0.0; extra == "all"
169
- Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
170
- Requires-Dist: docker; extra == "all"
171
- Requires-Dist: oci; extra == "all"
172
182
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
173
- Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
174
- Requires-Dist: ibm-cos-sdk; extra == "all"
175
- Requires-Dist: azure-cli>=2.65.0; extra == "all"
176
- Requires-Dist: awscli>=1.27.10; extra == "all"
177
- Requires-Dist: msgraph-sdk; extra == "all"
178
- Requires-Dist: botocore>=1.29.10; extra == "all"
179
- Requires-Dist: boto3>=1.26.1; extra == "all"
180
183
  Requires-Dist: websockets; extra == "all"
184
+ Requires-Dist: botocore>=1.29.10; extra == "all"
185
+ Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
181
186
  Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
182
- Requires-Dist: pyjwt; extra == "all"
183
- Requires-Dist: passlib; extra == "all"
184
- Requires-Dist: grpcio>=1.63.0; extra == "all"
185
- Requires-Dist: ibm-vpc; extra == "all"
186
- Requires-Dist: runpod>=1.6.1; extra == "all"
187
- Requires-Dist: anyio; extra == "all"
188
- Requires-Dist: msrestazure; extra == "all"
189
187
  Requires-Dist: sqlalchemy_adapter; extra == "all"
188
+ Requires-Dist: azure-core>=1.24.0; extra == "all"
189
+ Requires-Dist: cudo-compute>=0.1.10; extra == "all"
190
190
  Dynamic: author
191
191
  Dynamic: classifier
192
192
  Dynamic: description
@@ -1,4 +1,4 @@
1
- sky/__init__.py,sha256=kY3WA_M02kYceQ-C975LU6XuyDucMKMjLY1oKrdr7FA,6615
1
+ sky/__init__.py,sha256=PTHcPbPbGXk41qFTxFhNt-HhL2aYCzetMtthyF3mdWY,6615
2
2
  sky/admin_policy.py,sha256=XdcJnYqmude-LGGop-8U-FeiJcqtfYsYtIy4rmoCJnM,9799
3
3
  sky/authentication.py,sha256=00EHVELI7nuW7JQ_74t1RKIc7iohKnwdvlw6h2gXRmg,25487
4
4
  sky/check.py,sha256=Z7D6txaOAEL7fyEQ8q-Zxk1aWaHpEcl412Rj2mThbQ0,31025
@@ -112,17 +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=-5nixEf8-is4z7duz7bXdHxRQsLAW9NvkTZSVY-GIn8,1423
116
- sky/dashboard/out/clusters.html,sha256=Th5OofF3tuPiENTwFb8IwVQgYXA14QC9NoiJ_hj6K54,1418
117
- sky/dashboard/out/config.html,sha256=8iL3UtfjAhtOWPdCls73mKKPh_EtqSHwwzQwppsGEOY,1414
115
+ sky/dashboard/out/404.html,sha256=MLplBIsJvaFVUZHG4y7TNGcnWQGolYSa9nI3oocaKCU,1423
116
+ sky/dashboard/out/clusters.html,sha256=cqWoDJjiCh93xNnVzj4Q_MomcTPOnyTxeDAv2bzKBb4,1418
117
+ sky/dashboard/out/config.html,sha256=a1wGX5kpO3zKWSIeiXyJFQoNufvwcOun5V48MWHrO6A,1414
118
118
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
119
- sky/dashboard/out/index.html,sha256=pK3_4Gb4xUsRRJMhpVScf9yGGZuO5G4x7Y4Do12Rg6E,1407
120
- sky/dashboard/out/infra.html,sha256=K-WSNlgI0sO_webrKSwrLceyaYOQKgsgu6KCuw2bNUc,1412
121
- sky/dashboard/out/jobs.html,sha256=91AUVGYOJIKWmM5Ugzc6PAGeZr-gmBEkCX84dnURQ5M,1410
119
+ sky/dashboard/out/index.html,sha256=xcy1QqtcsSvLy2oUiFxNLOo1CP5GwaHEv1NYkw3_jYE,1407
120
+ sky/dashboard/out/infra.html,sha256=5KTE3zlrDcGMWriaPStrqTGsfZEFjZRgSY6_4iMjmRg,1412
121
+ sky/dashboard/out/jobs.html,sha256=Qt4ukh0c8mI5TiVHbLlfWqyXdUGS6oeRjWgVMicvtXI,1410
122
122
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
123
- sky/dashboard/out/users.html,sha256=PM4shJ-3Bc2TqGL_e2BIkXPr2BlLT1VqYFJzWAaTfRg,1412
124
- sky/dashboard/out/volumes.html,sha256=d0KMmtwab1S3bNjaM9NlVup6ulzVbTBtPmc4cT1N8Bs,1416
125
- sky/dashboard/out/workspaces.html,sha256=rpijymGfq3LZBLDU4f2QJny6chUkX46OMYJl_JzLMys,1422
123
+ sky/dashboard/out/users.html,sha256=ZLPwoOCGNClLy9hRAyGuNORs5lJfLGv0pgZVbxBHrm0,1412
124
+ sky/dashboard/out/volumes.html,sha256=iDx52IfW3pqumrguMMICJRDIJAZtrrwuKtx976m0xAc,1416
125
+ sky/dashboard/out/workspaces.html,sha256=NZhbwJp7srM8bdoBKbrclgr7l7MjaEyXAkAqGGSISbw,1422
126
126
  sky/dashboard/out/_next/static/chunks/1121-408ed10b2f9fce17.js,sha256=WRuwuuT4OiOBZc-c8VIS-vO9wtyRdKvGN51obQLfxwA,8596
127
127
  sky/dashboard/out/_next/static/chunks/1141-943efc7aff0f0c06.js,sha256=tUOoU0nIEShZeD5pBiOWrl8-czHc6PpnxxJilnDplHM,17330
128
128
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -150,7 +150,7 @@ sky/dashboard/out/_next/static/chunks/7325.b4bc99ce0892dcd5.js,sha256=5x42A-PEZA
150
150
  sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js,sha256=Dnmr9e-yZQbnkjwzqIZU3aK-3u1Tqr8STF-ODYWLkaw,13304
151
151
  sky/dashboard/out/_next/static/chunks/754-d0da8ab45f9509e9.js,sha256=R6UUmK1P1PfVx9zOU0jlBsVSk5ZchuPwWObAeVkkhU0,785694
152
152
  sky/dashboard/out/_next/static/chunks/7669.1f5d9a402bf5cc42.js,sha256=FbppLXkHKPxzVKrJg15FwCoqLU18yn5jBgYgDkjqDGM,52179
153
- sky/dashboard/out/_next/static/chunks/8969-0be3036bf86f8256.js,sha256=QfnTv9-pvtCM7xWv3k5-JTX4sLct3MnSZ3tcFcRDs_c,13411
153
+ sky/dashboard/out/_next/static/chunks/8969-0487dfbf149d9e53.js,sha256=1fKTpI3ZpW-xmd4nvUTN743Q7jMsKF0tdyMcux_gxrI,13417
154
154
  sky/dashboard/out/_next/static/chunks/9025.c12318fb6a1a9093.js,sha256=1Txv8nMuBYtB0UoWdwmFbkA2iB85jgKB1EJJrE1ETDo,10605
155
155
  sky/dashboard/out/_next/static/chunks/9037-fa1737818d0a0969.js,sha256=rsXWKdY-05Xc4ep2dfVHVodlKTecr-SZUHrnqfB1SXU,18931
156
156
  sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js,sha256=2lquiZSfbI-gX4j4TW4JSMLL_D5ShqwydgWpFyXrTy8,172834
@@ -158,7 +158,7 @@ sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js,sha256=_Qbam
158
158
  sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js,sha256=t7glRfataAjNw691Wni-ZU4a3BsygRzPKoI8NOm-lsY,116244
159
159
  sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js,sha256=jxOPLDVX3rkMc_jvGx2a-N2v6mvfOa8O6V0o-sLT0tI,110208
160
160
  sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
161
- sky/dashboard/out/_next/static/chunks/webpack-6f5f27e9d7900777.js,sha256=ApPe6VC9MxamBNNIq-r5C6TsW07JmYtbpuHhdcaof5s,4742
161
+ sky/dashboard/out/_next/static/chunks/webpack-d4fabc08788e14af.js,sha256=8CNpV3gDKr3NEsOm7T9gsbDzMM5DdX6BiV4NGcYEsvo,4742
162
162
  sky/dashboard/out/_next/static/chunks/pages/_app-ce361c6959bc2001.js,sha256=mllo4Yasw61zRtEO49uE_MrAutg9josSJShD0DNSjf0,95518
163
163
  sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js,sha256=vjERjtMAbVk-19LyPf1Jc-H6TMcrSznSz6brzNqbqf8,253
164
164
  sky/dashboard/out/_next/static/chunks/pages/clusters-469814d711d63b1b.js,sha256=p8CQtv5n745WbV7QdyCapmglI2s_2UBB-f_KZE4RAZg,879
@@ -177,16 +177,16 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-07349868f7905d37.j
177
177
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js,sha256=83s5N5CZwIaRcmYMfqn2we60n2VRmgFw6Tbx18b8-e0,762
178
178
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-af76bb06dbb3954f.js,sha256=cGCpDszMI6ckUHVelwAh9ZVk1erfz_UXSLz9GCqGUAE,1495
179
179
  sky/dashboard/out/_next/static/css/4614e06482d7309e.css,sha256=nk6GriyGVd1aGXrLd7BcMibnN4v0z-Q_mXGxrHFWqrE,56126
180
- sky/dashboard/out/_next/static/i60KpqkwvB9QVScj-NeKo/_buildManifest.js,sha256=Pvhr9Bwcc1m2lvV4irQGV1agk9EuhOz-ZAJ0ILvukmc,2428
181
- sky/dashboard/out/_next/static/i60KpqkwvB9QVScj-NeKo/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
182
- sky/dashboard/out/clusters/[cluster].html,sha256=FGQ9JSq54IuIPkaWV_mPfur7eunpH-gCPol4euWhNg0,2936
183
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=NfyfbnERHOP7qUI45eiHeMqj90-Uvac5Oz7N1Bsu0d4,2073
184
- sky/dashboard/out/infra/[context].html,sha256=7hwnsldYhOcUyvYMajt6HVaH0eiXiFTa7joSvz_ecAs,1436
185
- sky/dashboard/out/jobs/[job].html,sha256=G3BeYMD-axQgY_RKtwhAWOPp4OOOPPz7JnO-RzS2tw4,2304
186
- sky/dashboard/out/jobs/pools/[pool].html,sha256=cTUb3eMLJljNwD54CXS6nC4CowZmY5fJ9_2NmXB3F0k,2142
180
+ sky/dashboard/out/_next/static/eWytLgin5zvayQw3Xk46m/_buildManifest.js,sha256=M3g5SFf5NsLbAYOrUJIT6OE-W3rho8hzm5UG4KhH71I,2428
181
+ sky/dashboard/out/_next/static/eWytLgin5zvayQw3Xk46m/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
182
+ sky/dashboard/out/clusters/[cluster].html,sha256=v8rFPYkOaTeHQKbBF9UbQoxiFkXGOVxo0IpAsGp2qLg,2936
183
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=vkKslFQPHPaemEGBNksXSh-co_r8-9kHUDBzY5Zl2Tg,2073
184
+ sky/dashboard/out/infra/[context].html,sha256=6IEdnB79klHKBt4TwtwGz5cMGHJo5XmlDUloTTpY_lU,1436
185
+ sky/dashboard/out/jobs/[job].html,sha256=xBRE5DmSsKY1KWAntjtE4V5Dg5xEU0sr1SjURwjfCCw,2304
186
+ sky/dashboard/out/jobs/pools/[pool].html,sha256=gQdqHtX4PfaPkoTQ-x5KvGzxeVG7wGa0e8Pk5nUt55s,2142
187
187
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
188
- sky/dashboard/out/workspace/new.html,sha256=oo1olw9X57Hjs4xig1B1J1K0bOa-Sbx4lnbRUyzPZ_o,1428
189
- sky/dashboard/out/workspaces/[name].html,sha256=sxBTnCocuo5k39QuyE6bpgN9soL1jxjrWqweSeKWzik,2759
188
+ sky/dashboard/out/workspace/new.html,sha256=SrQb6BrGPh2yQK6mVxM-Jy25pSCgMdnSsBAX1oPRdLY,1428
189
+ sky/dashboard/out/workspaces/[name].html,sha256=W0R-FHXQomNpC5aTHkZrW8JF6ofMJ-pPHOtJ6yhCFIo,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
@@ -204,8 +204,8 @@ sky/jobs/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
204
204
  sky/jobs/client/sdk.py,sha256=ypSb8iRHWI7WEwai5ngBeShgBNTJf_0iehdGx-xyASA,16566
205
205
  sky/jobs/client/sdk_async.py,sha256=qOI5TB5FDdX36R9rZ1lL9ouzQtJ6qnZxuK9uoKF86oU,4791
206
206
  sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
207
- sky/jobs/server/core.py,sha256=rtD5S82P6NnHk5XDpeSlbg-0lGShRrZWRutOn_rDVs0,40821
208
- sky/jobs/server/server.py,sha256=Wi3TcDg9AnI3yEJNXBA0G5LudEUSdT4C9oiofAa_dfM,7263
207
+ sky/jobs/server/core.py,sha256=NzHZxkgRqJQWzBThcluPeLa9EK0GcKnC60eSyJGEVDs,42613
208
+ sky/jobs/server/server.py,sha256=tv2FiYOC-kDibLC_fA--7KZhAfdy-h6ul0KfrK2elLs,7894
209
209
  sky/jobs/server/utils.py,sha256=7YRZNF8BGTQwWRiY7P40n4hQpCCOkp9gBiapd5rVFaI,3517
210
210
  sky/logs/__init__.py,sha256=zW4gAEvWDz5S53FlLp3krAuKrmTSJ0e3kZDnhxSbW4E,722
211
211
  sky/logs/agent.py,sha256=qtH56xbnKYLPrepSIX63or5YBLaAEMh8atTGl77BUck,2767
@@ -357,14 +357,14 @@ sky/serve/server/server.py,sha256=zzHQdsFWdSzoAIgPw-SQsxem559psu31X6BG0sSWSxw,44
357
357
  sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
358
358
  sky/server/common.py,sha256=0sXjJqrAg1G1oZKg3492RzYuBjzCgXp8JXqyRIf3ysk,39410
359
359
  sky/server/config.py,sha256=lWggVysR8dFn5gxk1Xab9abyCyDBcA6kehEWFmWU97I,9916
360
- sky/server/constants.py,sha256=yjX8t73w6gj3_SDSP4vBFdNdiOqq7dnlXT2pw3yo0jM,2321
360
+ sky/server/constants.py,sha256=AMYqrvIziaAX65Yg39CSXZuCFf-lLuYSgM3APayDCB0,2321
361
361
  sky/server/daemons.py,sha256=ig0AAJzDdq7lOq5psyfk1yQ8GFl0XQFnKd0qKzzGxY4,9287
362
- sky/server/metrics.py,sha256=G9HMhioPmx9ppbyrPAk-pyVe5yUw6LBuXD5aRqqsEfM,6140
362
+ sky/server/metrics.py,sha256=gAmSQuPvIH8KEvyofQ2uUvEKcVCWLUhFArjAxaOJdeA,7971
363
363
  sky/server/rest.py,sha256=6Qcn6fjypP3j9UHdKRgvt2-PU1LKz2VU2aVQEA1D6EI,14354
364
- sky/server/server.py,sha256=ZCCtVsDV6uHYLEXHn9rsKFnmHfaGpDPDuNpjcw5qvZ8,81027
364
+ sky/server/server.py,sha256=BR3BsUpJuOukfLaxEdZfUvYXxjLZQDBnI7ztW3bTtko,83215
365
365
  sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
366
366
  sky/server/stream_utils.py,sha256=RrxRjZR0623A_ITjSMgUmDlXcSkT8NnNjb4f24OLiAE,9613
367
- sky/server/uvicorn.py,sha256=5Eps3F5jAgcIDVuXIDvXSz_rmBldy_y-pxwAuI6Audc,11440
367
+ sky/server/uvicorn.py,sha256=qC2eNUCmI8wetewC1RHn5VCfTUX4vxc_ZWsyXJfc5zw,11636
368
368
  sky/server/versions.py,sha256=3atZzUa7y1XeKNcrfVxKWAo_5ZyCOnbY7DKpIqed7Do,10011
369
369
  sky/server/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
370
370
  sky/server/auth/authn.py,sha256=zvabLsEAf9Ql6AbXJuWZ54uaiOr1mwFGGvQn84v66H4,2037
@@ -373,8 +373,8 @@ sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
373
373
  sky/server/html/token_page.html,sha256=eUndS5u1foL9vaWGPRTLMt7lCzD1g0wYJ2v_EeeFzlc,7046
374
374
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
375
375
  sky/server/requests/event_loop.py,sha256=OhpPbuce65bbjpGRlcJa78AVnYSm08SzFKt70ypCUuQ,1211
376
- sky/server/requests/executor.py,sha256=y0QEqK3bcrgqPSYcsn4SmIGfInACTnDrs-9ZfbHxzJ8,28599
377
- sky/server/requests/payloads.py,sha256=I12nhbqrp5ggkJGnJqwYBWgmjTCYXMoVEjQ5DuqOjIM,26812
376
+ sky/server/requests/executor.py,sha256=taUZgDX7pG5X_daEa8nGbKKNAeZjAjyL1IN5L3G7ZWs,28761
377
+ sky/server/requests/payloads.py,sha256=ftoUNiBDRPBOQw8nSRXW6zQv8uI9SICdznarh701Brs,27032
378
378
  sky/server/requests/preconditions.py,sha256=KxTAoYqpJU96Ot36NHtRq3PC3f_BXk_cHI0b2eA8U6A,7323
379
379
  sky/server/requests/process.py,sha256=UpJp5rZizNMFRCNRtudFSjbcJhFarFbtAGDWI9x_ZyE,13197
380
380
  sky/server/requests/requests.py,sha256=T6-cYE5h3qGiPadt7jQV8t0UTQXAEGK1Ejx5XThEYIE,30147
@@ -382,8 +382,8 @@ sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
382
382
  sky/server/requests/queues/local_queue.py,sha256=X6VkBiUmgd_kfqIK1hCtMWG1b8GiZbY70TBiBR6c6GY,416
383
383
  sky/server/requests/queues/mp_queue.py,sha256=jDqP4Jd28U3ibSFyMR1DF9I2OWZrPZqFJrG5S6RFpyw,3403
384
384
  sky/server/requests/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
385
- sky/server/requests/serializers/decoders.py,sha256=zE2BeTYVcBAK6a_V9YmMPRBQ9xos5tjdkrR7TH2VLGc,7417
386
- sky/server/requests/serializers/encoders.py,sha256=EsKpscRTjxLRgDDw4DgJNjmRu1q-5bvj6zBe-tebaLc,7584
385
+ sky/server/requests/serializers/decoders.py,sha256=3SSfn1S1H0zEwncMRw3D8pfyqz_sWkWweBqnX-8Lr3I,7652
386
+ sky/server/requests/serializers/encoders.py,sha256=vBY1j7ZzthUqhm0rPQsj0LC89wvsugljnq_JE06OZOA,7834
387
387
  sky/setup_files/MANIFEST.in,sha256=4gbgHHwSdP6BbMJv5XOt-2K6wUVWF_T9CGsdESvh918,776
388
388
  sky/setup_files/alembic.ini,sha256=854_UKvCaFmZ8vI16tSHbGgP9IMFQ42Td6c9Zmn2Oxs,5079
389
389
  sky/setup_files/dependencies.py,sha256=rNs8UXu6gbWiOWh9WC3_fZu5MIaiep6eRH65GbqAb34,7963
@@ -470,7 +470,7 @@ sky/utils/cluster_utils.py,sha256=S8qjky9x1vkLAN4fhLkA8atJVtjdpvueqnZLEiuD5YQ,14
470
470
  sky/utils/command_runner.py,sha256=nLOynQUqKpxqpxHcqEw34X5P24e8parWlluvziRFx2A,48779
471
471
  sky/utils/command_runner.pyi,sha256=IS3qeCTgWys94KhaHx3S2Pty8qDWn_zFht7bgDLJFcw,9593
472
472
  sky/utils/common.py,sha256=yJc110y8rwcBIKEJgb8kUD4e1OeolFEVtonwmqtAxCM,2729
473
- sky/utils/common_utils.py,sha256=Z4QI9nYsZSb1K_3pbREx8-j1e7SpWdlupofZprMdNU8,38535
473
+ sky/utils/common_utils.py,sha256=RWR8KDQUBM7Pp2OJb0YgXugf8G10pNsnI7vXLIPLW94,38654
474
474
  sky/utils/config_utils.py,sha256=agfDWJi79DH5XKD_GBvUwhRwmB0-ZkYbKCjcEgV6gP4,13861
475
475
  sky/utils/context.py,sha256=yEGvcKr9fKEeoAnNKiXDiky7dlLOChFdZYXGr0EeQ9g,9997
476
476
  sky/utils/context_utils.py,sha256=cby-QPmnGObjIE4K7eZ_dkWZdUo7YJUmnJr5oKf_v54,6712
@@ -489,7 +489,7 @@ sky/utils/log_utils.py,sha256=RB5n58CAWmVepd_RAf-mjL2EViBFbtkPtSB5jJT6pLY,29684
489
489
  sky/utils/message_utils.py,sha256=zi2Z7PEX6Xq_zvho-aEZe_J7UvpKOLdVDdGAcipRQPU,2662
490
490
  sky/utils/perf_utils.py,sha256=HxmTmVQc5DSfqJwISPxdVLWmUxNZHbibJg1kKVI-1Cg,700
491
491
  sky/utils/registry.py,sha256=I08nS0rvCF-xR5GEZoHEVgN1jcOeglz77h7xPpBCIjU,4179
492
- sky/utils/resource_checker.py,sha256=WMHCwWHQOtk0l9FiehQi42tfNgA2AyvaCbbfENSP9BQ,10633
492
+ sky/utils/resource_checker.py,sha256=Cy-pWbkzoBJG5Ny5YK71cr7VHhR-pGBHb3Tk13POUB8,10531
493
493
  sky/utils/resources_utils.py,sha256=3wnzmSIldFS5NmHTx6r2viS8zaP1q20noQolgQqucUU,16722
494
494
  sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
495
495
  sky/utils/rich_utils.py,sha256=Q-N5bZGfvqciU5cuQacInoNpldZcaMKCdBX2368KIDA,19971
@@ -539,9 +539,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
539
539
  sky/workspaces/core.py,sha256=AjwbbRwk0glzCnqICJk4sQzMoUcawixbXoQWKLB3-aQ,25372
540
540
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
541
541
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
542
- skypilot_nightly-1.0.0.dev20250907.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
543
- skypilot_nightly-1.0.0.dev20250907.dist-info/METADATA,sha256=TiGKM3CZMX_wbAcKCUdyBWgm8qeWTz5H2O3mAth8tKs,19793
544
- skypilot_nightly-1.0.0.dev20250907.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
545
- skypilot_nightly-1.0.0.dev20250907.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
546
- skypilot_nightly-1.0.0.dev20250907.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
547
- skypilot_nightly-1.0.0.dev20250907.dist-info/RECORD,,
542
+ skypilot_nightly-1.0.0.dev20250909.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
543
+ skypilot_nightly-1.0.0.dev20250909.dist-info/METADATA,sha256=EUCUP5bv9ecGDastrWIPB8aMOozU_qLy_ZwlGrEr6yA,19793
544
+ skypilot_nightly-1.0.0.dev20250909.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
545
+ skypilot_nightly-1.0.0.dev20250909.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
546
+ skypilot_nightly-1.0.0.dev20250909.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
547
+ skypilot_nightly-1.0.0.dev20250909.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8969],{68969:function(e,t,o){o.d(t,{Ce:function(){return p},NJ:function(){return h},UA:function(){return u},aT:function(){return i},getManagedJobs:function(){return l},jh:function(){return b},vs:function(){return d}});var r=o(67294),a=o(15821),n=o(93225),c=o(6378),s=o(47145);async function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{var t;let{allUsers:o=!0,nameMatch:r,userMatch:a,workspaceMatch:c,poolMatch:l,page:i,limit:d,statuses:u}=e,h={all_users:o,verbose:!0};void 0!==r&&(h.name_match=r),void 0!==a&&(h.user_match=a),void 0!==c&&(h.workspace_match=c),void 0!==l&&(h.pool_match=l),void 0!==i&&(h.page=i),void 0!==d&&(h.limit=d),void 0!==u&&u.length>0&&(h.statuses=u);let p=(await s.x.post("/jobs/queue",h)).headers.get("X-Skypilot-Request-ID"),b=await s.x.get("/api/get?request_id=".concat(p));if(500===b.status){try{let e=await b.json();if(e.detail&&e.detail.error)try{let t=JSON.parse(e.detail.error);if(t.type&&t.type===n.iW)return{jobs:[],total:0,controllerStopped:!0}}catch(e){console.error("Error parsing JSON:",e)}}catch(e){console.error("Error parsing JSON:",e)}return{jobs:[],total:0,controllerStopped:!1}}let g=await b.json(),f=g.return_value?JSON.parse(g.return_value):[],m=Array.isArray(f)?f:(null==f?void 0:f.jobs)||[],_=Array.isArray(f)?m.length:null!==(t=null==f?void 0:f.total)&&void 0!==t?t:m.length,y=(null==f?void 0:f.total_no_filter)||_,w=(null==f?void 0:f.status_counts)||{};return{jobs:m.map(e=>{var t;let o=0;e.end_at&&e.submitted_at?o=e.end_at-e.submitted_at:e.submitted_at&&(o=Date.now()/1e3-e.submitted_at);let r=[];e.submitted_at&&r.push({type:"PENDING",timestamp:e.submitted_at}),e.start_at&&r.push({type:"RUNNING",timestamp:e.start_at}),e.end_at&&r.push({type:e.status,timestamp:e.end_at});let a="",n="",c="",s="",l="";try{if(a=e.cloud||"",c=e.cluster_resources,n=e.region||"",a&&(s=a,n&&(s+="/".concat(n))),l=s,e.accelerators){let t=Object.entries(e.accelerators).map(e=>{let[t,o]=e;return"".concat(o,"x").concat(t)}).join(", ");t&&(l+=" (".concat(t,")"))}}catch(t){c=e.cluster_resources}return{id:e.job_id,task_job_id:e._job_id,task:e.task_name,name:e.job_name,job_duration:e.job_duration,total_duration:o,workspace:e.workspace,status:e.status,requested_resources:e.resources,resources_str:c,resources_str_full:e.cluster_resources_full||c,cloud:a,region:e.region,infra:s,full_infra:l,recoveries:e.recovery_count,details:e.details||e.failure_reason,user:e.user_name,user_hash:e.user_hash,submitted_at:e.submitted_at?new Date(1e3*e.submitted_at):null,events:r,dag_yaml:e.user_yaml,entrypoint:e.entrypoint,git_commit:(null===(t=e.metadata)||void 0===t?void 0:t.git_commit)||"-",pool:e.pool,pool_hash:e.pool_hash,current_cluster_name:e.current_cluster_name,job_id_on_pool_cluster:e.job_id_on_pool_cluster}}),total:_,totalNoFilter:y,controllerStopped:!1,statusCounts:w}}catch(e){return console.error("Error fetching managed job data:",e),{jobs:[],total:0,totalNoFilter:0,controllerStopped:!1,statusCounts:{}}}}async function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{allUsers:t=!0,nameMatch:o,userMatch:r,workspaceMatch:a,poolMatch:n,page:c=1,limit:s=10,useClientPagination:i=!0}=e;try{if(!i)return await l(e);let d=await l({allUsers:t,nameMatch:o,userMatch:r,workspaceMatch:a,poolMatch:n});if(d.controllerStopped||!d.jobs)return d;let u=d.jobs,h=u.length,p=(c-1)*s;return{jobs:u.slice(p,p+s),total:h,controllerStopped:!1}}catch(e){return console.error("Error fetching managed job data with client pagination:",e),{jobs:[],total:0,controllerStopped:!1}}}async function d(){try{let e=(await s.x.post("/jobs/pool_status",{pool_names:null})).headers.get("X-Skypilot-Request-ID"),t=await s.x.get("/api/get?request_id=".concat(e));if(500===t.status){try{let e=await t.json();if(e.detail&&e.detail.error)try{let t=JSON.parse(e.detail.error);if(t.type&&t.type===n.iW)return{pools:[],controllerStopped:!0}}catch(e){console.error("Failed to parse error JSON:",e)}}catch(e){console.error("Failed to parse response JSON:",e)}throw Error("Server error")}let o=await t.json(),r=o.return_value?JSON.parse(o.return_value):[],a={jobs:[]};try{let e=await l({allUsers:!0});e.controllerStopped||(a=e)}catch(e){console.warn("Failed to fetch jobs for pool job counts:",e)}let c={},i=["SUCCEEDED","FAILED","FAILED_SETUP","FAILED_PRECHECKS","FAILED_NO_RESOURCE","FAILED_CONTROLLER","CANCELLED"];return a.jobs&&Array.isArray(a.jobs)&&a.jobs.forEach(e=>{let t=e.pool,o=e.status;t&&!i.includes(o)&&(c[t]||(c[t]={}),c[t][o]=(c[t][o]||0)+1)}),{pools:r.map(e=>({...e,jobCounts:c[e.name]||{}})),controllerStopped:!1}}catch(e){throw console.error("Error fetching pools:",e),e}}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,[o,a]=(0,r.useState)(null),[n,s]=(0,r.useState)(!0);return(0,r.useEffect)(()=>{(async function(){if(e)try{var t;s(!0);let o=await c.default.get(l,[{allUsers:!0}]),r=null==o?void 0:null===(t=o.jobs)||void 0===t?void 0:t.find(t=>String(t.id)===String(e));r?a({jobs:[r],controllerStopped:o.controllerStopped||!1}):a({jobs:[],controllerStopped:o.controllerStopped||!1})}catch(e){console.error("Error fetching single managed job data:",e),a({jobs:[],controllerStopped:!1})}finally{s(!1)}})()},[e,t]),{jobData:o,loading:n}}async function h(e){let t,{jobId:o,controller:r=!1,signal:c,onNewLog:s}=e,l=Date.now(),i=new Promise(e=>{let o=()=>{let r=Date.now()-l;r>=3e4?e({timeout:!0}):t=setTimeout(o,3e4-r)};t=setTimeout(o,3e4)}),d=window.location.origin,u="".concat(d).concat(n.f4),h=(async()=>{try{let e=(await fetch("".concat(u,"/jobs/logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({controller:r,follow:!1,job_id:o,tail:1e4}),...c?{signal:c}:{}})).body.getReader();try{for(;;){let{done:t,value:o}=await e.read();if(t)break;l=Date.now();let r=new TextDecoder().decode(o);s(r)}}finally{if(!c||!c.aborted)try{e.cancel()}catch(e){"AbortError"!==e.name&&console.warn("Error canceling reader:",e)}t&&clearTimeout(t)}return{timeout:!1}}catch(e){if(t&&clearTimeout(t),"AbortError"===e.name)return{timeout:!1};throw e}})(),p=await Promise.race([h,i]);if(t&&clearTimeout(t),p.timeout){(0,a.C)("Log request for job ".concat(o," timed out after ").concat(30,"s of inactivity"),"warning");return}}async function p(e,t,o){let r="",c="",s="",l={};if("restartcontroller"===e)r="Restarting",c="restarted",s="jobs/queue",l={all_users:!0,refresh:!0},t="controller";else throw Error("Invalid action: ".concat(e));(0,a.C)("".concat(r," job ").concat(t,"..."),"info");let i=window.location.origin,d="".concat(i).concat(n.f4);try{try{let e=(await fetch("".concat(d,"/").concat(s),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)})).headers.get("X-Skypilot-Request-ID"),i=await fetch("".concat(d,"/api/get?request_id=").concat(e));if(200===i.status)(0,a.C)("Job ".concat(t," ").concat(c," successfully."),"success");else if(500===i.status)try{let e=await i.json();if(e.detail&&e.detail.error)try{let c=JSON.parse(e.detail.error);c.type&&c.type===n.Bo?(0,a.C)("".concat(r," job ").concat(t," is not supported!"),"error",1e4):c.type&&c.type===n.mF?(0,a.C)("Cluster ".concat(o," does not exist."),"error"):c.type&&c.type===n.iW?(0,a.C)("Cluster ".concat(o," is not up."),"error"):(0,a.C)("".concat(r," job ").concat(t," failed: ").concat(c.type),"error")}catch(o){(0,a.C)("".concat(r," job ").concat(t," failed: ").concat(e.detail.error),"error")}else(0,a.C)("".concat(r," job ").concat(t," failed with no details."),"error")}catch(e){(0,a.C)("".concat(r," job ").concat(t," failed with parse error."),"error")}else(0,a.C)("".concat(r," job ").concat(t," failed with status ").concat(i.status,"."),"error")}catch(e){console.error("Fetch error:",e),(0,a.C)("Network error ".concat(r," job ").concat(t,": ").concat(e.message),"error")}}catch(e){console.error("Error in handleStop:",e),(0,a.C)("Critical error ".concat(r," job ").concat(t,": ").concat(e.message),"error")}}async function b(e){let{jobId:t=null,name:o=null,controller:r=!1}=e;try{let e=await s.x.fetch("/jobs/download_logs",{job_id:t,name:o,controller:r,refresh:!1}),c=Object.values(e||{});if(!c.length){(0,a.C)("No logs found to download.","warning");return}let l=window.location.origin,i="".concat(l).concat(n.f4,"/download"),d=await fetch("".concat(i,"?relative=items"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({folder_paths:c})});if(!d.ok){let e=await d.text();throw Error("Download failed: ".concat(d.status," ").concat(e))}let u=await d.blob(),h=window.URL.createObjectURL(u),p=document.createElement("a"),b=new Date().toISOString().replace(/[:.]/g,"-"),g=t?"job-".concat(t):o?"job-".concat(o):"job";p.href=h,p.download="managed-".concat(g,"-").concat(r?"controller-logs":"logs","-").concat(b,".zip"),document.body.appendChild(p),p.click(),p.remove(),window.URL.revokeObjectURL(h)}catch(e){console.error("Error downloading managed job logs:",e),(0,a.C)("Error downloading managed job logs: ".concat(e.message),"error")}}},15821:function(e,t,o){o.d(t,{C:function(){return r}});function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e3,r=document.getElementById("toast-container");r||((r=document.createElement("div")).id="toast-container",r.className="fixed top-0 right-0 p-4 z-[9999] flex flex-col items-end space-y-2",document.body.appendChild(r));let a=document.createElement("div");switch(a.className="rounded-md border-l-4 p-4 shadow-md flex items-center justify-between max-w-md w-full mb-2 pointer-events-auto",t){case"success":a.className+=" bg-green-100 border-green-500 text-green-800";break;case"error":a.className+=" bg-red-100 border-red-500 text-red-800";break;case"warning":a.className+=" bg-yellow-100 border-yellow-500 text-yellow-800";break;default:a.className+=" bg-blue-100 border-blue-500 text-blue-800"}return a.innerHTML='\n <div class="flex-1 mr-2">\n <p class="text-sm font-medium">'.concat(e,'</p>\n </div>\n <button class="text-gray-500 hover:text-gray-700 focus:outline-none" aria-label="Close toast">\n <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <line x1="18" y1="6" x2="6" y2="18"></line>\n <line x1="6" y1="6" x2="18" y2="18"></line>\n </svg>\n </button>\n '),r.appendChild(a),a.querySelector("button").addEventListener("click",()=>{r.removeChild(a)}),setTimeout(()=>{r.contains(a)&&r.removeChild(a)},o),a}},6378:function(e,t,o){o.r(t),o.d(t,{DashboardCache:function(){return a},dashboardCache:function(){return n}});let r=o(51214).ej.DEFAULT_TTL;class a{setPreloader(e){this.preloader=e}async get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=o.ttl||r,n=!1!==o.refreshOnAccess,c=this._generateKey(e,t),s=e.name||"anonymous",l=this.cache.get(c),i=Date.now();if(l&&i-l.lastUpdated<a){let o=Math.round((i-l.lastUpdated)/1e3);if(this._debug("Cache HIT for ".concat(s," (age: ").concat(o,"s, TTL: ").concat(Math.round(a/1e3),"s)")),n&&(this.cache.set(c,{data:l.data,lastUpdated:i}),this._debug("Cache TTL refreshed for ".concat(s))),!this.backgroundJobs.has(c)){var d;(null===(d=this.preloader)||void 0===d?void 0:d.wasRecentlyPreloaded(e,t))?this._debug("Skipping background refresh for ".concat(s," - recently preloaded")):this._refreshInBackground(e,t,c)}return l.data}try{let o=await e(...t);return this.cache.set(c,{data:o,lastUpdated:i}),o}catch(e){if(l)return console.warn("Failed to fetch fresh data for ".concat(c,", returning stale data:"),e),l.data;throw e}}invalidate(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=this._generateKey(e,t);this.cache.delete(o),this.backgroundJobs.delete(o)}invalidateFunction(e){let t=e.name||"anonymous",o=[];for(let e of this.cache.keys())e.startsWith("".concat(t,"_"))&&o.push(e);o.forEach(e=>{this.cache.delete(e),this.backgroundJobs.delete(e)})}clear(){this.cache.clear(),this.backgroundJobs.clear()}getStats(){return{cacheSize:this.cache.size,backgroundJobs:this.backgroundJobs.size,keys:Array.from(this.cache.keys())}}getDetailedStats(){let e=Date.now(),t=[];for(let[o,r]of this.cache.entries()){let a=e-r.lastUpdated;t.push({key:o,age:Math.round(a/1e3),lastUpdated:new Date(r.lastUpdated).toISOString(),hasBackgroundJob:this.backgroundJobs.has(o)})}return{cacheSize:this.cache.size,backgroundJobs:this.backgroundJobs.size,entries:t.sort((e,t)=>e.age-t.age)}}setDebugMode(e){this.debugMode=e}_debug(e){for(var t=arguments.length,o=Array(t>1?t-1:0),r=1;r<t;r++)o[r-1]=arguments[r];this.debugMode&&console.log("[DashboardCache] ".concat(e),...o)}_refreshInBackground(e,t,o){this.backgroundJobs.set(o,!0),e(...t).then(e=>{this.cache.set(o,{data:e,lastUpdated:Date.now()})}).catch(e=>{console.warn("Background refresh failed for ".concat(o,":"),e)}).finally(()=>{this.backgroundJobs.delete(o)})}_generateKey(e,t){let o=function(e){let t=5381;for(let o=0;o<e.length;o++)t=(t<<5)+t+e.charCodeAt(o);return t>>>0}(e.toString()),r=t.length>0?JSON.stringify(t):"";return"".concat(o,"_").concat(r)}constructor(){this.cache=new Map,this.backgroundJobs=new Map,this.debugMode=!1,this.preloader=null}}let n=new a;t.default=n}}]);