skypilot-nightly 1.0.0.dev20250701__py3-none-any.whl → 1.0.0.dev20250703__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.
Files changed (43) hide show
  1. sky/__init__.py +2 -2
  2. sky/catalog/__init__.py +1 -1
  3. sky/client/cli/command.py +60 -21
  4. sky/dashboard/out/404.html +1 -1
  5. sky/dashboard/out/_next/static/{Md3rlE87jmL5uv7gSo8mR → A-fbCEgJE_q2cV8biIOIr}/_buildManifest.js +1 -1
  6. sky/dashboard/out/_next/static/chunks/9984.b56614f3c4c5961d.js +1 -0
  7. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-1159f362b960e2b8.js +6 -0
  8. sky/dashboard/out/_next/static/chunks/{webpack-d427db53e54de9ce.js → webpack-9a81ea998672c303.js} +1 -1
  9. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  10. sky/dashboard/out/clusters/[cluster].html +1 -1
  11. sky/dashboard/out/clusters.html +1 -1
  12. sky/dashboard/out/config.html +1 -1
  13. sky/dashboard/out/index.html +1 -1
  14. sky/dashboard/out/infra/[context].html +1 -1
  15. sky/dashboard/out/infra.html +1 -1
  16. sky/dashboard/out/jobs/[job].html +1 -1
  17. sky/dashboard/out/jobs.html +1 -1
  18. sky/dashboard/out/users.html +1 -1
  19. sky/dashboard/out/volumes.html +1 -1
  20. sky/dashboard/out/workspace/new.html +1 -1
  21. sky/dashboard/out/workspaces/[name].html +1 -1
  22. sky/dashboard/out/workspaces.html +1 -1
  23. sky/jobs/server/core.py +13 -10
  24. sky/metrics/__init__.py +0 -0
  25. sky/metrics/utils.py +210 -0
  26. sky/optimizer.py +1 -1
  27. sky/resources.py +145 -7
  28. sky/server/common.py +13 -2
  29. sky/server/server.py +91 -7
  30. sky/skylet/constants.py +3 -0
  31. sky/skypilot_config.py +62 -53
  32. sky/utils/accelerator_registry.py +28 -1
  33. sky/utils/schemas.py +3 -0
  34. sky/utils/ux_utils.py +9 -4
  35. {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/METADATA +1 -1
  36. {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/RECORD +41 -39
  37. sky/dashboard/out/_next/static/chunks/9984.739ae958a066298d.js +0 -1
  38. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b8e1114e6d38218c.js +0 -6
  39. /sky/dashboard/out/_next/static/{Md3rlE87jmL5uv7gSo8mR → A-fbCEgJE_q2cV8biIOIr}/_ssgManifest.js +0 -0
  40. {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/WHEEL +0 -0
  41. {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/entry_points.txt +0 -0
  42. {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/licenses/LICENSE +0 -0
  43. {skypilot_nightly-1.0.0.dev20250701.dist-info → skypilot_nightly-1.0.0.dev20250703.dist-info}/top_level.txt +0 -0
sky/server/server.py CHANGED
@@ -14,6 +14,7 @@ import os
14
14
  import pathlib
15
15
  import posixpath
16
16
  import re
17
+ import resource
17
18
  import shutil
18
19
  import sys
19
20
  import threading
@@ -39,6 +40,7 @@ from sky import models
39
40
  from sky import sky_logging
40
41
  from sky.data import storage_utils
41
42
  from sky.jobs.server import server as jobs_rest
43
+ from sky.metrics import utils as metrics_utils
42
44
  from sky.provision.kubernetes import utils as kubernetes_utils
43
45
  from sky.serve.server import server as serve_rest
44
46
  from sky.server import common
@@ -218,14 +220,26 @@ class RequestIDMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
218
220
 
219
221
 
220
222
  def _get_auth_user_header(request: fastapi.Request) -> Optional[models.User]:
221
- if 'X-Auth-Request-Email' not in request.headers:
223
+ header_name = os.environ.get(constants.ENV_VAR_SERVER_AUTH_USER_HEADER,
224
+ 'X-Auth-Request-Email')
225
+ if header_name not in request.headers:
222
226
  return None
223
- user_name = request.headers['X-Auth-Request-Email']
227
+ user_name = request.headers[header_name]
224
228
  user_hash = hashlib.md5(
225
229
  user_name.encode()).hexdigest()[:common_utils.USER_HASH_LENGTH]
226
230
  return models.User(id=user_hash, name=user_name)
227
231
 
228
232
 
233
+ class InitializeRequestAuthUserMiddleware(
234
+ starlette.middleware.base.BaseHTTPMiddleware):
235
+
236
+ async def dispatch(self, request: fastapi.Request, call_next):
237
+ # Make sure that request.state.auth_user is set. Otherwise, we may get a
238
+ # KeyError while trying to read it.
239
+ request.state.auth_user = None
240
+ return await call_next(request)
241
+
242
+
229
243
  class BasicAuthMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
230
244
  """Middleware to handle HTTP Basic Auth."""
231
245
 
@@ -406,6 +420,18 @@ class AuthProxyMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
406
420
  async def dispatch(self, request: fastapi.Request, call_next):
407
421
  auth_user = _get_auth_user_header(request)
408
422
 
423
+ if request.state.auth_user is not None:
424
+ # Previous middleware is trusted more than this middleware. For
425
+ # instance, a client could set the Authorization and the
426
+ # X-Auth-Request-Email header. In that case, the auth proxy will be
427
+ # skipped and we should rely on the Bearer token to authenticate the
428
+ # user - but that means the user could set X-Auth-Request-Email to
429
+ # whatever the user wants. We should thus ignore it.
430
+ if auth_user is not None:
431
+ logger.debug('Warning: ignoring auth proxy header since the '
432
+ 'auth user was already set.')
433
+ return await call_next(request)
434
+
409
435
  # Add user to database if auth_user is present
410
436
  if auth_user is not None:
411
437
  newly_added = global_user_state.add_or_update_user(auth_user)
@@ -416,8 +442,6 @@ class AuthProxyMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
416
442
  # Store user info in request.state for access by GET endpoints
417
443
  if auth_user is not None:
418
444
  request.state.auth_user = auth_user
419
- else:
420
- request.state.auth_user = None
421
445
 
422
446
  await _override_user_info_in_request_body(request, auth_user)
423
447
  return await call_next(request)
@@ -536,10 +560,17 @@ class GracefulShutdownMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
536
560
 
537
561
 
538
562
  app = fastapi.FastAPI(prefix='/api/v1', debug=True, lifespan=lifespan)
563
+ # Middleware wraps in the order defined here. E.g., given
564
+ # app.add_middleware(Middleware1)
565
+ # app.add_middleware(Middleware2)
566
+ # app.add_middleware(Middleware3)
567
+ # The effect will be like:
568
+ # Middleware3(Middleware2(Middleware1(request)))
569
+ # If MiddlewareN does something like print(n); call_next(); print(n), you'll get
570
+ # 3; 2; 1; <request>; 1; 2; 3
539
571
  # Use environment variable to make the metrics middleware optional.
540
572
  if os.environ.get(constants.ENV_VAR_SERVER_METRICS_ENABLED):
541
573
  app.add_middleware(metrics.PrometheusMiddleware)
542
- app.add_middleware(RBACMiddleware)
543
574
  app.add_middleware(InternalDashboardPrefixMiddleware)
544
575
  app.add_middleware(GracefulShutdownMiddleware)
545
576
  app.add_middleware(PathCleanMiddleware)
@@ -552,15 +583,26 @@ app.add_middleware(
552
583
  allow_credentials=True,
553
584
  allow_methods=['*'],
554
585
  allow_headers=['*'],
555
- # TODO(syang): remove X-Request-ID when v0.10.0 is released.
586
+ # TODO(syang): remove X-Request-ID \when v0.10.0 is released.
556
587
  expose_headers=['X-Request-ID', 'X-Skypilot-Request-ID'])
588
+ # The order of all the authentication-related middleware is important.
589
+ # RBACMiddleware must precede all the auth middleware, so it can access
590
+ # request.state.auth_user.
591
+ app.add_middleware(RBACMiddleware)
592
+ # AuthProxyMiddleware should precede BasicAuthMiddleware and
593
+ # BearerTokenMiddleware, since it should be skipped if either of those set the
594
+ # auth user.
595
+ app.add_middleware(AuthProxyMiddleware)
557
596
  enable_basic_auth = os.environ.get(constants.ENV_VAR_ENABLE_BASIC_AUTH, 'false')
558
597
  if str(enable_basic_auth).lower() == 'true':
559
598
  app.add_middleware(BasicAuthMiddleware)
560
599
  # Bearer token middleware should always be present to handle service account
561
600
  # authentication
562
601
  app.add_middleware(BearerTokenMiddleware)
563
- app.add_middleware(AuthProxyMiddleware)
602
+ # InitializeRequestAuthUserMiddleware must be the last added middleware so that
603
+ # request.state.auth_user is always set, but can be overridden by the auth
604
+ # middleware above.
605
+ app.add_middleware(InitializeRequestAuthUserMiddleware)
564
606
  app.add_middleware(RequestIDMiddleware)
565
607
  app.include_router(jobs_rest.router, prefix='/jobs', tags=['jobs'])
566
608
  app.include_router(serve_rest.router, prefix='/serve', tags=['serve'])
@@ -573,6 +615,16 @@ app.include_router(ssh_node_pools_rest.router,
573
615
  prefix='/ssh_node_pools',
574
616
  tags=['ssh_node_pools'])
575
617
 
618
+ # Increase the limit of files we can open to our hard limit. This fixes bugs
619
+ # where we can not aquire file locks or open enough logs and the API server
620
+ # crashes. On Mac, the hard limit is 9,223,372,036,854,775,807.
621
+ # TODO(luca) figure out what to do if we need to open more than 2^63 files.
622
+ try:
623
+ soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
624
+ resource.setrlimit(resource.RLIMIT_NOFILE, (hard, hard))
625
+ except Exception: # pylint: disable=broad-except
626
+ pass # no issue, we will warn the user later if its too low
627
+
576
628
 
577
629
  @app.get('/token')
578
630
  async def token(request: fastapi.Request,
@@ -1576,6 +1628,38 @@ async def all_contexts(request: fastapi.Request) -> None:
1576
1628
  )
1577
1629
 
1578
1630
 
1631
+ @app.get('/gpu-metrics')
1632
+ async def gpu_metrics() -> fastapi.Response:
1633
+ """Gets the GPU metrics from multiple external k8s clusters"""
1634
+ contexts = core.get_all_contexts()
1635
+ all_metrics = []
1636
+ successful_contexts = 0
1637
+
1638
+ tasks = [
1639
+ asyncio.create_task(metrics_utils.get_metrics_for_context(context))
1640
+ for context in contexts
1641
+ if context != 'in-cluster'
1642
+ ]
1643
+
1644
+ results = await asyncio.gather(*tasks, return_exceptions=True)
1645
+
1646
+ for i, result in enumerate(results):
1647
+ if isinstance(result, Exception):
1648
+ logger.error(
1649
+ f'Failed to get metrics for context {contexts[i]}: {result}')
1650
+ else:
1651
+ metrics_text = result
1652
+ all_metrics.append(metrics_text)
1653
+ successful_contexts += 1
1654
+
1655
+ combined_metrics = '\n\n'.join(all_metrics)
1656
+
1657
+ # Return as plain text for Prometheus compatibility
1658
+ return fastapi.Response(
1659
+ content=combined_metrics,
1660
+ media_type='text/plain; version=0.0.4; charset=utf-8')
1661
+
1662
+
1579
1663
  # === Internal APIs ===
1580
1664
  @app.get('/api/completion/cluster_name')
1581
1665
  async def complete_cluster_name(incomplete: str,) -> List[str]:
sky/skylet/constants.py CHANGED
@@ -421,6 +421,9 @@ ENV_VAR_IS_SKYPILOT_SERVER = 'IS_SKYPILOT_SERVER'
421
421
  # Environment variable that is set to 'true' if metrics are enabled.
422
422
  ENV_VAR_SERVER_METRICS_ENABLED = 'SKY_API_SERVER_METRICS_ENABLED'
423
423
 
424
+ # If set, overrides the header that we can use to get the user name.
425
+ ENV_VAR_SERVER_AUTH_USER_HEADER = f'{SKYPILOT_ENV_VAR_PREFIX}AUTH_USER_HEADER'
426
+
424
427
  # Environment variable that is used as the DB connection string for the
425
428
  # skypilot server.
426
429
  ENV_VAR_DB_CONNECTION_URI = (f'{SKYPILOT_ENV_VAR_PREFIX}DB_CONNECTION_URI')
sky/skypilot_config.py CHANGED
@@ -63,6 +63,7 @@ from sqlalchemy import orm
63
63
  from sqlalchemy.dialects import postgresql
64
64
  from sqlalchemy.dialects import sqlite
65
65
  from sqlalchemy.ext import declarative
66
+ from sqlalchemy.pool import NullPool
66
67
 
67
68
  from sky import exceptions
68
69
  from sky import sky_logging
@@ -116,9 +117,10 @@ ENV_VAR_PROJECT_CONFIG = f'{constants.SKYPILOT_ENV_VAR_PREFIX}PROJECT_CONFIG'
116
117
  _GLOBAL_CONFIG_PATH = '~/.sky/config.yaml'
117
118
  _PROJECT_CONFIG_PATH = '.sky.yaml'
118
119
 
119
- _SQLALCHEMY_ENGINE: Optional[sqlalchemy.engine.Engine] = None
120
120
  API_SERVER_CONFIG_KEY = 'api_server_config'
121
121
 
122
+ _DB_USE_LOCK = threading.Lock()
123
+
122
124
  Base = declarative.declarative_base()
123
125
 
124
126
  config_yaml_table = sqlalchemy.Table(
@@ -129,44 +131,6 @@ config_yaml_table = sqlalchemy.Table(
129
131
  )
130
132
 
131
133
 
132
- def create_table():
133
- # Create tables if they don't exist
134
- Base.metadata.create_all(bind=_SQLALCHEMY_ENGINE)
135
-
136
-
137
- def _get_config_yaml_from_db(key: str) -> Optional[config_utils.Config]:
138
- assert _SQLALCHEMY_ENGINE is not None
139
- with orm.Session(_SQLALCHEMY_ENGINE) as session:
140
- row = session.query(config_yaml_table).filter_by(key=key).first()
141
- if row:
142
- db_config = config_utils.Config(yaml.safe_load(row.value))
143
- db_config.pop_nested(('db',), None)
144
- return db_config
145
- return None
146
-
147
-
148
- def _set_config_yaml_to_db(key: str, config: config_utils.Config):
149
- assert _SQLALCHEMY_ENGINE is not None
150
- config.pop_nested(('db',), None)
151
- config_str = common_utils.dump_yaml_str(dict(config))
152
- with orm.Session(_SQLALCHEMY_ENGINE) as session:
153
- if (_SQLALCHEMY_ENGINE.dialect.name ==
154
- db_utils.SQLAlchemyDialect.SQLITE.value):
155
- insert_func = sqlite.insert
156
- elif (_SQLALCHEMY_ENGINE.dialect.name ==
157
- db_utils.SQLAlchemyDialect.POSTGRESQL.value):
158
- insert_func = postgresql.insert
159
- else:
160
- raise ValueError('Unsupported database dialect')
161
- insert_stmnt = insert_func(config_yaml_table).values(key=key,
162
- value=config_str)
163
- do_update_stmt = insert_stmnt.on_conflict_do_update(
164
- index_elements=[config_yaml_table.c.key],
165
- set_={config_yaml_table.c.value: config_str})
166
- session.execute(do_update_stmt)
167
- session.commit()
168
-
169
-
170
134
  class ConfigContext:
171
135
 
172
136
  def __init__(self,
@@ -586,7 +550,6 @@ def _reload_config_from_internal_file(internal_config_path: str) -> None:
586
550
 
587
551
 
588
552
  def _reload_config_as_server() -> None:
589
- global _SQLALCHEMY_ENGINE
590
553
  # Reset the global variables, to avoid using stale values.
591
554
  _set_loaded_config(config_utils.Config())
592
555
  _set_loaded_config_path(None)
@@ -607,16 +570,33 @@ def _reload_config_as_server() -> None:
607
570
  'if db config is specified, no other config is allowed')
608
571
 
609
572
  if db_url:
610
- if _SQLALCHEMY_ENGINE is None:
611
- _SQLALCHEMY_ENGINE = sqlalchemy.create_engine(db_url)
612
- create_table()
613
- db_config = _get_config_yaml_from_db(API_SERVER_CONFIG_KEY)
614
- if db_config:
615
- if sky_logging.logging_enabled(logger, sky_logging.DEBUG):
616
- logger.debug(f'Config loaded from db:\n'
617
- f'{common_utils.dump_yaml_str(dict(db_config))}')
618
- server_config = overlay_skypilot_config(server_config, db_config)
619
-
573
+ with _DB_USE_LOCK:
574
+ sqlalchemy_engine = sqlalchemy.create_engine(db_url,
575
+ poolclass=NullPool)
576
+ Base.metadata.create_all(bind=sqlalchemy_engine)
577
+
578
+ def _get_config_yaml_from_db(
579
+ key: str) -> Optional[config_utils.Config]:
580
+ assert sqlalchemy_engine is not None
581
+ with orm.Session(sqlalchemy_engine) as session:
582
+ row = session.query(config_yaml_table).filter_by(
583
+ key=key).first()
584
+ if row:
585
+ db_config = config_utils.Config(yaml.safe_load(row.value))
586
+ db_config.pop_nested(('db',), None)
587
+ return db_config
588
+ return None
589
+
590
+ db_config = _get_config_yaml_from_db(API_SERVER_CONFIG_KEY)
591
+ if db_config:
592
+ if sky_logging.logging_enabled(logger, sky_logging.DEBUG):
593
+ logger.debug(
594
+ f'Config loaded from db:\n'
595
+ f'{common_utils.dump_yaml_str(dict(db_config))}')
596
+ server_config = overlay_skypilot_config(server_config,
597
+ db_config)
598
+ # Close the engine to avoid connection leaks
599
+ sqlalchemy_engine.dispose()
620
600
  _set_loaded_config(server_config)
621
601
  _set_loaded_config_path(server_config_path)
622
602
 
@@ -876,9 +856,38 @@ def update_api_server_config_no_lock(config: config_utils.Config) -> None:
876
856
  new_db_url = config.get_nested(('db',), None)
877
857
  if new_db_url and new_db_url != existing_db_url:
878
858
  raise ValueError('Cannot change db url while server is running')
879
- logger.debug('saving api_server config to db')
880
- _set_config_yaml_to_db(API_SERVER_CONFIG_KEY, config)
881
- db_updated = True
859
+ with _DB_USE_LOCK:
860
+ sqlalchemy_engine = sqlalchemy.create_engine(existing_db_url,
861
+ poolclass=NullPool)
862
+ Base.metadata.create_all(bind=sqlalchemy_engine)
863
+
864
+ def _set_config_yaml_to_db(key: str,
865
+ config: config_utils.Config):
866
+ assert sqlalchemy_engine is not None
867
+ config.pop_nested(('db',), None)
868
+ config_str = common_utils.dump_yaml_str(dict(config))
869
+ with orm.Session(sqlalchemy_engine) as session:
870
+ if (sqlalchemy_engine.dialect.name ==
871
+ db_utils.SQLAlchemyDialect.SQLITE.value):
872
+ insert_func = sqlite.insert
873
+ elif (sqlalchemy_engine.dialect.name ==
874
+ db_utils.SQLAlchemyDialect.POSTGRESQL.value):
875
+ insert_func = postgresql.insert
876
+ else:
877
+ raise ValueError('Unsupported database dialect')
878
+ insert_stmnt = insert_func(config_yaml_table).values(
879
+ key=key, value=config_str)
880
+ do_update_stmt = insert_stmnt.on_conflict_do_update(
881
+ index_elements=[config_yaml_table.c.key],
882
+ set_={config_yaml_table.c.value: config_str})
883
+ session.execute(do_update_stmt)
884
+ session.commit()
885
+
886
+ logger.debug('saving api_server config to db')
887
+ _set_config_yaml_to_db(API_SERVER_CONFIG_KEY, config)
888
+ db_updated = True
889
+ # Close the engine to avoid connection leaks
890
+ sqlalchemy_engine.dispose()
882
891
 
883
892
  if not db_updated:
884
893
  # save to the local file (PVC in Kubernetes, local file otherwise)
@@ -1,6 +1,6 @@
1
1
  """Accelerator registry."""
2
2
  import typing
3
- from typing import Optional
3
+ from typing import List, Optional
4
4
 
5
5
  from sky import catalog
6
6
  from sky.utils import rich_utils
@@ -35,6 +35,7 @@ if typing.TYPE_CHECKING:
35
35
  # Use a cached version of accelerators to cloud mapping, so that we don't have
36
36
  # to download and read the catalog file for every cloud locally.
37
37
  _accelerator_df = catalog.common.read_catalog('common/accelerators.csv')
38
+ _memory_df = catalog.common.read_catalog('common/metadata.csv')
38
39
 
39
40
  # List of non-GPU accelerators that are supported by our backend for job queue
40
41
  # scheduling.
@@ -45,6 +46,32 @@ _SCHEDULABLE_NON_GPU_ACCELERATORS = [
45
46
  ]
46
47
 
47
48
 
49
+ def get_devices_by_memory(memory: float,
50
+ plus: bool = False,
51
+ manufacturer: Optional[str] = None) -> List[str]:
52
+ """Returns a list of device names that meet the memory and manufacturer
53
+ requirements.
54
+
55
+ Args:
56
+ memory: The minimum memory size in GB.
57
+ plus: If True, returns devices with memory >= memory, otherwise returns
58
+ devices with memory == memory.
59
+ manufacturer: The manufacturer of the GPU.
60
+ """
61
+
62
+ # Filter by memory requirements
63
+ if plus:
64
+ df = _memory_df[_memory_df['MemoryGB'] >= memory]
65
+ else:
66
+ df = _memory_df[_memory_df['MemoryGB'] == memory]
67
+
68
+ # Filter by manufacturer if specified
69
+ if manufacturer is not None:
70
+ df = df[df['Manufacturer'].str.lower() == manufacturer.lower()]
71
+
72
+ return df['GPU'].tolist()
73
+
74
+
48
75
  def is_schedulable_non_gpu_accelerator(accelerator_name: str) -> bool:
49
76
  """Returns if this accelerator is a 'schedulable' non-GPU accelerator."""
50
77
  for name in _SCHEDULABLE_NON_GPU_ACCELERATORS:
sky/utils/schemas.py CHANGED
@@ -311,6 +311,9 @@ def _get_single_resources_schema():
311
311
  }
312
312
  }
313
313
  },
314
+ '_no_missing_accel_warnings': {
315
+ 'type': 'boolean'
316
+ },
314
317
  'image_id': {
315
318
  'anyOf': [{
316
319
  'type': 'string',
sky/utils/ux_utils.py CHANGED
@@ -12,6 +12,7 @@ import colorama
12
12
  from sky import sky_logging
13
13
  from sky.skylet import constants
14
14
  from sky.utils import common_utils
15
+ from sky.utils import env_options
15
16
  from sky.utils import rich_console_utils
16
17
 
17
18
  if typing.TYPE_CHECKING:
@@ -57,10 +58,14 @@ def print_exception_no_traceback():
57
58
  if error():
58
59
  raise ValueError('...')
59
60
  """
60
- original_tracelimit = getattr(sys, 'tracebacklimit', 1000)
61
- sys.tracebacklimit = 0
62
- yield
63
- sys.tracebacklimit = original_tracelimit
61
+ if env_options.Options.SHOW_DEBUG_INFO.get():
62
+ # When SKYPILOT_DEBUG is set, show the full traceback
63
+ yield
64
+ else:
65
+ original_tracelimit = getattr(sys, 'tracebacklimit', 1000)
66
+ sys.tracebacklimit = 0
67
+ yield
68
+ sys.tracebacklimit = original_tracelimit
64
69
 
65
70
 
66
71
  @contextlib.contextmanager
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250701
3
+ Version: 1.0.0.dev20250703
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=xnNASWOZXK5qA6EMZvK5Jd4Jy4gjv6TiCS3UG2yGe2M,6419
1
+ sky/__init__.py,sha256=HYORW0WyBLZnvFY4uVWHILG1Ai9Z63rJxFMVnszizFg,6419
2
2
  sky/admin_policy.py,sha256=FMiizgvVTmD9gFA2OUaveXnuY3lbNU-fCbUYAODBZj4,9427
3
3
  sky/authentication.py,sha256=V7zGSV7bqcAKC_EGOOS0KhJ01ZFLnme0WnjLFO7zavs,25603
4
4
  sky/check.py,sha256=R0pFsTq2v-wr3NFePlX9DmDhsbvWEoFJAXsys3pUmT4,30338
@@ -10,10 +10,10 @@ sky/exceptions.py,sha256=YRPgpFkBRGE9jmG2r3SWJGS9p9-RPP2TZGjfd2VblSc,19044
10
10
  sky/execution.py,sha256=BhI4paGKpXMhWJoelHFe7LGFbCnW7hl0rIAmdIay-dk,33223
11
11
  sky/global_user_state.py,sha256=8_oKM5l5aey_IadFC6beiilfsbG10J27sqVxnHxFc7A,73040
12
12
  sky/models.py,sha256=Eor-cT4D71QTimogcnJ5ey1G1PXK-OXN-snEtE8Uu_g,3152
13
- sky/optimizer.py,sha256=mE3VG2AhMsY6yL0uIqtqWudjVLZPYaBw9eLhQIAi6jI,63282
14
- sky/resources.py,sha256=Xqnda_-2Gegtdf8GVTy8QaUZToYy4zFrn4ACMuE7gFM,100267
13
+ sky/optimizer.py,sha256=oE4NrDmyE1A9B5NI3T_s7QUV5HkCeSJUU75NoJoVIPI,63323
14
+ sky/resources.py,sha256=bvmapuT5vBZQShWtdpfOw3o3hNjsjQslxmpxCfF6-64,106309
15
15
  sky/sky_logging.py,sha256=cMurxhFExKEFX1frcMR71Ti_s9Obg9WY30veVxsZB6o,7285
16
- sky/skypilot_config.py,sha256=6o5T4_U-b38tJglH3vRV0cfvsD8wLAt2qFuLux_FDv4,35235
16
+ sky/skypilot_config.py,sha256=TjuYBU99GLhWD7E9ioAP7qiiHJybc5EY_T1A_rFW-rM,36222
17
17
  sky/task.py,sha256=ftmaGsxLoX8Uewzh45OjhlPDJu5n3060Za1S0X9i7M0,71076
18
18
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  sky/adaptors/aws.py,sha256=4caUTO5nxZQyDVPyQdoPljaF-Lz_Fa6NEnu3FfmLZd4,8633
@@ -40,7 +40,7 @@ sky/backends/docker_utils.py,sha256=Hyw1YY20EyghhEbYx6O2FIMDcGkNzBzV9TM7LFynei8,
40
40
  sky/backends/local_docker_backend.py,sha256=r80BGJZmAH8F49v6Y_pG3_pHmW5LQEQRusLkKoYoe9Q,17047
41
41
  sky/backends/wheel_utils.py,sha256=IUruJijm5854UGDdSayHbHzjjWRM46bATK1nSnK44xY,11071
42
42
  sky/backends/monkey_patches/monkey_patch_ray_up.py,sha256=76-y2fCaE3JINj8lEwHT1eirYzCbpD8O1ySsysuGu8o,3450
43
- sky/catalog/__init__.py,sha256=BkIr4FdTpuIuynl5ijTraecm38viZjRgY3jIexlDbgk,14602
43
+ sky/catalog/__init__.py,sha256=SRV7fsgTDOtidYxXYzyxgPAQTQR6fsIb2epVISCH_AU,14616
44
44
  sky/catalog/aws_catalog.py,sha256=VnFLKmr4nBuc5NXske7thEByJz_wOg9w5vuN6FtLMuo,13473
45
45
  sky/catalog/azure_catalog.py,sha256=r_ZBacLF7U8EPGlrMF-zVSwAGjjmh9K1e1MZ3-UPfXo,8126
46
46
  sky/catalog/common.py,sha256=KX77r8zPYe7hMX4Hf7_ny_wjC4Y9_FAskKb7qmr1aJY,28283
@@ -79,7 +79,7 @@ sky/client/oauth.py,sha256=sNJ_DMsSTcxluj5FeNQ2IafZJLImRFmCAZ79bXeABn4,2871
79
79
  sky/client/sdk.py,sha256=uVzzJpsokxAdhLaK4JyMRia1wj6PI5qYpvBSZfnFwqk,91054
80
80
  sky/client/service_account_auth.py,sha256=5jXk0G6ufuW-SHCO7BEHQeTO0_2a8KfFmA63auXFRj4,1529
81
81
  sky/client/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- sky/client/cli/command.py,sha256=w3umzVSbOa8eLhCYTecpR12gA1KtO-wN6jQLtJdEb1E,215665
82
+ sky/client/cli/command.py,sha256=tuK-39aOz9xresShPe4uvGAjn7OgnyxLovnycJUAzaE,217309
83
83
  sky/client/cli/deprecation_utils.py,sha256=H_d5UyF2CekEoThduAzt5cihBO8hwKYMu0-Wqfbjv5E,3370
84
84
  sky/client/cli/flags.py,sha256=6IdS_G2lB1C6r8kJMzLVREY_qV50VHiSfWlmppVrWuc,11623
85
85
  sky/clouds/__init__.py,sha256=tC9_Vi6GvVceWUi6uZvm7vXzBa0uH3CjRQ-QCYqdJMw,1624
@@ -108,19 +108,19 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
108
108
  sky/clouds/utils/gcp_utils.py,sha256=ZNupZEBsZS9ZvvzB7vsc6f5y1JUBoRcKE0erso_Y93k,7659
109
109
  sky/clouds/utils/oci_utils.py,sha256=yv_Y9oM5WNCnOofu44aKyOPTZZdKfpFLCx3ewZ2VBFY,7994
110
110
  sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
111
- sky/dashboard/out/404.html,sha256=5MaLosc-IEF7yxlimcsZtcZAPwAmjcprtQ1a9-ykypk,1423
112
- sky/dashboard/out/clusters.html,sha256=I8_99s0orihQ5OmxiECaCxny8d2zUQJbRUShl9tC6u0,1418
113
- sky/dashboard/out/config.html,sha256=-EuRAnr8xDTjBy6fmYDce0BDnmmXhyQjA09HkwQq3xc,1414
111
+ sky/dashboard/out/404.html,sha256=3Z9o8-G_0ariIM0EjvOMuFok7w5FIL3wsT3y7FxrQKc,1423
112
+ sky/dashboard/out/clusters.html,sha256=nGWP5odfKHxeIVIbwA1kzbT350a2NOVa9NpMsPX-xG4,1418
113
+ sky/dashboard/out/config.html,sha256=SJfQDV-NZXrfZlFLj6f_OCIFepaiJ5Z6rKSa9WSC-Cg,1414
114
114
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
115
- sky/dashboard/out/index.html,sha256=zqBxJWLb1AxOznjRnBO1d7_H_gxhaDtq75C5ZlPI8P8,1407
116
- sky/dashboard/out/infra.html,sha256=1zcQrK3TZ6uKVb-1bSlhSnvVeGrWEEEEJgFRD82n9uQ,1412
117
- sky/dashboard/out/jobs.html,sha256=FHnt5J53N3Y0zkcAsAqejGG_ZMNhKhxbn0oo_nu_1z0,1410
115
+ sky/dashboard/out/index.html,sha256=adPxHrDh5nHcfgvaahhjYEx3AzjAXlxvbZfZNRQPdDg,1407
116
+ sky/dashboard/out/infra.html,sha256=c5BiYNHeKaGqAfl_FFE5MpVaUAIpGap3Dfxc78vH3Tg,1412
117
+ sky/dashboard/out/jobs.html,sha256=MtDz29kuHJqiUfAMGa-xPjf8I9v7UGbTJbGdNXqjoDc,1410
118
118
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
119
- sky/dashboard/out/users.html,sha256=hPV_Ds1avur0T3aTExSTKPw-9FqE77kaOHB2rHfsyho,1412
120
- sky/dashboard/out/volumes.html,sha256=hTKhfj3aZW_ejYDfnh0L4FKiJgf_IyovP-mG9FUUtBI,1416
121
- sky/dashboard/out/workspaces.html,sha256=yOA8huFvBqfdODzzvuD5J4ZZL_kQX5JHP6RA-4IQn5Y,1422
122
- sky/dashboard/out/_next/static/Md3rlE87jmL5uv7gSo8mR/_buildManifest.js,sha256=AUBq9iFFkgyZiALTu2JdM3ypyEQ-Wfa_vECVEP0p3Zc,2235
123
- sky/dashboard/out/_next/static/Md3rlE87jmL5uv7gSo8mR/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
119
+ sky/dashboard/out/users.html,sha256=LQfZnMjkwRnp25ipelg-NIAxRTJW8OjjNuUDOBbW0gc,1412
120
+ sky/dashboard/out/volumes.html,sha256=kcLh9GM3mSxXfjaUbQev6BCdS2VNZr7XLE85SMT4Y0o,1416
121
+ sky/dashboard/out/workspaces.html,sha256=nrQcaWz2Uq7nO6sv9d-G5ISQSmEXcApFl6NAmdUoghM,1422
122
+ sky/dashboard/out/_next/static/A-fbCEgJE_q2cV8biIOIr/_buildManifest.js,sha256=SMKLljkiS_9UQoF0v1MyY_ziwbXl8KnBBlwCuTRc3V8,2235
123
+ sky/dashboard/out/_next/static/A-fbCEgJE_q2cV8biIOIr/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
124
124
  sky/dashboard/out/_next/static/chunks/1043-1b39779691bb4030.js,sha256=k8-hHIedPKi22M0wZwGOdWZ_S-H0jVnepFwm7i9_zg4,18192
125
125
  sky/dashboard/out/_next/static/chunks/1141-726e5a3f00b67185.js,sha256=lEAVPk_18NZpZuPrGx1Xy9VWqE_5n3JuqWbIPS1_ZMw,17823
126
126
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -150,13 +150,13 @@ sky/dashboard/out/_next/static/chunks/8982.a2e214068f30a857.js,sha256=fQlHyU9rqS
150
150
  sky/dashboard/out/_next/static/chunks/9025.a7c44babfe56ce09.js,sha256=0ciCX9lNsRd3HNYlFQ29BXu2S-xCuoqUwGcrawVwiZM,10637
151
151
  sky/dashboard/out/_next/static/chunks/938-044ad21de8b4626b.js,sha256=cbzoiWQ1IkgyTfObKZsxVts30tFHFl_1e9_PQdcXCjs,25784
152
152
  sky/dashboard/out/_next/static/chunks/9470-21d059a1dfa03f61.js,sha256=CPmGRW2grevoF93p_jmh9tgO2X15tldm-_xFa4-qXXU,7887
153
- sky/dashboard/out/_next/static/chunks/9984.739ae958a066298d.js,sha256=EKp61c5XqOsOtVfduulgrzIrW1O4u0lK8MQfOha8lMg,40809
153
+ sky/dashboard/out/_next/static/chunks/9984.b56614f3c4c5961d.js,sha256=kij2wjmGv52Dl66I9E_Nrc7aG9JN_orwMY-GqPJriN8,41450
154
154
  sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js,sha256=49S_KmXpB4D3U299iKHRbYnFxJnoeN36awxwhBbUn8U,172832
155
155
  sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js,sha256=XKYUV5T_2HxRwN7wZa9-Lj1J5gHLS0TKT2t2GobVewY,140943
156
156
  sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js,sha256=zSukg-WO1Xy-B2xEIIGHXYApy2KOY9xWHcLqAYQvF3A,115883
157
157
  sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js,sha256=DPLM6ccDgTnITBgsqZPN3gmcI2szGCi9b_60PJZkTJQ,109885
158
158
  sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
159
- sky/dashboard/out/_next/static/chunks/webpack-d427db53e54de9ce.js,sha256=MuHC5puVDDg-0slukNrIQDSvWd26QKHJX9e7jJYdep8,4655
159
+ sky/dashboard/out/_next/static/chunks/webpack-9a81ea998672c303.js,sha256=fUbydZntvLJZCDi467P46nwf0uvI6VRaNnpvsLirfDs,4655
160
160
  sky/dashboard/out/_next/static/chunks/pages/_app-a37b06ddb64521fd.js,sha256=H1r6Y8kJC7-I-8jRr71VINRghHy_yaY6scBkjN4cyxw,7587
161
161
  sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js,sha256=D2OpMaqpdtCPyq6iPhZHuF2ekyMjleRchSNCLR6fqps,250
162
162
  sky/dashboard/out/_next/static/chunks/pages/clusters-9744c271a1642f76.js,sha256=wzNhCoIzkSiOuaTm9dGBVIYYIYWf4COJOklBr1aaLxE,859
@@ -167,20 +167,20 @@ sky/dashboard/out/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js,sha256=DzFF
167
167
  sky/dashboard/out/_next/static/chunks/pages/users-cd43fb3c122eedde.js,sha256=ZmBi5Bo3Nuc8h98X3A1f3Wf5vXXoJhSdf4dMArPfe0s,830
168
168
  sky/dashboard/out/_next/static/chunks/pages/volumes-4ebf6484f7216387.js,sha256=1F6IwI6S3p3hsDBy_fuLwFRz3Elg0IfrWNj5z3fhxdg,827
169
169
  sky/dashboard/out/_next/static/chunks/pages/workspaces-06bde99155fa6292.js,sha256=l9iLMdY_ShOHIo368M98I4mADuUWtiu_ZDHci8ffJjM,874
170
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b8e1114e6d38218c.js,sha256=EdNVNlM8Unh6OfzlKkkouwq7KlrNQRIZ2ljRg4_qeZI,16592
170
+ sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-1159f362b960e2b8.js,sha256=GqMjMN3_Z8kYZWCz01aabcu8epNuKAUihohv9wxF34Y,16659
171
171
  sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-8135aba0712bda37.js,sha256=XaBZD-8HP9h4o5YnQ0oYQOUJd2-uimamGbYnlD_5YVg,21263
172
172
  sky/dashboard/out/_next/static/chunks/pages/infra/[context]-8b0809f59034d509.js,sha256=2X6wnNqROGTzwZorrDJpUmO6XnUmS9VN3ImpTvhJ4IM,839
173
173
  sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-c4d5cfac7fbc0668.js,sha256=4-YK-gpB6rWVM8QMkzaB8B_uUwI6As62G2rj9wGmqnE,25246
174
174
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js,sha256=K9tqKHcB2kiSHTAddLaM2oL1PzmqZNTdLDOuNzCaJNM,765
175
175
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-7c0187f43757a548.js,sha256=FsoenC6VRkPLE29KkLd4nlSq2qociH4zFexYMxgetOM,1530
176
176
  sky/dashboard/out/_next/static/css/0da6afe66176678a.css,sha256=I8b7x4ULdoXHkgk0BsNa0D6k2UYoA2mEhq7H1G_tVQE,44869
177
- sky/dashboard/out/clusters/[cluster].html,sha256=1SgSWlE8Zlgz36DjsoDSTXHLCCXabVK3hiMyiHCp0go,2847
178
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=B3KAlHNVXs_w3DA7skM3wpGym9KOEBig4SH2G8c5a_g,2160
179
- sky/dashboard/out/infra/[context].html,sha256=bjSWPRZqsrSfNnW9AEUjH2o1vxK8L-1gr-vlDlEWlIU,1436
180
- sky/dashboard/out/jobs/[job].html,sha256=uq434sj_B9qiP3a2RfhrbTmP8LJuOIUdtsrkwGVN2K4,2304
177
+ sky/dashboard/out/clusters/[cluster].html,sha256=mY0B5gBqQT3iNb0bN_EgEieJfSCgRn8GUYk7bl0C33g,2847
178
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=AhJQHw0K7mci6JCElhojEl48QV5BXMjAfj4A4XbFX0c,2160
179
+ sky/dashboard/out/infra/[context].html,sha256=mSeFwt9GELEjyn-_E2iieEb-buu1VsyW0KRKA7qtds0,1436
180
+ sky/dashboard/out/jobs/[job].html,sha256=xAah-qb6eem_iCkDpGaZNeJ3S2z6WRejS3_U-sycrUQ,2304
181
181
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
182
- sky/dashboard/out/workspace/new.html,sha256=vFvjxf5LJuidZLZb2ISaL3Nt9W7p1YN9vlSGKZq3Amg,1428
183
- sky/dashboard/out/workspaces/[name].html,sha256=LRYjKeeAflSeMm7oiulrN9uLHCwsr81usO_FBwN3U4M,2845
182
+ sky/dashboard/out/workspace/new.html,sha256=yS_2o5DPO-pTtHFCxQ93lEjrjrzEy-NyQOTqErOlCF8,1428
183
+ sky/dashboard/out/workspaces/[name].html,sha256=T9-LqiM6c38fzGRacsi92uruk71NiDw2F8bOn1Y5glo,2845
184
184
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
185
185
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
186
186
  sky/data/data_utils.py,sha256=CNYPM963qby5ddW0DZNbhiWXkqgB9MHh_jrC5DoBctM,33437
@@ -197,11 +197,13 @@ sky/jobs/utils.py,sha256=gfW4smCWWMmE4OwIbEqI5j5gVh5Gvfs6paqKQR2Tia8,70920
197
197
  sky/jobs/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  sky/jobs/client/sdk.py,sha256=0ZDm5h1kqPYXvsgiXBhbsXj9jfKW7GHH_VtQbSQjmCw,11068
199
199
  sky/jobs/server/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
200
- sky/jobs/server/core.py,sha256=SioPzD6O0OO-_mg0vA-ND3d_4SPsMs5W9eStMtwfp_U,31405
200
+ sky/jobs/server/core.py,sha256=fLj6k6m2SkU6UJT24rhtoUrmASPrnMay_Rkm5KqMvs4,31720
201
201
  sky/jobs/server/server.py,sha256=ae8JAs-2ipWqL_GsA3x8T2mY-OJLc3ioWg_CfRzCUIY,4011
202
202
  sky/logs/__init__.py,sha256=0ybWMfXcpAzh8dtDnJwpfovNIk0zJRJvzdISqFdKmdE,549
203
203
  sky/logs/agent.py,sha256=tv0C40_FauZpvU93Ro_mC23LnaXWhSTjqch1JQMXiqw,2771
204
204
  sky/logs/gcp.py,sha256=eKVEcHO3FJRg_YTcE9omE8uAIF6AdBWWpkEPqWFAqXg,3857
205
+ sky/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
+ sky/metrics/utils.py,sha256=Cww3yNG4HyW4DEdLOFUayFgMZ16t2JFSvvhuTTV7Vio,7654
205
207
  sky/provision/__init__.py,sha256=bADZkpZdy7QxIc7WDkh-X5cd3Uv64wy2K7IB9Xpw348,7554
206
208
  sky/provision/common.py,sha256=LdjM9SL9NDtsARom12tVv_WoUNL3PTlU5RoLfeWGGgM,10807
207
209
  sky/provision/constants.py,sha256=oc_XDUkcoLQ_lwDy5yMeMSWviKS0j0s1c0pjlvpNeWY,800
@@ -319,12 +321,12 @@ sky/serve/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
319
321
  sky/serve/server/core.py,sha256=zKvDnq6W9CftH5ljmNMdTDGsLO3mzbFgrMBMCSua4dM,41662
320
322
  sky/serve/server/server.py,sha256=A9K37a0nQgZeN3eKWv62Oh2C5TSAReTZ9pHmztqlI-c,4396
321
323
  sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
322
- sky/server/common.py,sha256=LKZPf-jaNxIMCG_bFetFcq3g8xB4MSOBuUzjEB1xQEI,36028
324
+ sky/server/common.py,sha256=prLb_p0wuHwTRNhF0zAUzxeWhhpZNvbET3t1N7KYUsY,36670
323
325
  sky/server/config.py,sha256=XWf5Kw4am6vMO5wcyWevbQAFH-dmKb7AMEgDzD083-M,8538
324
326
  sky/server/constants.py,sha256=15r9CGX4yo62BeRLSfyrVaKd5fqeu_8GBS_JqyeXSfk,1431
325
327
  sky/server/metrics.py,sha256=aVRaSwpBVXE9dXIVd9bNsSigKM4bkqNq0eTpP0Noyo8,3657
326
328
  sky/server/rest.py,sha256=3xOQXsQ_r9XBcUOhQbf-Wk0UXx0XrAmzQ6JSqLr6nJ0,5430
327
- sky/server/server.py,sha256=C-JOBQ1cbu840ve06Onwt5VYSPAB57vyhJ96D1A5BxE,67590
329
+ sky/server/server.py,sha256=KXv-Q3tAJ0flFoKYG0xjpcJTqALn7iMvCni5883f95c,71254
328
330
  sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
329
331
  sky/server/stream_utils.py,sha256=RS4RuMxQqTGqp3uxzZVtmFWzos4d49P7hMX_VklzEVU,9189
330
332
  sky/server/uvicorn.py,sha256=3mdSUbc8zHRYAbZZLkfPB6U9VXD_t2jDM1BMjpTx1Mo,9014
@@ -351,7 +353,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
351
353
  sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
352
354
  sky/skylet/autostop_lib.py,sha256=kGUnHm-jpF4zl3UJfB-4pnoldWpnVeR96WwYGSw7em0,4630
353
355
  sky/skylet/configs.py,sha256=kV490lonYVVQMDRO2haizlt9fpQmqBIpwBScn14zS78,2132
354
- sky/skylet/constants.py,sha256=U4vVBIaispgRKESUaFhMxURDV3jga3_lZbjR7oFHTqY,23303
356
+ sky/skylet/constants.py,sha256=jveG7A_vi3mWIG8Ix5_vD2GnmTSm8gGalXxyxsx7yQ8,23452
355
357
  sky/skylet/events.py,sha256=pnV3ZiwWhXqTHpU5B5Y9Xwam_7FQDI6IrxgSx7X_NVA,12743
356
358
  sky/skylet/job_lib.py,sha256=aZ_lUU1u0HVU2AdTcYcFUAS7eeelK-bAbJlCoZ3QX7A,48267
357
359
  sky/skylet/log_lib.py,sha256=9nLOhevnM668itQyVyPSoQHKfZ2MWm_FwXPxK28X0oM,23201
@@ -411,7 +413,7 @@ sky/users/rbac.py,sha256=3ZWukXo85u6zWbPmHcPsF9EtZ3cd_51PLZYf2h-7uAM,3636
411
413
  sky/users/server.py,sha256=59I2WITevRqvo-kEzmP0p0qyEYATnUQXTRvA_81xZYM,27922
412
414
  sky/users/token_service.py,sha256=nzIryoYSbw58SceBVRJ4VF7Z9beTSpYZd6WSyYYzK-s,7179
413
415
  sky/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
414
- sky/utils/accelerator_registry.py,sha256=yNP7HDflg2bnhnCXFfjdVmJcpId7WBQCQPiGuc41EwE,3874
416
+ sky/utils/accelerator_registry.py,sha256=I2BLe74i7qBTE4X73N-cVbOJNX1Pcextm9OIRQFfnl0,4803
415
417
  sky/utils/admin_policy_utils.py,sha256=VkE3FGzv5a7KnRO0R1PX0buJ274vF__n1xgXJ_9ykTs,7105
416
418
  sky/utils/annotations.py,sha256=-rfacB30Sl0xkFriejGvxma3oKctGfXXLZkQPHG33eo,1626
417
419
  sky/utils/atomic.py,sha256=vrw-7XCnckF0xCx-ttamao7evPdGtVsnjaTtgMlBXIE,1280
@@ -437,11 +439,11 @@ sky/utils/resource_checker.py,sha256=N18XhoVIqjY1VzmKvxQxRchRgC2WIgcEQyHDkLvg4Y8
437
439
  sky/utils/resources_utils.py,sha256=9HyFUySaXZsF_XKJvJa1_dy35CrX5tAm5HoOnpYWREo,15106
438
440
  sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
439
441
  sky/utils/rich_utils.py,sha256=ZKztFc0D5q7ma_NE2p9UKjVS9zqcJ3L53FRw6SPoUvg,14707
440
- sky/utils/schemas.py,sha256=xPgT4I1dywXhYHI5k3zvu26rZZJv6duK1hOspO8UNjA,51633
442
+ sky/utils/schemas.py,sha256=pfoJA2EXYp0NOUj20D3lw232Pw8XGuVyf6KkvJ8vUmE,51726
441
443
  sky/utils/status_lib.py,sha256=QGkd6COD1GX1h30Mk9RMUdyeUOMJs5971GkxTcFgdsU,1705
442
444
  sky/utils/subprocess_utils.py,sha256=tOpFY_1ml7JkVGAN1o473lcKPklGR95qBCW61eu8kEo,15773
443
445
  sky/utils/timeline.py,sha256=ob6s3bc7nwAuSI76yLKBrSR5bzOHnOhbozz1avwoet4,4070
444
- sky/utils/ux_utils.py,sha256=FChNkVnTX3vKsu4_kXt7eaf2jNSoTfwH4XLMBtGK0t4,10233
446
+ sky/utils/ux_utils.py,sha256=hris-DNQR0-okNOzH2EZQJXBPWAn3LdAl3dtl9KPgng,10419
445
447
  sky/utils/validator.py,sha256=AHIYEBpxzpC2Eg8TulruFqQSjTxeynB0Dc7cfP1RX2M,1159
446
448
  sky/utils/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
447
449
  sky/utils/aws/get_default_security_group.py,sha256=LPzz5133ZUMbzDD3iqqACL9PdlgqiQR5hKZIn-D1zhw,228
@@ -476,9 +478,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
476
478
  sky/workspaces/core.py,sha256=MkQoVqWN67tf4VRq284U9vgAw4lwb_cpUfwHQT4V9Ow,16598
477
479
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
478
480
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
479
- skypilot_nightly-1.0.0.dev20250701.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
480
- skypilot_nightly-1.0.0.dev20250701.dist-info/METADATA,sha256=PWitj6oqOfvmSkruLvIhdnonMphHD7Jn_L82thZX_y8,18908
481
- skypilot_nightly-1.0.0.dev20250701.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
482
- skypilot_nightly-1.0.0.dev20250701.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
483
- skypilot_nightly-1.0.0.dev20250701.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
484
- skypilot_nightly-1.0.0.dev20250701.dist-info/RECORD,,
481
+ skypilot_nightly-1.0.0.dev20250703.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
482
+ skypilot_nightly-1.0.0.dev20250703.dist-info/METADATA,sha256=cdLrpjGYff1T2vXfn3iDEoODJiWUgdSWHVOXRauR7OM,18908
483
+ skypilot_nightly-1.0.0.dev20250703.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
484
+ skypilot_nightly-1.0.0.dev20250703.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
485
+ skypilot_nightly-1.0.0.dev20250703.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
486
+ skypilot_nightly-1.0.0.dev20250703.dist-info/RECORD,,