dstack 0.19.1__py3-none-any.whl → 0.19.3__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 dstack might be problematic. Click here for more details.

Files changed (68) hide show
  1. dstack/_internal/cli/commands/metrics.py +138 -0
  2. dstack/_internal/cli/commands/stats.py +5 -119
  3. dstack/_internal/cli/main.py +2 -0
  4. dstack/_internal/cli/services/profile.py +9 -0
  5. dstack/_internal/core/backends/aws/configurator.py +1 -0
  6. dstack/_internal/core/backends/base/compute.py +4 -1
  7. dstack/_internal/core/backends/base/models.py +7 -7
  8. dstack/_internal/core/backends/configurators.py +9 -0
  9. dstack/_internal/core/backends/cudo/compute.py +2 -0
  10. dstack/_internal/core/backends/cudo/configurator.py +0 -13
  11. dstack/_internal/core/backends/datacrunch/compute.py +118 -32
  12. dstack/_internal/core/backends/datacrunch/configurator.py +16 -11
  13. dstack/_internal/core/backends/gcp/compute.py +140 -26
  14. dstack/_internal/core/backends/gcp/configurator.py +2 -0
  15. dstack/_internal/core/backends/gcp/features/__init__.py +0 -0
  16. dstack/_internal/core/backends/gcp/features/tcpx.py +34 -0
  17. dstack/_internal/core/backends/gcp/models.py +13 -1
  18. dstack/_internal/core/backends/gcp/resources.py +64 -27
  19. dstack/_internal/core/backends/lambdalabs/compute.py +2 -4
  20. dstack/_internal/core/backends/lambdalabs/configurator.py +0 -21
  21. dstack/_internal/core/backends/models.py +8 -0
  22. dstack/_internal/core/backends/nebius/__init__.py +0 -0
  23. dstack/_internal/core/backends/nebius/backend.py +16 -0
  24. dstack/_internal/core/backends/nebius/compute.py +272 -0
  25. dstack/_internal/core/backends/nebius/configurator.py +74 -0
  26. dstack/_internal/core/backends/nebius/models.py +108 -0
  27. dstack/_internal/core/backends/nebius/resources.py +240 -0
  28. dstack/_internal/core/backends/tensordock/api_client.py +5 -4
  29. dstack/_internal/core/backends/tensordock/compute.py +2 -15
  30. dstack/_internal/core/errors.py +14 -0
  31. dstack/_internal/core/models/backends/base.py +2 -0
  32. dstack/_internal/core/models/profiles.py +3 -0
  33. dstack/_internal/proxy/lib/schemas/model_proxy.py +3 -3
  34. dstack/_internal/server/background/tasks/process_instances.py +12 -7
  35. dstack/_internal/server/background/tasks/process_running_jobs.py +20 -0
  36. dstack/_internal/server/background/tasks/process_submitted_jobs.py +3 -2
  37. dstack/_internal/server/routers/prometheus.py +5 -0
  38. dstack/_internal/server/security/permissions.py +19 -1
  39. dstack/_internal/server/services/instances.py +14 -6
  40. dstack/_internal/server/services/jobs/__init__.py +3 -3
  41. dstack/_internal/server/services/offers.py +4 -2
  42. dstack/_internal/server/services/runs.py +0 -2
  43. dstack/_internal/server/statics/index.html +1 -1
  44. dstack/_internal/server/statics/{main-da9f8c06a69c20dac23e.css → main-8f9c66f404e9c7e7e020.css} +1 -1
  45. dstack/_internal/server/statics/{main-4a0fe83e84574654e397.js → main-e190de603dc1e9f485ec.js} +7306 -149
  46. dstack/_internal/server/statics/{main-4a0fe83e84574654e397.js.map → main-e190de603dc1e9f485ec.js.map} +1 -1
  47. dstack/_internal/utils/common.py +8 -2
  48. dstack/_internal/utils/event_loop.py +30 -0
  49. dstack/_internal/utils/ignore.py +2 -0
  50. dstack/api/server/_fleets.py +3 -5
  51. dstack/api/server/_runs.py +6 -7
  52. dstack/version.py +1 -1
  53. {dstack-0.19.1.dist-info → dstack-0.19.3.dist-info}/METADATA +27 -11
  54. {dstack-0.19.1.dist-info → dstack-0.19.3.dist-info}/RECORD +67 -57
  55. tests/_internal/core/backends/datacrunch/test_configurator.py +6 -2
  56. tests/_internal/server/background/tasks/test_process_instances.py +4 -2
  57. tests/_internal/server/background/tasks/test_process_submitted_jobs.py +29 -0
  58. tests/_internal/server/routers/test_backends.py +116 -0
  59. tests/_internal/server/routers/test_fleets.py +2 -0
  60. tests/_internal/server/routers/test_prometheus.py +21 -0
  61. tests/_internal/server/routers/test_runs.py +4 -0
  62. tests/_internal/utils/test_common.py +16 -1
  63. tests/_internal/utils/test_event_loop.py +18 -0
  64. dstack/_internal/core/backends/datacrunch/api_client.py +0 -77
  65. {dstack-0.19.1.dist-info → dstack-0.19.3.dist-info}/LICENSE.md +0 -0
  66. {dstack-0.19.1.dist-info → dstack-0.19.3.dist-info}/WHEEL +0 -0
  67. {dstack-0.19.1.dist-info → dstack-0.19.3.dist-info}/entry_points.txt +0 -0
  68. {dstack-0.19.1.dist-info → dstack-0.19.3.dist-info}/top_level.txt +0 -0
@@ -67,9 +67,15 @@ def pretty_date(time: datetime) -> str:
67
67
  if diff.days < 7:
68
68
  return str(diff.days) + " days ago"
69
69
  if diff.days < 31:
70
- return str(round(diff.days / 7)) + " weeks ago"
70
+ weeks = round(diff.days / 7)
71
+ if weeks == 1:
72
+ return str(weeks) + " week ago"
73
+ return str(weeks) + " weeks ago"
71
74
  if diff.days < 365:
72
- return str(round(diff.days / 30)) + " months ago"
75
+ months = round(diff.days / 30)
76
+ if months == 1:
77
+ return str(months) + " month ago"
78
+ return str(months) + " months ago"
73
79
  years = round(diff.days / 365)
74
80
  if years == 1:
75
81
  return str(years) + " year ago"
@@ -0,0 +1,30 @@
1
+ import asyncio
2
+ import threading
3
+ from collections.abc import Awaitable
4
+ from typing import TypeVar
5
+
6
+ T = TypeVar("T")
7
+
8
+
9
+ class DaemonEventLoop:
10
+ """
11
+ A wrapper around asyncio.EventLoop that runs the loop in a daemon thread.
12
+ The thread is started with the first `await_` call.
13
+ """
14
+
15
+ def __init__(self) -> None:
16
+ self._loop = asyncio.new_event_loop()
17
+ self._start_lock = threading.Lock()
18
+ self._started = False
19
+
20
+ def await_(self, awaitable: Awaitable[T]) -> T:
21
+ with self._start_lock:
22
+ if not self._started:
23
+ threading.Thread(target=self._loop.run_forever, daemon=True).start()
24
+ self._started = True
25
+ future = asyncio.run_coroutine_threadsafe(_coroutine(awaitable), self._loop)
26
+ return future.result()
27
+
28
+
29
+ async def _coroutine(awaitable: Awaitable[T]) -> T:
30
+ return await awaitable
@@ -20,6 +20,8 @@ class GitIgnore:
20
20
  self.load_recursive()
21
21
 
22
22
  def load_ignore_file(self, path: str, ignore_file: Path):
23
+ if path != "." and not path.startswith("./"):
24
+ path = "./" + path
23
25
  if path not in self.ignore_globs:
24
26
  self.ignore_globs[path] = []
25
27
  with ignore_file.open("r") as f:
@@ -64,11 +64,9 @@ def _get_fleet_spec_excludes(fleet_spec: FleetSpec) -> Optional[Dict]:
64
64
  spec_excludes: Dict[str, Any] = {}
65
65
  configuration_excludes: Dict[str, Any] = {}
66
66
  profile_excludes: set[str] = set()
67
- # Fields can be excluded like this:
68
- # if fleet_spec.configuration.availability_zones is None:
69
- # configuration_excludes["availability_zones"] = True
70
- # if fleet_spec.profile is not None and fleet_spec.profile.availability_zones is None:
71
- # profile_excludes.add("availability_zones")
67
+ profile = fleet_spec.profile
68
+ if profile.fleets is None:
69
+ profile_excludes.add("fleets")
72
70
  if configuration_excludes:
73
71
  spec_excludes["configuration"] = configuration_excludes
74
72
  if profile_excludes:
@@ -104,13 +104,12 @@ def _get_run_spec_excludes(run_spec: RunSpec) -> Optional[Dict]:
104
104
  spec_excludes: dict[str, Any] = {}
105
105
  configuration_excludes: dict[str, Any] = {}
106
106
  profile_excludes: set[str] = set()
107
- # configuration = run_spec.configuration
108
- # profile = run_spec.profile
109
- # Fields can be excluded like this:
110
- # if configuration.availability_zones is None:
111
- # configuration_excludes["availability_zones"] = True
112
- # if profile is not None and profile.availability_zones is None:
113
- # profile_excludes.add("availability_zones")
107
+ configuration = run_spec.configuration
108
+ profile = run_spec.profile
109
+ if configuration.fleets is None:
110
+ configuration_excludes["fleets"] = True
111
+ if profile is not None and profile.fleets is None:
112
+ profile_excludes.add("fleets")
114
113
  if configuration_excludes:
115
114
  spec_excludes["configuration"] = configuration_excludes
116
115
  if profile_excludes:
dstack/version.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__ = "0.19.1"
1
+ __version__ = "0.19.3"
2
2
  __is_release__ = True
3
3
  base_image = "0.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dstack
3
- Version: 0.19.1
3
+ Version: 0.19.3
4
4
  Summary: dstack is an open-source orchestration engine for running AI workloads on any cloud or on-premises.
5
5
  Home-page: https://dstack.ai
6
6
  Author: Andrey Cheptsov
@@ -23,6 +23,7 @@ Requires-Dist: typing-extensions>=4.0.0
23
23
  Requires-Dist: cryptography
24
24
  Requires-Dist: packaging
25
25
  Requires-Dist: python-dateutil
26
+ Requires-Dist: cachetools
26
27
  Requires-Dist: gitpython
27
28
  Requires-Dist: jsonschema
28
29
  Requires-Dist: paramiko>=3.2.0
@@ -37,7 +38,7 @@ Requires-Dist: websocket-client
37
38
  Requires-Dist: python-multipart>=0.0.16
38
39
  Requires-Dist: filelock
39
40
  Requires-Dist: psutil
40
- Requires-Dist: gpuhunt<0.2.0,>=0.1.0
41
+ Requires-Dist: gpuhunt<0.2.0,>=0.1.2
41
42
  Requires-Dist: argcomplete>=3.5.0
42
43
  Provides-Extra: all
43
44
  Requires-Dist: fastapi; extra == "all"
@@ -58,7 +59,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "all"
58
59
  Requires-Dist: sentry-sdk[fastapi]; extra == "all"
59
60
  Requires-Dist: alembic-postgresql-enum; extra == "all"
60
61
  Requires-Dist: asyncpg; extra == "all"
61
- Requires-Dist: cachetools; extra == "all"
62
62
  Requires-Dist: python-json-logger>=3.1.0; extra == "all"
63
63
  Requires-Dist: prometheus-client; extra == "all"
64
64
  Requires-Dist: grpcio>=1.50; extra == "all"
@@ -80,6 +80,7 @@ Requires-Dist: google-cloud-tpu>=1.18.3; extra == "all"
80
80
  Requires-Dist: datacrunch; extra == "all"
81
81
  Requires-Dist: kubernetes; extra == "all"
82
82
  Requires-Dist: oci; extra == "all"
83
+ Requires-Dist: nebius<0.3,>=0.2.19; python_version >= "3.10" and extra == "all"
83
84
  Provides-Extra: aws
84
85
  Requires-Dist: fastapi; extra == "aws"
85
86
  Requires-Dist: starlette>=0.26.0; extra == "aws"
@@ -99,7 +100,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "aws"
99
100
  Requires-Dist: sentry-sdk[fastapi]; extra == "aws"
100
101
  Requires-Dist: alembic-postgresql-enum; extra == "aws"
101
102
  Requires-Dist: asyncpg; extra == "aws"
102
- Requires-Dist: cachetools; extra == "aws"
103
103
  Requires-Dist: python-json-logger>=3.1.0; extra == "aws"
104
104
  Requires-Dist: prometheus-client; extra == "aws"
105
105
  Requires-Dist: grpcio>=1.50; extra == "aws"
@@ -124,7 +124,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "azure"
124
124
  Requires-Dist: sentry-sdk[fastapi]; extra == "azure"
125
125
  Requires-Dist: alembic-postgresql-enum; extra == "azure"
126
126
  Requires-Dist: asyncpg; extra == "azure"
127
- Requires-Dist: cachetools; extra == "azure"
128
127
  Requires-Dist: python-json-logger>=3.1.0; extra == "azure"
129
128
  Requires-Dist: prometheus-client; extra == "azure"
130
129
  Requires-Dist: grpcio>=1.50; extra == "azure"
@@ -153,7 +152,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "datacrunch"
153
152
  Requires-Dist: sentry-sdk[fastapi]; extra == "datacrunch"
154
153
  Requires-Dist: alembic-postgresql-enum; extra == "datacrunch"
155
154
  Requires-Dist: asyncpg; extra == "datacrunch"
156
- Requires-Dist: cachetools; extra == "datacrunch"
157
155
  Requires-Dist: python-json-logger>=3.1.0; extra == "datacrunch"
158
156
  Requires-Dist: prometheus-client; extra == "datacrunch"
159
157
  Requires-Dist: grpcio>=1.50; extra == "datacrunch"
@@ -185,7 +183,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "gcp"
185
183
  Requires-Dist: sentry-sdk[fastapi]; extra == "gcp"
186
184
  Requires-Dist: alembic-postgresql-enum; extra == "gcp"
187
185
  Requires-Dist: asyncpg; extra == "gcp"
188
- Requires-Dist: cachetools; extra == "gcp"
189
186
  Requires-Dist: python-json-logger>=3.1.0; extra == "gcp"
190
187
  Requires-Dist: prometheus-client; extra == "gcp"
191
188
  Requires-Dist: grpcio>=1.50; extra == "gcp"
@@ -215,7 +212,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "kubernetes"
215
212
  Requires-Dist: sentry-sdk[fastapi]; extra == "kubernetes"
216
213
  Requires-Dist: alembic-postgresql-enum; extra == "kubernetes"
217
214
  Requires-Dist: asyncpg; extra == "kubernetes"
218
- Requires-Dist: cachetools; extra == "kubernetes"
219
215
  Requires-Dist: python-json-logger>=3.1.0; extra == "kubernetes"
220
216
  Requires-Dist: prometheus-client; extra == "kubernetes"
221
217
  Requires-Dist: grpcio>=1.50; extra == "kubernetes"
@@ -239,12 +235,34 @@ Requires-Dist: python-dxf==12.1.0; extra == "lambda"
239
235
  Requires-Dist: sentry-sdk[fastapi]; extra == "lambda"
240
236
  Requires-Dist: alembic-postgresql-enum; extra == "lambda"
241
237
  Requires-Dist: asyncpg; extra == "lambda"
242
- Requires-Dist: cachetools; extra == "lambda"
243
238
  Requires-Dist: python-json-logger>=3.1.0; extra == "lambda"
244
239
  Requires-Dist: prometheus-client; extra == "lambda"
245
240
  Requires-Dist: grpcio>=1.50; extra == "lambda"
246
241
  Requires-Dist: boto3; extra == "lambda"
247
242
  Requires-Dist: botocore; extra == "lambda"
243
+ Provides-Extra: nebius
244
+ Requires-Dist: fastapi; extra == "nebius"
245
+ Requires-Dist: starlette>=0.26.0; extra == "nebius"
246
+ Requires-Dist: uvicorn; extra == "nebius"
247
+ Requires-Dist: aiorwlock; extra == "nebius"
248
+ Requires-Dist: aiocache; extra == "nebius"
249
+ Requires-Dist: httpx; extra == "nebius"
250
+ Requires-Dist: jinja2; extra == "nebius"
251
+ Requires-Dist: watchfiles; extra == "nebius"
252
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == "nebius"
253
+ Requires-Dist: sqlalchemy-utils>=0.40.0; extra == "nebius"
254
+ Requires-Dist: alembic>=1.10.2; extra == "nebius"
255
+ Requires-Dist: apscheduler<4; extra == "nebius"
256
+ Requires-Dist: aiosqlite; extra == "nebius"
257
+ Requires-Dist: docker>=6.0.0; extra == "nebius"
258
+ Requires-Dist: python-dxf==12.1.0; extra == "nebius"
259
+ Requires-Dist: sentry-sdk[fastapi]; extra == "nebius"
260
+ Requires-Dist: alembic-postgresql-enum; extra == "nebius"
261
+ Requires-Dist: asyncpg; extra == "nebius"
262
+ Requires-Dist: python-json-logger>=3.1.0; extra == "nebius"
263
+ Requires-Dist: prometheus-client; extra == "nebius"
264
+ Requires-Dist: grpcio>=1.50; extra == "nebius"
265
+ Requires-Dist: nebius<0.3,>=0.2.19; extra == "nebius"
248
266
  Provides-Extra: oci
249
267
  Requires-Dist: fastapi; extra == "oci"
250
268
  Requires-Dist: starlette>=0.26.0; extra == "oci"
@@ -264,7 +282,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "oci"
264
282
  Requires-Dist: sentry-sdk[fastapi]; extra == "oci"
265
283
  Requires-Dist: alembic-postgresql-enum; extra == "oci"
266
284
  Requires-Dist: asyncpg; extra == "oci"
267
- Requires-Dist: cachetools; extra == "oci"
268
285
  Requires-Dist: python-json-logger>=3.1.0; extra == "oci"
269
286
  Requires-Dist: prometheus-client; extra == "oci"
270
287
  Requires-Dist: grpcio>=1.50; extra == "oci"
@@ -288,7 +305,6 @@ Requires-Dist: python-dxf==12.1.0; extra == "server"
288
305
  Requires-Dist: sentry-sdk[fastapi]; extra == "server"
289
306
  Requires-Dist: alembic-postgresql-enum; extra == "server"
290
307
  Requires-Dist: asyncpg; extra == "server"
291
- Requires-Dist: cachetools; extra == "server"
292
308
  Requires-Dist: python-json-logger>=3.1.0; extra == "server"
293
309
  Requires-Dist: prometheus-client; extra == "server"
294
310
  Requires-Dist: grpcio>=1.50; extra == "server"
@@ -1,10 +1,10 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=ja4J6HzBpBX3wxm5CKLUUgzAwmmr8naAhq3SBch6VIw,64
2
+ dstack/version.py,sha256=DKk0Y8_Op_UbyKNVsizxt2z7ZswlPckTIFYm3ZlwFTM,64
3
3
  dstack/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  dstack/_internal/compat.py,sha256=bF9U9fTMfL8UVhCouedoUSTYFl7UAOiU0WXrnRoByxw,40
5
5
  dstack/_internal/settings.py,sha256=8XODoSW2joaEndvZxuHUPSFK85sGgJ7fVL976isYeJM,557
6
6
  dstack/_internal/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- dstack/_internal/cli/main.py,sha256=yaEEdjzonW18IULYqu9-oAEbusRSgjmFiHP6a-FgVHA,3489
7
+ dstack/_internal/cli/main.py,sha256=tVSDJxBI4qJhsDePgPkkJCEB-e98j7HSWzvcSfA64G8,3594
8
8
  dstack/_internal/cli/commands/__init__.py,sha256=e8EjD8Ej7Q3_APlxAN7NBwY7dGnW-DR91nH_RgcjBXg,2023
9
9
  dstack/_internal/cli/commands/apply.py,sha256=dZH2B3Yr-lB7hs-QeUnvX0FV0Yk2x19dEO5uSFo4098,4909
10
10
  dstack/_internal/cli/commands/attach.py,sha256=resmqoqkIOptp9Vn4BMs8m42Txl4mPzFDhHcv_lkWJk,5033
@@ -15,15 +15,16 @@ dstack/_internal/cli/commands/fleet.py,sha256=J0Yi5CAYvIQF_NC4ZBsDYGc3grTOtvaF7s
15
15
  dstack/_internal/cli/commands/gateway.py,sha256=DcD6P_MvXbSL9aXkLX9hgGYSAzARjgY6RSbrCMzdNcg,6075
16
16
  dstack/_internal/cli/commands/init.py,sha256=bLhSlViNWtjflB6xNq_PuCR2o2A06h222luh1NeUgVA,1169
17
17
  dstack/_internal/cli/commands/logs.py,sha256=o8ehPAKM12Xn9thg2jjnYdr7_wKqF-00ziVry8IVVwE,1528
18
+ dstack/_internal/cli/commands/metrics.py,sha256=nxdTcyCvHNev7Mn19zGQ7vTHUBGY6hyvPtY6Z731SOU,5373
18
19
  dstack/_internal/cli/commands/ps.py,sha256=WUQKL-1HcoM-oFF_WX4zplO8yKGMWfVbsivg0L7LP2w,1666
19
20
  dstack/_internal/cli/commands/server.py,sha256=dCEdmVp1OlwFnSGw9k8mBb26wZy1D_ctgn5pmK8ZrCQ,2802
20
- dstack/_internal/cli/commands/stats.py,sha256=9EyGw60Oc_KkPLHz-IN1sIFZ4AJUadfsU0PNXQ7Kvqg,5031
21
+ dstack/_internal/cli/commands/stats.py,sha256=_CiJPQZuKHUzA1x7CHJP-leth3MmqiQ2-jwojq6G-e8,390
21
22
  dstack/_internal/cli/commands/stop.py,sha256=i7TreejSemrQcL7C37La22KkwM98O09IDMRNt8cw1NI,1000
22
23
  dstack/_internal/cli/commands/volume.py,sha256=h0bQQm6zx1Bq0kdBX5ksqPZk55wz-md_Kitm0RTDReg,3214
23
24
  dstack/_internal/cli/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
25
  dstack/_internal/cli/services/args.py,sha256=Rnqq4M979bNACwWehgGKF2j30x01Efs-dDP-bjyTroE,782
25
26
  dstack/_internal/cli/services/completion.py,sha256=HvWHdZhXQWX1FyHf1OtQJxeuIXMXBKcoa5UjNRr0AN0,2984
26
- dstack/_internal/cli/services/profile.py,sha256=P_CAyuXO5VIpcw3ekAv-SRl-1XbNdnn28qF_OaVGUnw,5581
27
+ dstack/_internal/cli/services/profile.py,sha256=zfLRuesv5DSnLkbOU-TouvYmGGaKvw33yTVvK7HbxII,5853
27
28
  dstack/_internal/cli/services/repos.py,sha256=ImJuElGjsR4OQ7dBquy4PCQUbBM4bR4vhyLwMrVBS7k,3307
28
29
  dstack/_internal/cli/services/configurators/__init__.py,sha256=z94VPBFqybP8Zpwy3CzYxmpPAqYBOvRRLpXoz2H4GKI,2697
29
30
  dstack/_internal/cli/services/configurators/base.py,sha256=DxVuF9pDqghq9mFCcTDG1CxO06IAAwvzlc9nHflCipc,3443
@@ -41,15 +42,15 @@ dstack/_internal/cli/utils/updates.py,sha256=9KQcm_TEE_PiU0yc5WH4xRse0WIeHOubi9E
41
42
  dstack/_internal/cli/utils/volume.py,sha256=mU9I06dVMFbpjfkefxrZNoSWadKLoib3U14rHudNQN4,1975
42
43
  dstack/_internal/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
44
  dstack/_internal/core/consts.py,sha256=c1Yd5UY6Qx7KeuYgloXWncWhMsYj6TqwlElda7NtB98,254
44
- dstack/_internal/core/errors.py,sha256=UvqMIBVHG1NIUP0w0g5dWjnxOz37sfFi4lh4yuYK0vw,2793
45
+ dstack/_internal/core/errors.py,sha256=elI7vcTXJvCpg_TOcpar5nBTKiQ71vZMEly6aM_N0jg,3212
45
46
  dstack/_internal/core/backends/__init__.py,sha256=fwgV8CN8Ap6MZmWklMGHHf0roliBtqne-ijjVOpWcgc,2467
46
- dstack/_internal/core/backends/configurators.py,sha256=EFzzlP6R4J82WkKpltGWG4HPmg5Iqw8Nvg3wuCxskxY,3583
47
- dstack/_internal/core/backends/models.py,sha256=YoVHk-dcFMcrbOE9dxtUTYO3ZJlpRy3MBND2KB6u2aA,3833
47
+ dstack/_internal/core/backends/configurators.py,sha256=JxGfZwcmL90akMFkAzzZ_fzPvU2No0pBaBqU_g0D-y0,3775
48
+ dstack/_internal/core/backends/models.py,sha256=aKQOrDEStouuwY4MacSen7SkoyAa6HR6a6PFq5-cbNk,4088
48
49
  dstack/_internal/core/backends/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
50
  dstack/_internal/core/backends/aws/auth.py,sha256=TzjRq01exWToWUf9BjT_58zB7L_wnNZduTdVlPmUfxg,1061
50
51
  dstack/_internal/core/backends/aws/backend.py,sha256=pjROH-S9pgrSMm-Eox_ocL7cTU6mIMRxvURq7Vi-2J8,876
51
52
  dstack/_internal/core/backends/aws/compute.py,sha256=cSuoudrYvGnwPv1BG526DmkWV08Vfr5VJCsxXBAI684,34849
52
- dstack/_internal/core/backends/aws/configurator.py,sha256=GnPvr-5oHVCRkYGO1DbG8JfAF-seJzArfZ0F7dUq65k,7555
53
+ dstack/_internal/core/backends/aws/configurator.py,sha256=DT2-i3q13ZfraLyOlhRZuwT58N62ZqHN3dhvyt9JU9M,7594
53
54
  dstack/_internal/core/backends/aws/models.py,sha256=EUCHXHmZnshe3rwI9UtjilwcUMu1Z7MO4Y4-nlZ_IcA,4404
54
55
  dstack/_internal/core/backends/aws/resources.py,sha256=-TeiuxMWP-ePiSV94t7wRWj5nG8jCD_IrHlpOO4xaR0,22540
55
56
  dstack/_internal/core/backends/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -62,31 +63,32 @@ dstack/_internal/core/backends/azure/resources.py,sha256=keE3ruSSNWhSYMCkG7832TY
62
63
  dstack/_internal/core/backends/azure/utils.py,sha256=taHMJq6UHRzUXLUcO2P5VCKy3wJaye2bG-6QdkEPNdY,1741
63
64
  dstack/_internal/core/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
65
  dstack/_internal/core/backends/base/backend.py,sha256=hdFMHED1RMV9GVfLSU0yGhGE-cXlbLvt1coDA885PMM,505
65
- dstack/_internal/core/backends/base/compute.py,sha256=pWO-28QT-soRATGUcdWoGbNff6VuMJLyJ5_gmJ_SG1U,23696
66
+ dstack/_internal/core/backends/base/compute.py,sha256=cgDo-01yYec6nS_yrVrWDB2NTCzVP5StOZ_VrIFHUAQ,23880
66
67
  dstack/_internal/core/backends/base/configurator.py,sha256=OCv8N2oxcxy3In2zS1PKiCJ0a-COZwxGjBz2FYkQnfg,3807
67
- dstack/_internal/core/backends/base/models.py,sha256=B8CscQIEttg9xySzaQ5h3VIczjEFxfh4tKTlL0JVwUo,388
68
+ dstack/_internal/core/backends/base/models.py,sha256=Ij0osOl-T-ABsKLoVg2eY81DMkwdWkevAnjXj2QnLXI,532
68
69
  dstack/_internal/core/backends/base/offers.py,sha256=89H6g6Dw5WvXDEBnKoZUF-fGIE3Clc8T4lEjZ_jr71A,5909
69
70
  dstack/_internal/core/backends/cudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
71
  dstack/_internal/core/backends/cudo/api_client.py,sha256=ygq1Gx7ZvwKaifdXtvzDSw4xR4ZH6UWd5J47BjuaGh0,3685
71
72
  dstack/_internal/core/backends/cudo/backend.py,sha256=i13YoAkUfIStc3Yyyt_3YmL30eVrKtrhwnE9_B1iBRI,546
72
- dstack/_internal/core/backends/cudo/compute.py,sha256=FCJTgSJx6kFV1XQEhyGn-OfE24Zwt1jlGmOHr7iZnLQ,6240
73
- dstack/_internal/core/backends/cudo/configurator.py,sha256=OS-COD6OSxfx1qjDNTl_otvsRDZV_g6RiYGQeWwDQCg,2303
73
+ dstack/_internal/core/backends/cudo/compute.py,sha256=gyye20HMIPGyjON6HPsb8DrXqQ1RrMhRXCPBReDCf2Q,6349
74
+ dstack/_internal/core/backends/cudo/configurator.py,sha256=pkAT1MtL6_yYvYoqCglvPE-DiUdL8-XEviyN1yUSYyw,2056
74
75
  dstack/_internal/core/backends/cudo/models.py,sha256=6sfEqY2hvTpIACkyT4mhD3D8K5TsW_pupys9nqtrgoI,1055
75
76
  dstack/_internal/core/backends/datacrunch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- dstack/_internal/core/backends/datacrunch/api_client.py,sha256=EMnd4uEZqSXEcCajMvaYKnL4l-mZRPGYlsjaeG4It8M,2602
77
77
  dstack/_internal/core/backends/datacrunch/backend.py,sha256=-wanJJ_K_wOXezxTSRgsK1MjsOuCl0MoVJREPj3SgM8,606
78
- dstack/_internal/core/backends/datacrunch/compute.py,sha256=gEpf6u4_cp7or6P47tJXc6GOEiwkoFuvNwLdOp7h_qw,6142
79
- dstack/_internal/core/backends/datacrunch/configurator.py,sha256=K8Lxny3jONhL158rfikDM1Cfph5lVyoBSPX2CjN28lA,2046
78
+ dstack/_internal/core/backends/datacrunch/compute.py,sha256=jomY_E6UeL4Rzp41yXdRTq33TWMM92tLX6NRlCcQ4VQ,8913
79
+ dstack/_internal/core/backends/datacrunch/configurator.py,sha256=KH2N-6tcs0_AO1inSlU0jv1IK2QYxP35ohfGqXYGjGg,2401
80
80
  dstack/_internal/core/backends/datacrunch/models.py,sha256=QeadH8qmcK3oDY9DfQKmX65fDGQo6FABLQAe9wQsHr8,1194
81
81
  dstack/_internal/core/backends/dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  dstack/_internal/core/backends/dstack/models.py,sha256=Jbe0Syez43N5i97TlIc8l-5VnUkakP5W1t_9gqhFNtc,812
83
83
  dstack/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
84
  dstack/_internal/core/backends/gcp/auth.py,sha256=dB9XU8bWy7bsstzVeXv-i9beUzm2jFDxtvf98-AYdRY,2318
85
85
  dstack/_internal/core/backends/gcp/backend.py,sha256=OvTv1c7j4LTPCIEtkwD3-q6Eo1QET8xlM8CzbY0hLmI,572
86
- dstack/_internal/core/backends/gcp/compute.py,sha256=4EfKqTeKIwFuTZpbdM6nkxX_TFGtpl_DmKSuiMJI_js,34808
87
- dstack/_internal/core/backends/gcp/configurator.py,sha256=1jBVF7pcsyZmyws7xqIk8qDQNJ3XZROFMrEm4-5OTgU,6625
88
- dstack/_internal/core/backends/gcp/models.py,sha256=2GgLSIV6-nRGR1-pYNxN3K2njnn5kURiPR9Zd2hdxbc,4190
89
- dstack/_internal/core/backends/gcp/resources.py,sha256=ZDs8rjdMCgHeeHH_vzxJjhCJN-omF4tRBApkN3GOjpg,14539
86
+ dstack/_internal/core/backends/gcp/compute.py,sha256=LR-9_qGFNibQjk6oc2HVz39KsDYJBViyUhfYE3nZt20,39230
87
+ dstack/_internal/core/backends/gcp/configurator.py,sha256=bDa-9pfNrkz2ZeFrddBC2ny_rNq01EWec_rzXy5cSS4,6825
88
+ dstack/_internal/core/backends/gcp/models.py,sha256=biLA3rlFcoPatAZpKycuIl-8PdnNSAFiDCJjov65_zo,4612
89
+ dstack/_internal/core/backends/gcp/resources.py,sha256=mbRsniyhOUT0D1O2JUiAz2QiCeAmGAkSbRtMv8fiVbA,15895
90
+ dstack/_internal/core/backends/gcp/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
+ dstack/_internal/core/backends/gcp/features/tcpx.py,sha256=--Q0VLuyHQCWQ49LrzYdNSr0LZzacMPMXnmKr6tc7JU,1256
90
92
  dstack/_internal/core/backends/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
93
  dstack/_internal/core/backends/kubernetes/backend.py,sha256=Jy0_Nwn6Oro8McJIo_QeNxxq4Pmwsd7JPd5_YE8Fz9U,606
92
94
  dstack/_internal/core/backends/kubernetes/compute.py,sha256=hFQkElNHRi4DBoyLJAYXuhCV4bJi0HjzbMGtrsKrMr0,23037
@@ -96,12 +98,18 @@ dstack/_internal/core/backends/kubernetes/utils.py,sha256=k0cmjqMoNfJ_pAe6W82exV
96
98
  dstack/_internal/core/backends/lambdalabs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
99
  dstack/_internal/core/backends/lambdalabs/api_client.py,sha256=WaBO7VrPB4kbMQJDxjFxx0HEtAoSncQvH-cahWnVxx4,2688
98
100
  dstack/_internal/core/backends/lambdalabs/backend.py,sha256=zVU_M2EBbP-9-snmh64GTKeYAX84-g5kwrZ9d7xETzs,610
99
- dstack/_internal/core/backends/lambdalabs/compute.py,sha256=U2AkRbZiOXuUGPh2BtZs8YcTkNu6A3Guq7-IIkd21QA,7592
100
- dstack/_internal/core/backends/lambdalabs/configurator.py,sha256=cuy6QGeTVNhpMFGRcHQvtSgB7H_DRzWk0_6QzOtYiQE,2520
101
+ dstack/_internal/core/backends/lambdalabs/compute.py,sha256=iIO5UA3XTYE4w4RyQPwgMw1gECX1IjPGOSlshxr8dxU,7518
102
+ dstack/_internal/core/backends/lambdalabs/configurator.py,sha256=JYtAFemQRi6tXTt6rfbIa6rCQIKjn86gQvbjxeGUrDs,2135
101
103
  dstack/_internal/core/backends/lambdalabs/models.py,sha256=c9dAYd0wjun2dvMLUZO4D09XvEskBRehjLDN_nwbSEU,1036
102
104
  dstack/_internal/core/backends/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
105
  dstack/_internal/core/backends/local/backend.py,sha256=KJuNXUXrg60NhLywnExD1EXH2gK0TL-kzNWUPRNZ_Zg,427
104
106
  dstack/_internal/core/backends/local/compute.py,sha256=OQub3qFQdWGm8Laceh-TU4KPRzJwQxRgf_tMwmXFIQk,3613
107
+ dstack/_internal/core/backends/nebius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
+ dstack/_internal/core/backends/nebius/backend.py,sha256=2XqZIbSR8VzlfOnuVklXlDxNmwAkQj7txQN8VXF1j2E,566
109
+ dstack/_internal/core/backends/nebius/compute.py,sha256=S-150xCX1vYz0utGMTZfiAgJhYM-FtL_7uiOPWqCUK0,11068
110
+ dstack/_internal/core/backends/nebius/configurator.py,sha256=qG7n2ZpCcy7E0F9yqJlGo6yCu29Y8vT-y61fc1EGbKo,2747
111
+ dstack/_internal/core/backends/nebius/models.py,sha256=5-JZDOv3k0BZ3do6F5MBoRuBnpOq54Ulh_am1KfxxJA,3535
112
+ dstack/_internal/core/backends/nebius/resources.py,sha256=eWwI0cOnR3E1Kk6UVl2KTbPzSjyhSdY8Z4Ux5hPrjWw,8086
105
113
  dstack/_internal/core/backends/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
114
  dstack/_internal/core/backends/oci/auth.py,sha256=ErDfuAvmrKlFg5OCYz5BhtlGHQmSiupl9Uaxx3W-wTE,800
107
115
  dstack/_internal/core/backends/oci/backend.py,sha256=yXjVCt7n6BVLH0byYFbNFf-P9J0FwlNfxsYbKGMdoI4,536
@@ -121,9 +129,9 @@ dstack/_internal/core/backends/runpod/configurator.py,sha256=83-_u_Xe84GXMEVePN2
121
129
  dstack/_internal/core/backends/runpod/models.py,sha256=W3nO4sjvvWtfKYDZDVJ8oBSsgeGdSR-Z_PD7OpfDBgY,1466
122
130
  dstack/_internal/core/backends/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
131
  dstack/_internal/core/backends/tensordock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
- dstack/_internal/core/backends/tensordock/api_client.py,sha256=4106Jzn_I1WTX0VZkZk3I-xkG7sHGTUBRapi8Fk2H7o,3805
132
+ dstack/_internal/core/backends/tensordock/api_client.py,sha256=NUEKgu6JY6kqQXRqsghT-aBf7sNstHQo7J1WmqL-Qfs,3872
125
133
  dstack/_internal/core/backends/tensordock/backend.py,sha256=KT5bRuD3KttEqiNNqQpW5f6nX7Qez-L74TBmYKy3puI,606
126
- dstack/_internal/core/backends/tensordock/compute.py,sha256=_0lu8oIgweZKnTTAt8D8xePrZZvxpJphF0Pz_I5l-78,4865
134
+ dstack/_internal/core/backends/tensordock/compute.py,sha256=ROEiSg878TQCFC0j4S4g40TJ_ac0uNDTfNh6_SOBB94,4411
127
135
  dstack/_internal/core/backends/tensordock/configurator.py,sha256=52fBU4Rgvw_E6vE_OeFLBkRcPRsDLu2K0PWaPeGuBUc,2486
128
136
  dstack/_internal/core/backends/tensordock/models.py,sha256=oxbSWRCsD0_j4-2lQYo4LpmhKL8Kgv2nmq_dfMaSCiU,1182
129
137
  dstack/_internal/core/backends/vastai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -149,7 +157,7 @@ dstack/_internal/core/models/instances.py,sha256=cJt7VX0UsATX-imh6-KW-mgBgEZN2ta
149
157
  dstack/_internal/core/models/logs.py,sha256=Lsmtd_NrnChMjBJahUZpFb1j8Xobix9FHWf1L47FOGs,443
150
158
  dstack/_internal/core/models/metrics.py,sha256=Xb8hCXUL-ncQ3PMsErIUAJTe9gwh5jyrQ4UQoZbibsc,269
151
159
  dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7VSAtR_xoFvPVM,720
152
- dstack/_internal/core/models/profiles.py,sha256=PYFizaD8nTLVT7pyMl0751hm0XbvRCLIBDghbAtBYMU,9775
160
+ dstack/_internal/core/models/profiles.py,sha256=RlIeT9PMbN1o1hwI9O-GmpyNKcr7Ly4s3pn6mlHJK-8,9893
153
161
  dstack/_internal/core/models/projects.py,sha256=H5ZZRiyUEKifpTFAhl45KBi5ly7ooE0WmI329myK360,643
154
162
  dstack/_internal/core/models/resources.py,sha256=28xfFnTd5FHjI-WOtRlIj6L4Hmh0sQAMpIMo8nVe7LE,11301
155
163
  dstack/_internal/core/models/runs.py,sha256=jOoT2oyQfqSGH5vMclimp9aJGR2Hl_WSFMHWTF1RPUk,17977
@@ -160,7 +168,7 @@ dstack/_internal/core/models/unix.py,sha256=KxnSQELnkAjjuUgYcQKVkf-UAbYREBD8WCWD
160
168
  dstack/_internal/core/models/users.py,sha256=o_rd0GAmd6jufypVUs9P12NRri3rgAPDt-KxnqNNsGw,703
161
169
  dstack/_internal/core/models/volumes.py,sha256=EQmfTnB3oN6zbLwMqwda0X1T7oKLRRt_h5lTXvQ-siQ,6096
162
170
  dstack/_internal/core/models/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
- dstack/_internal/core/models/backends/base.py,sha256=nayexPe9kU0FytYI6LdY8aKaTHRG07der7Ia0nlKc9c,1023
171
+ dstack/_internal/core/models/backends/base.py,sha256=Fbhs90NBMceXhjORwj7c2_pVriapCGSUMBFwuR-wRIg,1091
164
172
  dstack/_internal/core/models/repos/__init__.py,sha256=7Qo1QgJ852LklUuM-mlCNFodp_XrQ4iqV7uRPiX_qm0,885
165
173
  dstack/_internal/core/models/repos/base.py,sha256=nErlSR3AbG9fwDE5vuJK5DIrP8JB3fG8a7mXqosJ9gY,846
166
174
  dstack/_internal/core/models/repos/local.py,sha256=DmW_e6qOWctZwuEpCqME-JpxYHTgH5I1gcK7zjSMfao,2394
@@ -218,7 +226,7 @@ dstack/_internal/proxy/lib/repo.py,sha256=zkWZ9XZzQHfCa-eifec7H7UYnJZLgeRuiQls7R
218
226
  dstack/_internal/proxy/lib/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
219
227
  dstack/_internal/proxy/lib/routers/model_proxy.py,sha256=57GFRpVRXcVY-347HnUSUr4w4RsxsjLuuZiJs8DwDpM,3895
220
228
  dstack/_internal/proxy/lib/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
221
- dstack/_internal/proxy/lib/schemas/model_proxy.py,sha256=a7QbgPE6QwFPlB890OQO7hRu5I6dAArsVJ4k5euFaC4,1851
229
+ dstack/_internal/proxy/lib/schemas/model_proxy.py,sha256=a-LT18-SrVVriF3YsYPUvil8e_9rLDiOTxfZy8hGsqU,1895
222
230
  dstack/_internal/proxy/lib/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
231
  dstack/_internal/proxy/lib/services/service_connection.py,sha256=Gf_ucng9dSKEfpi2kvxZekDSWisY2by6O7_PNZcQi1Q,5924
224
232
  dstack/_internal/proxy/lib/services/model_proxy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -242,13 +250,13 @@ dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5
242
250
  dstack/_internal/server/background/tasks/common.py,sha256=N7xSXbf2MoBWgbJ1e3AEzYBTf1Gn-pDXYND8Zr_YCJQ,970
243
251
  dstack/_internal/server/background/tasks/process_fleets.py,sha256=lKXUvN_b7DNjD3psHzyCt_JYsTxPFuQ86iXi8fj8GkM,3202
244
252
  dstack/_internal/server/background/tasks/process_gateways.py,sha256=hoUI1CSqbHt_uMwnzTRAEDl-LBw0wUk_W4xobIbdvRc,7017
245
- dstack/_internal/server/background/tasks/process_instances.py,sha256=Kc7CbWK4mFOsKwOqp-Pt0ewTsB5OZ5gkPyv9T6TNbpM,37674
253
+ dstack/_internal/server/background/tasks/process_instances.py,sha256=De-nbzvvwiO_xtI16tRsosvQXAC3uzjynHAeWpcX51M,37970
246
254
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=acySfsacpYbTPV9Yivs-oU37z1S2sUdWhRHdJkfBcCA,5332
247
255
  dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=FqGfbzvfILdnPUfxjFPAM1ij2xd2mCDi8qufiBcUMI8,4107
248
256
  dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=u8hCXjOOek7VLEsmLy2VnDXFmIwTNjrJwcpWG7a1zW0,5093
249
- dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=V0lXxiPwYLYZ1IyTijZKT0FvJ9luLwH4nBNh43jhY8w,32250
257
+ dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=I4dIaNiClvJHEYtfuuW2Oe3hC73QkL9azYNsZ_yjmxg,33000
250
258
  dstack/_internal/server/background/tasks/process_runs.py,sha256=qYPclhUHAXZd7VHl2Dz3ET8YLsdkvPLTcDKOVrSIaoQ,16735
251
- dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=bW_nHV6L1FCErIZEDwj1yGELARFizS90mZcswmRnu6U,26512
259
+ dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=ypZw75ZK6_vnp-434obnkFVj6Yll9UylOOydAUrWpc4,26602
252
260
  dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=0Z3Q409RwSxOL_pgK8JktBthjtESEUH3ahwTLsTdYPk,3800
253
261
  dstack/_internal/server/background/tasks/process_volumes.py,sha256=206rbT4ICeZtEmqh_94Rry_fgHfFLLaSEX9W-svwFk4,5089
254
262
  dstack/_internal/server/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -325,7 +333,7 @@ dstack/_internal/server/routers/instances.py,sha256=XOogTC9My2Zv0ck37_PbHKoZI-j4
325
333
  dstack/_internal/server/routers/logs.py,sha256=_Euk283LbhlwHibJTKM-7YcpbeQFtWBqMfbOry3PSkU,1159
326
334
  dstack/_internal/server/routers/metrics.py,sha256=VFgWhkOvxVFDLlRM_kXHYFylLcfCD6UjXInvcd7H4dY,2314
327
335
  dstack/_internal/server/routers/projects.py,sha256=0R-w_6WXUbNo6fREAexFUQ3RoOJF2D_Iz35elKjym14,2717
328
- dstack/_internal/server/routers/prometheus.py,sha256=OuC17kgKkb2ErxDD5QZ_ZdZft5A8dMIAFlIzQ_04NEo,744
336
+ dstack/_internal/server/routers/prometheus.py,sha256=UAcOE8dpGZe4Wd0EOIlFPMbjaNjzX8A7iHlooeRvsfo,944
329
337
  dstack/_internal/server/routers/repos.py,sha256=P_zLoEQderxhCeHQJwRkrIhVcc0-cpabfyde22bWVRk,3362
330
338
  dstack/_internal/server/routers/runs.py,sha256=oPqyIRPwkMjj12M1IdMF2UitatqvljISAXnJAjfEJyQ,5352
331
339
  dstack/_internal/server/routers/secrets.py,sha256=50_qJCTYRpnGSlLyS93gqoV17wWewOVmM65PcG1bT_Y,856
@@ -347,22 +355,22 @@ dstack/_internal/server/schemas/secrets.py,sha256=mfqLSM7PqxVQ-GIWB6RfPRUOvSvvaR
347
355
  dstack/_internal/server/schemas/users.py,sha256=FuDqwRVe3mOmv497vOZKjI0a_d4Wt2g4ZiCJcyfHEKA,495
348
356
  dstack/_internal/server/schemas/volumes.py,sha256=9iwaQLMhA6aj9XmtdU_9jWVhpzNOtFbDByAe-WYfYh0,673
349
357
  dstack/_internal/server/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
350
- dstack/_internal/server/security/permissions.py,sha256=ZIUIP5HGk1KG7vGfpZCxP4LsMuKHAz64iOUsAC7FebY,4425
358
+ dstack/_internal/server/security/permissions.py,sha256=FJ_8YPhjmebA4jQjtQoAGEaj1Hahb_po0tYRCQ18aaE,4940
351
359
  dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
352
360
  dstack/_internal/server/services/config.py,sha256=X61ypyuBQqAuWi-mVFJ7Uk1DyGfHqk8_d2C6xIG0yxE,10434
353
361
  dstack/_internal/server/services/docker.py,sha256=3EcYPiVsrNBGDQYOb60QJ241mzTT6lJROYQXIwt-8dk,5351
354
362
  dstack/_internal/server/services/fleets.py,sha256=G4kGuGa-7M6hTjvVuN8iroSWMtDjp83a-J8V9Sap4iA,26064
355
- dstack/_internal/server/services/instances.py,sha256=KbqoTqX8v5Hd8UhLScZHXo3GVSqiTe0XHS08xgX4ROo,18175
363
+ dstack/_internal/server/services/instances.py,sha256=s-D20jyhevB85eSD7fP36OC7wtMOp88Pra104YSvDLk,18549
356
364
  dstack/_internal/server/services/locking.py,sha256=UV5kc-BgROBuNDpBrp8jkcf-fHPOpHLc8JufL-8mbN8,2453
357
365
  dstack/_internal/server/services/logging.py,sha256=Nu1628kW2hqB__N0Eyr07wGWjVWxfyJnczonTJ72kSM,417
358
366
  dstack/_internal/server/services/metrics.py,sha256=jKLy1jSCVR_crqVu_CmsOMbvMkucWBandI0SS1LDeRQ,6896
359
- dstack/_internal/server/services/offers.py,sha256=tTld2ZcYdbhzShtMIf1YfTyIADtpN3htUfJpirUf5pY,6962
367
+ dstack/_internal/server/services/offers.py,sha256=At_fRbFCEHBsiJiqIZMMowofO4o0pfs6tSOtFgZc8Nc,7086
360
368
  dstack/_internal/server/services/permissions.py,sha256=l7Ngdelmn65vjw13NcOdaC6lBYMRuSw6FbHzYwdK3nE,1005
361
369
  dstack/_internal/server/services/placement.py,sha256=DWZ8-iAE3o0J0xaHikuJYZzpuBiq7lj41LiAP1PfoEs,1773
362
370
  dstack/_internal/server/services/projects.py,sha256=Y4LEkSvOVUHHP-F2qlrwBR7rFu0CFFhbHmDTKrrNuXE,15071
363
371
  dstack/_internal/server/services/prometheus.py,sha256=xq5G-Q2BJup9lS2F6__0wUVTs-k1Gr3dYclGzo2WoWo,12474
364
372
  dstack/_internal/server/services/repos.py,sha256=f9ztN7jz_2gvD9hXF5sJwWDVyG2-NHRfjIdSukowPh8,9342
365
- dstack/_internal/server/services/runs.py,sha256=B2jZtTOxavUHr6WqKMXqgLzB3xWsHTkWKykcvcT2lXI,37245
373
+ dstack/_internal/server/services/runs.py,sha256=UnKog2hcA_K0oBeauByKh16Zo0TrK5KpXiprtF1OtAY,37102
366
374
  dstack/_internal/server/services/storage.py,sha256=6I0xI_3_RpJNbKZwHjDnjrEwXGdHfiaeb5li15T-M1I,1884
367
375
  dstack/_internal/server/services/users.py,sha256=L-exfxHdhj3TKX-gSjezHrYK6tnrt5qsQs-zZng1tUI,7123
368
376
  dstack/_internal/server/services/volumes.py,sha256=nSewk8BZlfZsvpb9v94fMcJab5IaW_RB-acqSgYLT_g,14871
@@ -377,7 +385,7 @@ dstack/_internal/server/services/gateways/__init__.py,sha256=fOWSBpLocgOGNkNaYUN
377
385
  dstack/_internal/server/services/gateways/client.py,sha256=1PH9gUjRkHegp37B27pjBVoPFk64KjxcE30eEPBTLM0,7321
378
386
  dstack/_internal/server/services/gateways/connection.py,sha256=ot3lV85XdmCT45vBWeyj57nLPcLPNm316zu3jMyeWjA,5625
379
387
  dstack/_internal/server/services/gateways/pool.py,sha256=0LclTl1tyx-doS78LeaAKjr-SMp98zuwh5f9s06JSd0,1914
380
- dstack/_internal/server/services/jobs/__init__.py,sha256=6L70IgXaZ0t1elQXvew8PJo7gsAfct4bURhhh7RJRug,25586
388
+ dstack/_internal/server/services/jobs/__init__.py,sha256=1wLSrHVBRYUk-wQd5x8a6vJLe1b5qxRRTJ-1IC6Dul0,25618
381
389
  dstack/_internal/server/services/jobs/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
382
390
  dstack/_internal/server/services/jobs/configurators/base.py,sha256=e9akZ5un3XYCYRxRmc5PFCjY9jLgbIHFyk_Xl5E-9k4,11200
383
391
  dstack/_internal/server/services/jobs/configurators/dev.py,sha256=ufN6Sd8TwIsjQYNZE32fkAqJI7o2zjgoZThbrP-bd7U,2378
@@ -431,10 +439,10 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
431
439
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
432
440
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
433
441
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
434
- dstack/_internal/server/statics/index.html,sha256=1RngYCyoktp3XhwHvC2jeCdolq0T-w-LDfNJHInNeI0,10468
435
- dstack/_internal/server/statics/main-4a0fe83e84574654e397.js,sha256=lNEeGSQNL6XYc_nXkZwtL35FOJkqbAGUexPC38feqsQ,6204421
436
- dstack/_internal/server/statics/main-4a0fe83e84574654e397.js.map,sha256=WoJHj0c5pkjUN-aGI-v8oyylaxU3y4KgJ_G8QiwtvA8,8143363
437
- dstack/_internal/server/statics/main-da9f8c06a69c20dac23e.css,sha256=2ObS4Rg6yWkbk7nQqw-lnLVdYC3L8X5N7xZMKcavMWg,1296312
442
+ dstack/_internal/server/statics/index.html,sha256=BKjLor_D1IBNX8I7PLrM52UHwYpSqs8k9Mo54xHt0uY,10468
443
+ dstack/_internal/server/statics/main-8f9c66f404e9c7e7e020.css,sha256=RC2sAxRMpIK3myvsxKEhLk4OsxTOt7DgWunCwyn-B34,1336694
444
+ dstack/_internal/server/statics/main-e190de603dc1e9f485ec.js,sha256=JWr7tKeo7tSlseSCBTyzVTiKZkQeoBVIJHum50MeJeo,6520754
445
+ dstack/_internal/server/statics/main-e190de603dc1e9f485ec.js.map,sha256=3pJ5Xu1Zh12-s0dw7N6HRWmcQh014HLjaHoA2y11OHc,8557562
438
446
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
439
447
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
440
448
  dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
@@ -519,13 +527,14 @@ dstack/_internal/server/utils/common.py,sha256=PbjXtqYy1taKXpyG5ys8cIrz9MXqc9dBA
519
527
  dstack/_internal/server/utils/logging.py,sha256=bxUS2uWG5snypNRfL0d5sMLCDytyOZac81PSQlb7_rs,1907
520
528
  dstack/_internal/server/utils/routers.py,sha256=OzL9Oxy-1no7Txk1r-Pvf28l3S25CYJlyAscYY345Xg,4729
521
529
  dstack/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
522
- dstack/_internal/utils/common.py,sha256=c4qqqBqwhh44EVK002bq3PuvwtQUS77b30Ka8GZnHpc,8606
530
+ dstack/_internal/utils/common.py,sha256=z6ZCQnvxOfZoiXx7hRKljMsHt5ZDfhNdeyH9RyJ2v3I,8789
523
531
  dstack/_internal/utils/crypto.py,sha256=2RTSyzePuwwqc1X2HO6lwcSFyZ2kujnqluoICQ2DLJQ,1462
524
532
  dstack/_internal/utils/dxf.py,sha256=wguK9s6-69kqSDZkxd1kFEr6VlH5ixvFRJxizyOuJ8I,3229
525
533
  dstack/_internal/utils/env.py,sha256=HRbIspHpKHh05fMZeV23-hrZoV6vVMuniefD08u6ey0,357
534
+ dstack/_internal/utils/event_loop.py,sha256=DO2ADtWfH2z8F2hBbg_EADSWzleQYGVZ9D1XYDpH-tk,880
526
535
  dstack/_internal/utils/gpu.py,sha256=ZeWpy1nRLVh-FwBZdxbMoVjjCF0DWJlWfNoVgFhGx2w,1776
527
536
  dstack/_internal/utils/hash.py,sha256=mCERRtj9QwbpoP3vveBqbniSJiNMHG0vPSzp4fxmKv0,920
528
- dstack/_internal/utils/ignore.py,sha256=kC2dI1aKudFGJWPLnJX34eLBl4u9TOqw0mSElY-bIRM,3053
537
+ dstack/_internal/utils/ignore.py,sha256=Lb5l_qTxOApHGPRu_YHkpTB9e5P0KIOFibMm8vTs_eQ,3138
529
538
  dstack/_internal/utils/interpolator.py,sha256=kLRm_DagGcjnkLPtMC9NaHioegsUvg8uk4lom38eV3I,2922
530
539
  dstack/_internal/utils/json_schema.py,sha256=xsn5mQT943ZOABiDRhdtVvScqhLQeChlE7p_H40SCPc,270
531
540
  dstack/_internal/utils/logging.py,sha256=j37rgL-fQh2_E3ec_RqDy6Ora-Aa79ZVV-BAgZJViME,97
@@ -542,14 +551,14 @@ dstack/api/_public/runs.py,sha256=tILFldJb4EKMYYBMr5rUiD5aJGIPB4-eLXzwwcqPbVg,27
542
551
  dstack/api/huggingface/__init__.py,sha256=oIrEij3wttLZ1yrywEGvCMd6zswMQrX5pPjrqdSi0UA,2201
543
552
  dstack/api/server/__init__.py,sha256=BLEbmbhRZAOQ-CAuUFm2kvyRKckYfmABokzd-67LI7c,5762
544
553
  dstack/api/server/_backends.py,sha256=tSvJ4j-yp-S-4IYo7pKHluDaSsx6Xbwo08Ff6Do85fo,1639
545
- dstack/api/server/_fleets.py,sha256=3RMJIN4lOchCzsd07l29Otk6XJfMft17JZWMBZXtHzo,3121
554
+ dstack/api/server/_fleets.py,sha256=qtgG8v_pYWcAFrZV-kA61m8avEQixC_6PlfZrnUAIIg,2916
546
555
  dstack/api/server/_gateways.py,sha256=CtTenMdVnXRZ-yF-zDsEStutMQjNo_2MGca-EiOUxRg,2104
547
556
  dstack/api/server/_group.py,sha256=f9a_YvwZ7s1vDTQhOWHLwm3kO84C5R_zXToD4cxAnvY,432
548
557
  dstack/api/server/_logs.py,sha256=ng8QvFAIaoVOVChTK6Wuu5BeM6y7gAdx30KEYRsn9xA,500
549
558
  dstack/api/server/_metrics.py,sha256=OPb8sLhI_U605sHOPrELgy0_6cNFLJVfpvr-qkEukRM,670
550
559
  dstack/api/server/_projects.py,sha256=g6kNSU6jer8u7Kaut1I0Ft4wRMLBBCQShJf3fOB63hQ,1440
551
560
  dstack/api/server/_repos.py,sha256=bqsKuZWyiNLE8UAdSZrYNtk1J3Gu5MXXnTMIoM9jxpI,1770
552
- dstack/api/server/_runs.py,sha256=UKRdOwhezFP91Kp0AVjfQw-VC3_UdxghoHbmMk_IslY,4413
561
+ dstack/api/server/_runs.py,sha256=qzWQx2n4NQHQVHIgkv8xye1mpx0F6B5zXspaXRxVDeE,4313
553
562
  dstack/api/server/_secrets.py,sha256=VqLfrIcmBJtPxNDRkXTG44H5SWoY788YJapScUukvdY,1576
554
563
  dstack/api/server/_users.py,sha256=XzhgGKc5Tsr0-xkz3T6rGyWZ1tO7aYNhLux2eE7dAoY,1738
555
564
  dstack/api/server/_volumes.py,sha256=5mDHnWrOu46M3k4-VQ78lYIEZYaqp57iV9XCSChA-uI,2007
@@ -582,7 +591,7 @@ tests/_internal/core/backends/base/test_compute.py,sha256=LkeECcBu5SPNbysLHJWDGS
582
591
  tests/_internal/core/backends/cudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
583
592
  tests/_internal/core/backends/cudo/test_configurator.py,sha256=VKDonJPWWMEpie30sR71bzGc1HtVw_qvu0ASaN47Pcc,1468
584
593
  tests/_internal/core/backends/datacrunch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
585
- tests/_internal/core/backends/datacrunch/test_configurator.py,sha256=INYDyPnuOOibCtD91SYmLlTp4BHSHjoChv5RwCSoOQI,605
594
+ tests/_internal/core/backends/datacrunch/test_configurator.py,sha256=rYp6xcjvsTQmSzhH_shY8lICsRZqTWJQxaooIfgfqaw,732
586
595
  tests/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
587
596
  tests/_internal/core/backends/gcp/test_configurator.py,sha256=yeoUJCJWx7ZCLDJjtbNOuBO3HPwuUlrEjOnTsCvzmIc,1611
588
597
  tests/_internal/core/backends/gcp/test_resources.py,sha256=7nkVM9w-cVZov1M6SmOKm5W-JhooQCIgph4i-MGZx3c,1638
@@ -639,26 +648,26 @@ tests/_internal/server/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
639
648
  tests/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
640
649
  tests/_internal/server/background/tasks/test_process_fleets.py,sha256=Dl31_TwxoCzYqkVNPWGLsYxmGL2sZfEK3rQXLFyPIz8,2701
641
650
  tests/_internal/server/background/tasks/test_process_gateways.py,sha256=lOP4jPXDtadAgYp0aFND_fp5R_X19M58CaOlgnDAEck,5085
642
- tests/_internal/server/background/tasks/test_process_instances.py,sha256=WC32HvynBuSxwFtAyMTHS4eVzqCnyGufcrIUTEVoozI,27944
651
+ tests/_internal/server/background/tasks/test_process_instances.py,sha256=zRUlcD04l_wYpM5r3PnODYxE95ngu1_RD5KJRTTr-io,27998
643
652
  tests/_internal/server/background/tasks/test_process_metrics.py,sha256=z-u4HXJE5EMVH9kwU_POHmvp55ldAvuLpEMkaebBtsg,4976
644
653
  tests/_internal/server/background/tasks/test_process_placement_groups.py,sha256=19LYbIMZIIeKAN0b9KOMyS-cHUx0FoOojqQuM8Oeiq4,1620
645
654
  tests/_internal/server/background/tasks/test_process_prometheus_metrics.py,sha256=I9DgIJXVGS7UvbFgm4HFnzWiCICBpy72NjDPKU_7WII,7178
646
655
  tests/_internal/server/background/tasks/test_process_running_jobs.py,sha256=sulsnw-stoMdN_54eaaUbpE7N-ffPJxdkuQJDDu5fLA,29539
647
656
  tests/_internal/server/background/tasks/test_process_runs.py,sha256=CgC05lwsTai2eGAlpZS7pMAG5nWCG3FpszrkYrY65Vw,14010
648
- tests/_internal/server/background/tasks/test_process_submitted_jobs.py,sha256=DCO7hHPX6fc-crwHE2hAwsAhGtqoefo30vEpI8bU8QQ,22727
657
+ tests/_internal/server/background/tasks/test_process_submitted_jobs.py,sha256=W09M7UJM27RYGdK31xLlUOLMLgbZ4N1ZzXXKl7pGZeU,24325
649
658
  tests/_internal/server/background/tasks/test_process_submitted_volumes.py,sha256=pM7PwApOEDP0ogan91_a5ceF0foHQGCNKE9wlTJy9BA,2263
650
659
  tests/_internal/server/background/tasks/test_process_terminating_jobs.py,sha256=RWXc2MXp2n8Mte1URlkJfgxUZKDnTQntuWtJ5JdyTBQ,14053
651
660
  tests/_internal/server/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
652
- tests/_internal/server/routers/test_backends.py,sha256=xYZEBeISlS5mctGnzcq57QBSu08zFjcQGBxW8rnmcXw,33661
653
- tests/_internal/server/routers/test_fleets.py,sha256=1VIX-52lWbGnQ0m22KzHYOhLBioS7YO-H_pK7IkhVlA,34079
661
+ tests/_internal/server/routers/test_backends.py,sha256=LhD2PNnz4q2HcBzMkvwtyh9DcXuxOaoUd5pwKTNoAWU,39238
662
+ tests/_internal/server/routers/test_fleets.py,sha256=ussF8S4EdoyoArT0Va0uD70ajdumDdvz0zdqMzUt_ZM,34151
654
663
  tests/_internal/server/routers/test_gateways.py,sha256=59r93kdVIuyMHGPNTMCKUdIDpGJADjNs0vEV3xprxTw,24205
655
664
  tests/_internal/server/routers/test_instances.py,sha256=78HFMU9Xel8BNZL3TqnuvrKEAhqULOlnSpd1Ja3oXkU,9188
656
665
  tests/_internal/server/routers/test_logs.py,sha256=NZwyJlgjMOGq4XEx7-VDjTpniYPhZpsbZvB0dTawaog,3989
657
666
  tests/_internal/server/routers/test_metrics.py,sha256=xMdDFZW73Zl06QfggjatfwTut37s0soeliJivkCgBks,7620
658
667
  tests/_internal/server/routers/test_projects.py,sha256=Z3Ok7onAjUYS4ADvKvN-SwSxYKvlvf4MG5Y8baqQU14,25964
659
- tests/_internal/server/routers/test_prometheus.py,sha256=LqJwWn5ztSLIGnvZgj-sD7BFW-JuePFt6k__ymF5Btw,22711
668
+ tests/_internal/server/routers/test_prometheus.py,sha256=iYpgSVkV2yTSKV306rhAffuWGyQV3l2i88crwHIQWYo,23696
660
669
  tests/_internal/server/routers/test_repos.py,sha256=G4dKuFGd_UrxAHwh_XLl1xCHK_DCsiJcXBsHODw3yJk,16682
661
- tests/_internal/server/routers/test_runs.py,sha256=q02oBrUcp4JoJOL68jbxlfFxH9B8JO9Bkb7v_Qg-Aug,62984
670
+ tests/_internal/server/routers/test_runs.py,sha256=BNjyxFTTQFBfcUC8_6VsZ8Ve6CBoCCkyd7ISRgR5Pzw,63112
662
671
  tests/_internal/server/routers/test_server.py,sha256=ROkuRNNJEkMQuK8guZ3Qy3iRRfiWvPIJJJDc09BI0D4,489
663
672
  tests/_internal/server/routers/test_users.py,sha256=5QSLvfn9SroGsZoBGmSTEaaqJcdEO8EUUy_YuvLL8ss,12787
664
673
  tests/_internal/server/routers/test_volumes.py,sha256=DuYWKVfZwdFoRbgYP2wwhn4WcJKYZIepOvxr8Dr2QjQ,16226
@@ -692,8 +701,9 @@ tests/_internal/server/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
692
701
  tests/_internal/server/utils/test_common.py,sha256=CpElV3jAuGVh187tcnpuY3-RC07M5Hv2CSdsAKCpzB0,965
693
702
  tests/_internal/server/utils/test_routers.py,sha256=vhaTGaZ8r3gbwM3AQlgvy4tFgzjZJv6eXJe6G4gfHB0,2010
694
703
  tests/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
695
- tests/_internal/utils/test_common.py,sha256=Wyw2QzZuaznXarLAyq3QyEsXvXDQrVW1uXIZms1XI0U,6098
704
+ tests/_internal/utils/test_common.py,sha256=16WPR7wdpP05vWKRckva8hv8OopT8lIB1xH4bGDMn4I,6620
696
705
  tests/_internal/utils/test_env.py,sha256=MKg6gHw9JGROqg8Lovslr_BPfNol_eIVVrJSBcLCRJY,1109
706
+ tests/_internal/utils/test_event_loop.py,sha256=MpkFb8_rqS25ulfzZDw3RyR4LIMGrqPGzXHxeBFA1kQ,426
697
707
  tests/_internal/utils/test_gpu.py,sha256=vTyyWXRgZzil5RhzzA2tWW5owH_jgXXJBtW1Dx9rswo,2051
698
708
  tests/_internal/utils/test_interpolator.py,sha256=hjovKQhOkSdBFQyBXfnYG3kVJDG6x_jSiWizAxFfifs,1844
699
709
  tests/_internal/utils/test_network.py,sha256=4nxej28JgoDWfZ-uwqh5HtUKtCQCmEspUGQ8O5g6ixU,968
@@ -701,9 +711,9 @@ tests/_internal/utils/test_path.py,sha256=rzS-1YCxsFUocBe42dghLOMFNymPruGrA7bqFZ
701
711
  tests/_internal/utils/test_ssh.py,sha256=V-cBFPhD--9eM9d1uQQgpj2gnYLA3c43f4cX9uJ6E-U,1743
702
712
  tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
703
713
  tests/api/test_utils.py,sha256=SSSqHcNE5cZVqDq4n2sKZthRoXaZ_Bx7z1AAN5xTM9s,391
704
- dstack-0.19.1.dist-info/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
705
- dstack-0.19.1.dist-info/METADATA,sha256=sj_wcanWBaGU9ecMn6I32zvXuYFniyN_6K6ehbcO3tA,18231
706
- dstack-0.19.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
707
- dstack-0.19.1.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
708
- dstack-0.19.1.dist-info/top_level.txt,sha256=3BrIO1zrqxT9P20ymhRM6k15meZXzbPL6ykBlDZG2_k,13
709
- dstack-0.19.1.dist-info/RECORD,,
714
+ dstack-0.19.3.dist-info/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
715
+ dstack-0.19.3.dist-info/METADATA,sha256=JXiOn6Mxq0ueL0AaG4xXiTpvdgTtUh1sWjarn4EbnzE,19039
716
+ dstack-0.19.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
717
+ dstack-0.19.3.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
718
+ dstack-0.19.3.dist-info/top_level.txt,sha256=3BrIO1zrqxT9P20ymhRM6k15meZXzbPL6ykBlDZG2_k,13
719
+ dstack-0.19.3.dist-info/RECORD,,
@@ -1,3 +1,5 @@
1
+ from unittest.mock import patch
2
+
1
3
  from dstack._internal.core.backends.datacrunch.configurator import (
2
4
  DataCrunchConfigurator,
3
5
  )
@@ -13,5 +15,7 @@ class TestDataCrunchConfigurator:
13
15
  creds=DataCrunchCreds(client_id="valid", client_secret="valid"),
14
16
  regions=["FIN-01"],
15
17
  )
16
- # Currently no validation is implemented
17
- DataCrunchConfigurator().validate_config(config, default_creds_enabled=True)
18
+ with patch(
19
+ "dstack._internal.core.backends.datacrunch.configurator.DataCrunchConfigurator._validate_creds"
20
+ ):
21
+ DataCrunchConfigurator().validate_config(config, default_creds_enabled=True)