dstack 0.19.26__py3-none-any.whl → 0.19.27__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/init.py +2 -2
  2. dstack/_internal/cli/services/configurators/run.py +114 -16
  3. dstack/_internal/cli/services/repos.py +1 -18
  4. dstack/_internal/core/backends/amddevcloud/__init__.py +1 -0
  5. dstack/_internal/core/backends/amddevcloud/backend.py +16 -0
  6. dstack/_internal/core/backends/amddevcloud/compute.py +5 -0
  7. dstack/_internal/core/backends/amddevcloud/configurator.py +29 -0
  8. dstack/_internal/core/backends/aws/compute.py +6 -1
  9. dstack/_internal/core/backends/base/compute.py +33 -5
  10. dstack/_internal/core/backends/base/offers.py +2 -0
  11. dstack/_internal/core/backends/configurators.py +15 -0
  12. dstack/_internal/core/backends/digitalocean/__init__.py +1 -0
  13. dstack/_internal/core/backends/digitalocean/backend.py +16 -0
  14. dstack/_internal/core/backends/digitalocean/compute.py +5 -0
  15. dstack/_internal/core/backends/digitalocean/configurator.py +31 -0
  16. dstack/_internal/core/backends/digitalocean_base/__init__.py +1 -0
  17. dstack/_internal/core/backends/digitalocean_base/api_client.py +104 -0
  18. dstack/_internal/core/backends/digitalocean_base/backend.py +5 -0
  19. dstack/_internal/core/backends/digitalocean_base/compute.py +173 -0
  20. dstack/_internal/core/backends/digitalocean_base/configurator.py +57 -0
  21. dstack/_internal/core/backends/digitalocean_base/models.py +43 -0
  22. dstack/_internal/core/backends/gcp/compute.py +32 -8
  23. dstack/_internal/core/backends/hotaisle/api_client.py +25 -33
  24. dstack/_internal/core/backends/hotaisle/compute.py +1 -6
  25. dstack/_internal/core/backends/models.py +7 -0
  26. dstack/_internal/core/backends/nebius/compute.py +0 -7
  27. dstack/_internal/core/backends/oci/compute.py +4 -5
  28. dstack/_internal/core/backends/vultr/compute.py +1 -5
  29. dstack/_internal/core/compatibility/fleets.py +5 -0
  30. dstack/_internal/core/compatibility/runs.py +8 -1
  31. dstack/_internal/core/models/backends/base.py +5 -1
  32. dstack/_internal/core/models/configurations.py +21 -7
  33. dstack/_internal/core/models/files.py +1 -1
  34. dstack/_internal/core/models/fleets.py +75 -2
  35. dstack/_internal/core/models/runs.py +24 -5
  36. dstack/_internal/core/services/repos.py +85 -80
  37. dstack/_internal/server/background/tasks/process_fleets.py +109 -13
  38. dstack/_internal/server/background/tasks/process_instances.py +12 -71
  39. dstack/_internal/server/background/tasks/process_running_jobs.py +2 -0
  40. dstack/_internal/server/background/tasks/process_runs.py +2 -0
  41. dstack/_internal/server/background/tasks/process_submitted_jobs.py +18 -6
  42. dstack/_internal/server/migrations/versions/2498ab323443_add_fleetmodel_consolidation_attempt_.py +44 -0
  43. dstack/_internal/server/models.py +5 -2
  44. dstack/_internal/server/schemas/runner.py +1 -0
  45. dstack/_internal/server/services/fleets.py +23 -25
  46. dstack/_internal/server/services/instances.py +3 -3
  47. dstack/_internal/server/services/jobs/configurators/base.py +46 -6
  48. dstack/_internal/server/services/jobs/configurators/dev.py +4 -4
  49. dstack/_internal/server/services/jobs/configurators/extensions/cursor.py +3 -5
  50. dstack/_internal/server/services/jobs/configurators/extensions/vscode.py +4 -6
  51. dstack/_internal/server/services/jobs/configurators/service.py +0 -3
  52. dstack/_internal/server/services/jobs/configurators/task.py +0 -3
  53. dstack/_internal/server/services/runs.py +16 -0
  54. dstack/_internal/server/statics/index.html +1 -1
  55. dstack/_internal/server/statics/{main-d151b300fcac3933213d.js → main-4eecc75fbe64067eb1bc.js} +1146 -899
  56. dstack/_internal/server/statics/{main-d151b300fcac3933213d.js.map → main-4eecc75fbe64067eb1bc.js.map} +1 -1
  57. dstack/_internal/server/statics/{main-aec4762350e34d6fbff9.css → main-56191c63d516fd0041c4.css} +1 -1
  58. dstack/_internal/server/testing/common.py +6 -3
  59. dstack/_internal/utils/path.py +8 -1
  60. dstack/_internal/utils/ssh.py +7 -0
  61. dstack/api/_public/repos.py +41 -6
  62. dstack/api/_public/runs.py +14 -1
  63. dstack/version.py +1 -1
  64. {dstack-0.19.26.dist-info → dstack-0.19.27.dist-info}/METADATA +2 -2
  65. {dstack-0.19.26.dist-info → dstack-0.19.27.dist-info}/RECORD +68 -53
  66. {dstack-0.19.26.dist-info → dstack-0.19.27.dist-info}/WHEEL +0 -0
  67. {dstack-0.19.26.dist-info → dstack-0.19.27.dist-info}/entry_points.txt +0 -0
  68. {dstack-0.19.26.dist-info → dstack-0.19.27.dist-info}/licenses/LICENSE.md +0 -0
@@ -28,6 +28,7 @@ from dstack._internal.core.models.configurations import (
28
28
  from dstack._internal.core.models.envs import Env
29
29
  from dstack._internal.core.models.fleets import (
30
30
  FleetConfiguration,
31
+ FleetNodesSpec,
31
32
  FleetSpec,
32
33
  FleetStatus,
33
34
  InstanceGroupPlacement,
@@ -60,7 +61,7 @@ from dstack._internal.core.models.profiles import (
60
61
  )
61
62
  from dstack._internal.core.models.repos.base import RepoType
62
63
  from dstack._internal.core.models.repos.local import LocalRunRepoData
63
- from dstack._internal.core.models.resources import CPUSpec, Memory, Range, ResourcesSpec
64
+ from dstack._internal.core.models.resources import CPUSpec, Memory, ResourcesSpec
64
65
  from dstack._internal.core.models.runs import (
65
66
  JobProvisioningData,
66
67
  JobRuntimeData,
@@ -271,7 +272,7 @@ def get_run_spec(
271
272
  repo_id=repo_id,
272
273
  repo_data=LocalRunRepoData(repo_dir="/"),
273
274
  repo_code_hash=None,
274
- working_dir=".",
275
+ working_dir=None,
275
276
  configuration_path=configuration_path,
276
277
  configuration=configuration or DevEnvironmentConfiguration(ide="vscode"),
277
278
  profile=profile,
@@ -284,6 +285,7 @@ async def create_run(
284
285
  project: ProjectModel,
285
286
  repo: RepoModel,
286
287
  user: UserModel,
288
+ fleet: Optional[FleetModel] = None,
287
289
  run_name: str = "test-run",
288
290
  status: RunStatus = RunStatus.SUBMITTED,
289
291
  termination_reason: Optional[RunTerminationReason] = None,
@@ -309,6 +311,7 @@ async def create_run(
309
311
  project_id=project.id,
310
312
  repo_id=repo.id,
311
313
  user_id=user.id,
314
+ fleet_id=fleet.id if fleet else None,
312
315
  submitted_at=submitted_at,
313
316
  run_name=run_name,
314
317
  status=status,
@@ -579,7 +582,7 @@ def get_fleet_spec(conf: Optional[FleetConfiguration] = None) -> FleetSpec:
579
582
 
580
583
  def get_fleet_configuration(
581
584
  name: str = "test-fleet",
582
- nodes: Range[int] = Range(min=1, max=1),
585
+ nodes: FleetNodesSpec = FleetNodesSpec(min=1, target=1, max=1),
583
586
  placement: Optional[InstanceGroupPlacement] = None,
584
587
  ) -> FleetConfiguration:
585
588
  return FleetConfiguration(
@@ -1,6 +1,6 @@
1
1
  import os
2
2
  from dataclasses import dataclass
3
- from pathlib import Path, PurePath
3
+ from pathlib import Path, PurePath, PurePosixPath
4
4
  from typing import Union
5
5
 
6
6
  PathLike = Union[str, os.PathLike]
@@ -48,3 +48,10 @@ def resolve_relative_path(path: PathLike) -> PurePath:
48
48
  return normalize_path(path)
49
49
  except ValueError:
50
50
  raise ValueError("Path is outside of the repo")
51
+
52
+
53
+ def is_absolute_posix_path(path: PathLike) -> bool:
54
+ # Passing Windows path leads to undefined behavior
55
+ if str(path).startswith("~"):
56
+ return True
57
+ return PurePosixPath(path).is_absolute()
@@ -50,6 +50,13 @@ def make_ssh_command_for_git(identity_file: PathLike) -> str:
50
50
  )
51
51
 
52
52
 
53
+ def make_git_env(*, identity_file: Optional[PathLike] = None) -> dict[str, str]:
54
+ env: dict[str, str] = {"GIT_TERMINAL_PROMPT": "0"}
55
+ if identity_file is not None:
56
+ env["GIT_SSH_COMMAND"] = make_ssh_command_for_git(identity_file)
57
+ return env
58
+
59
+
53
60
  def try_ssh_key_passphrase(identity_file: PathLike, passphrase: str = "") -> bool:
54
61
  ssh_keygen = find_ssh_util("ssh-keygen")
55
62
  if ssh_keygen is None:
@@ -1,15 +1,21 @@
1
1
  from pathlib import Path
2
- from typing import Optional, Union
2
+ from typing import Literal, Optional, Union, overload
3
3
 
4
4
  from git import InvalidGitRepositoryError
5
5
 
6
6
  from dstack._internal.core.errors import ConfigurationError, ResourceNotExistsError
7
- from dstack._internal.core.models.repos import LocalRepo, RemoteRepo
7
+ from dstack._internal.core.models.repos import (
8
+ LocalRepo,
9
+ RemoteRepo,
10
+ RemoteRepoCreds,
11
+ RepoHead,
12
+ RepoHeadWithCreds,
13
+ )
8
14
  from dstack._internal.core.models.repos.base import Repo, RepoType
9
15
  from dstack._internal.core.services.configs import ConfigManager
10
16
  from dstack._internal.core.services.repos import (
11
17
  InvalidRepoCredentialsError,
12
- get_local_repo_credentials,
18
+ get_repo_creds_and_default_branch,
13
19
  load_repo,
14
20
  )
15
21
  from dstack._internal.utils.crypto import generate_rsa_key_pair
@@ -34,6 +40,7 @@ class RepoCollection:
34
40
  repo: Repo,
35
41
  git_identity_file: Optional[PathLike] = None,
36
42
  oauth_token: Optional[str] = None,
43
+ creds: Optional[RemoteRepoCreds] = None,
37
44
  ):
38
45
  """
39
46
  Initializes the repo and configures its credentials in the project.
@@ -65,12 +72,13 @@ class RepoCollection:
65
72
  repo: The repo to initialize.
66
73
  git_identity_file: The private SSH key path for accessing the remote repo.
67
74
  oauth_token: The GitHub OAuth token to access the remote repo.
75
+ creds: Optional prepared repo credentials. If specified, both `git_identity_file`
76
+ and `oauth_token` are ignored.
68
77
  """
69
- creds = None
70
- if isinstance(repo, RemoteRepo):
78
+ if creds is None and isinstance(repo, RemoteRepo):
71
79
  assert repo.repo_url is not None
72
80
  try:
73
- creds = get_local_repo_credentials(
81
+ creds, _ = get_repo_creds_and_default_branch(
74
82
  repo_url=repo.repo_url,
75
83
  identity_file=git_identity_file,
76
84
  oauth_token=oauth_token,
@@ -175,6 +183,33 @@ class RepoCollection:
175
183
  # TODO: add an API method with the same logic returning a bool value?
176
184
  return repo_head.repo_creds is not None
177
185
 
186
+ @overload
187
+ def get(self, repo_id: str, *, with_creds: Literal[False] = False) -> Optional[RepoHead]: ...
188
+
189
+ @overload
190
+ def get(self, repo_id: str, *, with_creds: Literal[True]) -> Optional[RepoHeadWithCreds]: ...
191
+
192
+ def get(
193
+ self, repo_id: str, *, with_creds: bool = False
194
+ ) -> Optional[Union[RepoHead, RepoHeadWithCreds]]:
195
+ """
196
+ Returns the repo by `repo_id`
197
+
198
+ Args:
199
+ repo_id: The repo ID.
200
+ with_creds: include repo credentials in the response.
201
+
202
+ Returns:
203
+ The repo or `None` if the repo is not found.
204
+ """
205
+ method = self._api_client.repos.get
206
+ if with_creds:
207
+ method = self._api_client.repos.get_with_creds
208
+ try:
209
+ return method(self._project, repo_id)
210
+ except ResourceNotExistsError:
211
+ return None
212
+
178
213
 
179
214
  def get_ssh_keypair(key_path: Optional[PathLike], dstack_key_path: Path) -> str:
180
215
  """Returns a path to the private key"""
@@ -433,6 +433,7 @@ class RunCollection:
433
433
  repo: Optional[Repo] = None,
434
434
  profile: Optional[Profile] = None,
435
435
  configuration_path: Optional[str] = None,
436
+ repo_dir: Optional[str] = None,
436
437
  ) -> RunPlan:
437
438
  """
438
439
  Get a run plan.
@@ -443,11 +444,17 @@ class RunCollection:
443
444
  repo (Union[LocalRepo, RemoteRepo, VirtualRepo, None]):
444
445
  The repo to use for the run. Pass `None` if repo is not needed.
445
446
  profile: The profile to use for the run.
446
- configuration_path: The path to the configuration file. Omit if the configuration is not loaded from a file.
447
+ configuration_path: The path to the configuration file. Omit if the configuration
448
+ is not loaded from a file.
449
+ repo_dir: The path of the cloned repo inside the run container. If not set,
450
+ defaults first to the `repos[0].path` property of the configuration (for remote
451
+ repos only), then to `/workflow`.
447
452
 
448
453
  Returns:
449
454
  Run plan.
450
455
  """
456
+ # XXX: not using the LEGACY_REPO_DIR const in the docstring above, as the docs generator,
457
+ # apparently, doesn't support f-strings (f"""...""").
451
458
  if repo is None:
452
459
  repo = VirtualRepo()
453
460
  repo_code_hash = None
@@ -455,11 +462,17 @@ class RunCollection:
455
462
  with _prepare_code_file(repo) as (_, repo_code_hash):
456
463
  pass
457
464
 
465
+ if repo_dir is None and configuration.repos:
466
+ repo_dir = configuration.repos[0].path
467
+
458
468
  run_spec = RunSpec(
459
469
  run_name=configuration.name,
460
470
  repo_id=repo.repo_id,
461
471
  repo_data=repo.run_repo_data,
462
472
  repo_code_hash=repo_code_hash,
473
+ repo_dir=repo_dir,
474
+ # Server doesn't use this field since 0.19.27, but we still send it for compatibility
475
+ # with older servers
463
476
  working_dir=configuration.working_dir,
464
477
  configuration_path=configuration_path,
465
478
  configuration=configuration,
dstack/version.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.19.26"
1
+ __version__ = "0.19.27"
2
2
  __is_release__ = True
3
3
  base_image = "0.10"
4
4
  base_image_ubuntu_version = "22.04"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dstack
3
- Version: 0.19.26
3
+ Version: 0.19.27
4
4
  Summary: dstack is an open-source orchestration engine for running AI workloads on any cloud or on-premises.
5
5
  Project-URL: Homepage, https://dstack.ai
6
6
  Project-URL: Source, https://github.com/dstackai/dstack
@@ -22,7 +22,7 @@ Requires-Dist: cryptography
22
22
  Requires-Dist: cursor
23
23
  Requires-Dist: filelock
24
24
  Requires-Dist: gitpython
25
- Requires-Dist: gpuhunt==0.1.7
25
+ Requires-Dist: gpuhunt==0.1.8
26
26
  Requires-Dist: ignore-python>=0.2.0
27
27
  Requires-Dist: jsonschema
28
28
  Requires-Dist: orjson
@@ -1,5 +1,5 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=ZXT_9rbxu49vtwgMTGHDrlOtXT9R7gHr-tlPgxauLxY,102
2
+ dstack/version.py,sha256=JdmtCal_jEhc0A-R9g2AhaeYsnCZ6SBjx91NRhza2Fk,102
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=FYtd7tRk17Oc62Kl_3O8NuT5JHb8TKhLThl1TsfjjVs,1390
@@ -13,7 +13,7 @@ dstack/_internal/cli/commands/config.py,sha256=cpNCVCklQDW4vcdD9ovtJs6bcDIM1dULO
13
13
  dstack/_internal/cli/commands/delete.py,sha256=D3CwQwOnu5mj0LT6Cs1y09YUT4JnVEWG6_U8MEbMBXs,1478
14
14
  dstack/_internal/cli/commands/fleet.py,sha256=tJsYLCZrDJzno9Wfgo6ewWpGLaM7BbZ7qdtZ4FtYakA,4058
15
15
  dstack/_internal/cli/commands/gateway.py,sha256=L7bcNrFzzw7w0cjbFszhH_u7dEAiK7Rf-XBDd4Ew6-Q,6135
16
- dstack/_internal/cli/commands/init.py,sha256=I24-mjfzZvjwUEWMipG-QdZdurTqGN0IbfwFBtRKMok,4200
16
+ dstack/_internal/cli/commands/init.py,sha256=VEBOdhHuPKnKkiIv93vy-B-3sFD_X4JJtm1V1lDf3M0,4244
17
17
  dstack/_internal/cli/commands/logs.py,sha256=IOiRIvC9vpNORMQSOGzVbcXfrWfTq7LAPPSD7E_iK9U,1558
18
18
  dstack/_internal/cli/commands/metrics.py,sha256=T-kXQgARIfWj01ROwiw5te5HeeE2trsPHWetQqhL_qA,5892
19
19
  dstack/_internal/cli/commands/offer.py,sha256=3TKsFug2RSKmh7A2aX3DH7-E22lPXnZayEwdjWRj-tk,6245
@@ -28,12 +28,12 @@ dstack/_internal/cli/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
28
28
  dstack/_internal/cli/services/args.py,sha256=82rnGiYZfqMBIQh76bTXyvyXc85N_WDTTFppZJf8lic,755
29
29
  dstack/_internal/cli/services/completion.py,sha256=gjR3i4SIm2AQHvSilOd3la5sWBxJ2GA6wwHGXVWu6z4,3188
30
30
  dstack/_internal/cli/services/profile.py,sha256=TiNMP_0Xbx9cD22zc8dTHHNIsZeIpavWL41UlT_tGgE,5850
31
- dstack/_internal/cli/services/repos.py,sha256=sj7Dij8KX4PCEoZfcrGOSjgC9McVi-zNCdDRuFi-91o,2701
31
+ dstack/_internal/cli/services/repos.py,sha256=wvb3nHI9yJ0fb-dWf2yihl6zdG1ZRVpKiC0CUz9qL7Y,2100
32
32
  dstack/_internal/cli/services/configurators/__init__.py,sha256=AwbKV85_XH0V8IS8v2Zpgl8vnvVCLMLbMuPyvsZv3mQ,2971
33
33
  dstack/_internal/cli/services/configurators/base.py,sha256=MuNQ6CxLK57WLG2h2qQ80W8FWm9GGAhv1__5ZdWcZWE,3337
34
34
  dstack/_internal/cli/services/configurators/fleet.py,sha256=tdw4y92IyyPCwBoYP3mkTx8AqkS39mzmwWwn_HWPC1w,18924
35
35
  dstack/_internal/cli/services/configurators/gateway.py,sha256=Epxg5naso0BnjQ-rqxQunRCfIRncQ40ZUHpQaMt-Q8s,8870
36
- dstack/_internal/cli/services/configurators/run.py,sha256=XHPPnJxcj57YFrCkzYe9wuqWWsksES8NOHTTxqKLUYE,34296
36
+ dstack/_internal/cli/services/configurators/run.py,sha256=ZFblrpJ6h-q1e7VM62ylT22fYUT4z-waXxgzGJ8qk5E,38865
37
37
  dstack/_internal/cli/services/configurators/volume.py,sha256=toN1QZJI47BNlkoLE39lXYNhlMaw7Mo53vkRs1LhWlo,8461
38
38
  dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  dstack/_internal/cli/utils/common.py,sha256=xgq2Rdx6wGS1NLx8FlmkjKrGaNYD428oeBB4VMjvJ5c,3447
@@ -49,13 +49,17 @@ dstack/_internal/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
49
49
  dstack/_internal/core/consts.py,sha256=c1Yd5UY6Qx7KeuYgloXWncWhMsYj6TqwlElda7NtB98,254
50
50
  dstack/_internal/core/errors.py,sha256=VTEmJ6C0zWL3fUL8ObRjB4rNL7_NxwEuWf0hZs6orWo,3377
51
51
  dstack/_internal/core/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- dstack/_internal/core/backends/configurators.py,sha256=y9LG_0jkUe87xgWkUO-ak8Uja3K3rbdudm9EOxK9LVY,4174
52
+ dstack/_internal/core/backends/configurators.py,sha256=Fy1FpiS_2aV8IWT1nkCb2CUI7fDVVRK-O2YFcHSpkTo,4573
53
53
  dstack/_internal/core/backends/features.py,sha256=cswqwmZYD8g041V_m-ovHbJRkB2_vni1DiGJpKD8M_g,2764
54
- dstack/_internal/core/backends/models.py,sha256=WwPVKXCmAXwr3VtyYM9p-HGrF02hk8JGXmMEn7pGyE0,4588
54
+ dstack/_internal/core/backends/models.py,sha256=Msj99dfzw3r6G_tG_SUTcSD-m6fK89fbJm5HTr4Xh1s,4862
55
+ dstack/_internal/core/backends/amddevcloud/__init__.py,sha256=IMhALdujfNvUdMJklEJ_vMWsjApR1iJWsYT30SNMa4s,72
56
+ dstack/_internal/core/backends/amddevcloud/backend.py,sha256=aUIOxKzXDDvmPEverL52Nj6zpel2zSZwZo0hTBrb6Pc,724
57
+ dstack/_internal/core/backends/amddevcloud/compute.py,sha256=Jda6I2NyvPpaiwFVc8uOiuffqxTI0e3nccjrtvta1cM,155
58
+ dstack/_internal/core/backends/amddevcloud/configurator.py,sha256=WF4e-Yh2jMuTKQ5efc4aeFliUW1laUuRy-2jbd7QZlI,1326
55
59
  dstack/_internal/core/backends/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
60
  dstack/_internal/core/backends/aws/auth.py,sha256=BAe3HAedoAO42Fbv7YhpODKWlyil8M0PuRJsL-_u_kw,978
57
61
  dstack/_internal/core/backends/aws/backend.py,sha256=pjROH-S9pgrSMm-Eox_ocL7cTU6mIMRxvURq7Vi-2J8,876
58
- dstack/_internal/core/backends/aws/compute.py,sha256=wtOPjJRRBbIc8JGvMDZL0kpnxEVpYtwI5ERUnpTyV-U,44203
62
+ dstack/_internal/core/backends/aws/compute.py,sha256=Ztodgn_EkDcnVtJkPBduYmDXV8_gsANW9wJW3l2hd4E,44546
59
63
  dstack/_internal/core/backends/aws/configurator.py,sha256=X4CS-DnvsbdYCEVo6HBKLmH0YQ-zh5RucOjyhEcRca8,7634
60
64
  dstack/_internal/core/backends/aws/models.py,sha256=EUCHXHmZnshe3rwI9UtjilwcUMu1Z7MO4Y4-nlZ_IcA,4404
61
65
  dstack/_internal/core/backends/aws/resources.py,sha256=ccvdQd2H1DuUupdzMtqf86nkrenYPBJb1k3VgHu5Gp4,23610
@@ -69,10 +73,10 @@ dstack/_internal/core/backends/azure/resources.py,sha256=cJWS2Yjxdg-XtjpdBxfVDZa
69
73
  dstack/_internal/core/backends/azure/utils.py,sha256=taHMJq6UHRzUXLUcO2P5VCKy3wJaye2bG-6QdkEPNdY,1741
70
74
  dstack/_internal/core/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
75
  dstack/_internal/core/backends/base/backend.py,sha256=hdFMHED1RMV9GVfLSU0yGhGE-cXlbLvt1coDA885PMM,505
72
- dstack/_internal/core/backends/base/compute.py,sha256=FgBD8WAeBXvRdlD57YyqrwFh_ZwgXDCCE8I0goMnUzA,29369
76
+ dstack/_internal/core/backends/base/compute.py,sha256=3x--AsQYD63n_KtNJa1TkdRdTw8t3thaZKhfnL0hq9g,30581
73
77
  dstack/_internal/core/backends/base/configurator.py,sha256=TKG5iJlOXxVT2agE_ruMW8JGt2dtwXY7ghmJN8bEWlw,4299
74
78
  dstack/_internal/core/backends/base/models.py,sha256=Ij0osOl-T-ABsKLoVg2eY81DMkwdWkevAnjXj2QnLXI,532
75
- dstack/_internal/core/backends/base/offers.py,sha256=2BARohq0sJk0a9K0Z4OuIbpIQNSSq8ZTzAnO8pCxO4M,6228
79
+ dstack/_internal/core/backends/base/offers.py,sha256=IlK1X7Rz3piKeUJNsIjyqrj68k4PlWsC-5e76i9NjYg,6305
76
80
  dstack/_internal/core/backends/cloudrift/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
81
  dstack/_internal/core/backends/cloudrift/api_client.py,sha256=mI3_ttwujfSunTiTIelnc1XaLBlfxsKsacrlyB12f8c,8178
78
82
  dstack/_internal/core/backends/cloudrift/backend.py,sha256=Jz3nIQsa3TnMISVXK6EU43O0B7FgIMxwwaEBmd_s5BY,596
@@ -90,21 +94,31 @@ dstack/_internal/core/backends/datacrunch/backend.py,sha256=-wanJJ_K_wOXezxTSRgs
90
94
  dstack/_internal/core/backends/datacrunch/compute.py,sha256=i06kApZD9-cRRE4ZEDfvqcFM2944tOMseyPC-Vx2vBc,9159
91
95
  dstack/_internal/core/backends/datacrunch/configurator.py,sha256=9eG3p9LIp5M45T7WH60q8YwH9cNlzz5l_DSRcugO45I,2564
92
96
  dstack/_internal/core/backends/datacrunch/models.py,sha256=QeadH8qmcK3oDY9DfQKmX65fDGQo6FABLQAe9wQsHr8,1194
97
+ dstack/_internal/core/backends/digitalocean/__init__.py,sha256=BPjTlv6iNDgu2mcsaIh0FEi9T8iwCEEIVbJQYJAa0gY,34
98
+ dstack/_internal/core/backends/digitalocean/backend.py,sha256=__Sl61IaseFEfpkPbiBOFr6nal74SP3qM7ghYQtgNdw,731
99
+ dstack/_internal/core/backends/digitalocean/compute.py,sha256=ki2QLdsLCj9Vv9m8jPCdNr1s23pH8VTnfsF5l9ZC3Ug,127
100
+ dstack/_internal/core/backends/digitalocean/configurator.py,sha256=_4Tiei4ejehHdmsZgP7Z4G4OHbiaH3wyrrZz4q8Y6os,1337
101
+ dstack/_internal/core/backends/digitalocean_base/__init__.py,sha256=-7saeWMuPLmclPKi3VT-H5lwALbO9AABcaL248npyBc,84
102
+ dstack/_internal/core/backends/digitalocean_base/api_client.py,sha256=-QBAOs-Qj1E_4q3uM7oKPxsN86c-quwiZNqqYbTcs8I,3834
103
+ dstack/_internal/core/backends/digitalocean_base/backend.py,sha256=1xjjveUldj98sg8ELKAbf48a1KDm9DLh8-ymMvhWKXk,115
104
+ dstack/_internal/core/backends/digitalocean_base/compute.py,sha256=gD1AszHcAE-EUxMN3gu9IqevAzFXscvZ9UAt0qB68J0,6970
105
+ dstack/_internal/core/backends/digitalocean_base/configurator.py,sha256=piXOi4jtUprESLkHE_hSeo1ndxe-3pI5aYDPicNbyAQ,2141
106
+ dstack/_internal/core/backends/digitalocean_base/models.py,sha256=oyVnr_xaneudGeogfCr0BLZ22kzubUmGaNE5V8FI-6U,1334
93
107
  dstack/_internal/core/backends/dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
108
  dstack/_internal/core/backends/dstack/models.py,sha256=Jbe0Syez43N5i97TlIc8l-5VnUkakP5W1t_9gqhFNtc,812
95
109
  dstack/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
110
  dstack/_internal/core/backends/gcp/auth.py,sha256=VWCn34hapaZ3E0OHCoiAVL97o3s64RF9w85CZ6xdtmk,2235
97
111
  dstack/_internal/core/backends/gcp/backend.py,sha256=OvTv1c7j4LTPCIEtkwD3-q6Eo1QET8xlM8CzbY0hLmI,572
98
- dstack/_internal/core/backends/gcp/compute.py,sha256=q8X7EzXgd6ZgU5WK7Yukbdv5Qd8OCI3Sw0u685SKV3M,42351
112
+ dstack/_internal/core/backends/gcp/compute.py,sha256=arHF6BcMDpGNdA1OadfeKoEYJ6kliX_kV0rz4vSVJwA,43030
99
113
  dstack/_internal/core/backends/gcp/configurator.py,sha256=eVPr6pD4g66ej5qxhFd94lb_R11CIBA-py9PQS9EOGE,6865
100
114
  dstack/_internal/core/backends/gcp/models.py,sha256=biLA3rlFcoPatAZpKycuIl-8PdnNSAFiDCJjov65_zo,4612
101
115
  dstack/_internal/core/backends/gcp/resources.py,sha256=2jpg24NH4Ov4J4Of1F3DPkwEWkRxEi-x4ZTx8XSNGIQ,16926
102
116
  dstack/_internal/core/backends/gcp/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
117
  dstack/_internal/core/backends/gcp/features/tcpx.py,sha256=8bDR5kwF5qke5EWNdBscdbZQnC7oVXKSls3WPcoXgZI,2902
104
118
  dstack/_internal/core/backends/hotaisle/__init__.py,sha256=CYMaS1jd9Km0Y6Jvg4ePjYOtfqL9swGsRo5kcXGFrFQ,30
105
- dstack/_internal/core/backends/hotaisle/api_client.py,sha256=d_BUFu6qe4CNgtR84nBhy05iO4mhi2MYt9vdyfSozDA,4021
119
+ dstack/_internal/core/backends/hotaisle/api_client.py,sha256=Fd1TOg4_orwQyJtoZ657zJweLeBhzj_9ObfL538S5uI,3640
106
120
  dstack/_internal/core/backends/hotaisle/backend.py,sha256=o0cqLIKGcrXhvksHHGvjCpLShoQxT2IKdJy9sm0H9gE,586
107
- dstack/_internal/core/backends/hotaisle/compute.py,sha256=XwkVtto7pga1nM2pajazar1xKqb54hmtJ6_5FQANxvM,7624
121
+ dstack/_internal/core/backends/hotaisle/compute.py,sha256=vZnaw3CuO8wMlrZvXrDfyGnzqNAuGH-K9GEL3lV5pUo,7511
108
122
  dstack/_internal/core/backends/hotaisle/configurator.py,sha256=EJwdKFfC0ab0pe4lzeV65b80Ok21rR0OfupOmuqCp6c,2287
109
123
  dstack/_internal/core/backends/hotaisle/models.py,sha256=CmJ20SbpKzFldX7rrR0CpVytSJSN2YWKQ3Ixnta_A1M,1334
110
124
  dstack/_internal/core/backends/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -124,7 +138,7 @@ dstack/_internal/core/backends/local/backend.py,sha256=KJuNXUXrg60NhLywnExD1EXH2
124
138
  dstack/_internal/core/backends/local/compute.py,sha256=-FUD8Ii5VTBtygAV1U3k1j10MFdK1whGvrSeRwTk29Y,3788
125
139
  dstack/_internal/core/backends/nebius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
140
  dstack/_internal/core/backends/nebius/backend.py,sha256=2XqZIbSR8VzlfOnuVklXlDxNmwAkQj7txQN8VXF1j2E,566
127
- dstack/_internal/core/backends/nebius/compute.py,sha256=Gdz1MV-iGWAJQfXWAZWA80sTjJHN14PfZod3aN67lMc,14857
141
+ dstack/_internal/core/backends/nebius/compute.py,sha256=UcYIfaqp0-keMuGhARcL82bQK_VXEMigsveW_LbD6Ds,14645
128
142
  dstack/_internal/core/backends/nebius/configurator.py,sha256=PilZ5M0xj-koYz9PPew9L29rrHoF2JrW2bxgCqt27u4,3213
129
143
  dstack/_internal/core/backends/nebius/fabrics.py,sha256=-X-nSPV2pUin2PAYDHGm-j14KPboIFRpLi93PKHUXTM,1616
130
144
  dstack/_internal/core/backends/nebius/models.py,sha256=UudYX32p-ZY-GWR83VEtY5dpZBaWhKXQIfn2nrBCq-4,4245
@@ -132,7 +146,7 @@ dstack/_internal/core/backends/nebius/resources.py,sha256=ttgwdqokvXF8BH_IDPFZxW
132
146
  dstack/_internal/core/backends/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
147
  dstack/_internal/core/backends/oci/auth.py,sha256=8Cr18y_LOsyRP-16yfFpT70Cofpm0clB3KawS_7aRl4,717
134
148
  dstack/_internal/core/backends/oci/backend.py,sha256=yXjVCt7n6BVLH0byYFbNFf-P9J0FwlNfxsYbKGMdoI4,536
135
- dstack/_internal/core/backends/oci/compute.py,sha256=9BQFfDk9RMG7grZHS7EnVDjLkvRRXov1c88C4me-htk,7469
149
+ dstack/_internal/core/backends/oci/compute.py,sha256=-1UyAcsJ7PG980zKGZBg9dYVi_hZrvNWxRh-YGjKas4,7398
136
150
  dstack/_internal/core/backends/oci/configurator.py,sha256=_mi093BzV8Xdfw81wkiqoY5d5x4CCCtni7J01CZeDCQ,5768
137
151
  dstack/_internal/core/backends/oci/exceptions.py,sha256=GxlUf7itcAQgY3m-U2ul_ZXzfUOcEcPEmisWFaoWSkA,288
138
152
  dstack/_internal/core/backends/oci/models.py,sha256=fDlY7-A0WDQeiwJzwrQl6D5ENOc-677Bz8LXyvBvF0c,2969
@@ -164,23 +178,23 @@ dstack/_internal/core/backends/vastai/models.py,sha256=2xpFE-ouYUBienxZXam2Mo4dy
164
178
  dstack/_internal/core/backends/vultr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
179
  dstack/_internal/core/backends/vultr/api_client.py,sha256=isHbdBQr2hFRYTcnTsGxSlWIKYrpC1X_gjSZjGxUupE,4363
166
180
  dstack/_internal/core/backends/vultr/backend.py,sha256=WkPmbUxm3Ysv3_wJjuktQqvvN_L_TX5g37CflGQWQFo,556
167
- dstack/_internal/core/backends/vultr/compute.py,sha256=-6Mw7ADW6HaqzK34I3T5RVhreU9W9CIau1hj1Osi5B4,5957
181
+ dstack/_internal/core/backends/vultr/compute.py,sha256=9qfya_TKMvvWyWm2OElQjMIFwANaFcEkyc_gHj5XNVA,5845
168
182
  dstack/_internal/core/backends/vultr/configurator.py,sha256=JMJ9itCGIRb4MJ8fjS6syd7xrO7wUra2OVoqLTrGRo4,2373
169
183
  dstack/_internal/core/backends/vultr/models.py,sha256=TkqK_lW6w5k_7wsoFiKDb6NXuTrHL6ypVm59FoyaSFY,928
170
184
  dstack/_internal/core/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
- dstack/_internal/core/compatibility/fleets.py,sha256=ijUNkEiamJ29jAszjBeT1jrsGygDFCo1zEyTa7xUuHw,3004
185
+ dstack/_internal/core/compatibility/fleets.py,sha256=jg42A7OmprqATKKt6JpLL1qOQSZhUJ29V6oKP0KouD0,3200
172
186
  dstack/_internal/core/compatibility/gateways.py,sha256=4h_lfpN9KJFyLTFexq-wlu74Rwpk0anV67v38aJ-SnI,1463
173
187
  dstack/_internal/core/compatibility/gpus.py,sha256=myWVUjaK2S1QuYgRZyMtD8-DPKQTjadSbsnECtfoHHs,575
174
188
  dstack/_internal/core/compatibility/logs.py,sha256=keXt3OFKR0CjD_XMsetzRu8yQGCz7CWBwycuP267L_Q,629
175
- dstack/_internal/core/compatibility/runs.py,sha256=KXxFHvkka9K3-7mIfQn-HVcdQwXC318m7N_llYTtNow,8411
189
+ dstack/_internal/core/compatibility/runs.py,sha256=I-9CW-sx01HQXk5jS5_VT4f2tceZpkRodmh3zJS5au0,8772
176
190
  dstack/_internal/core/compatibility/volumes.py,sha256=ofjpVusuc-pq285bGrIh8PAqu0QlAd6NQgU3gfJQIc0,1546
177
191
  dstack/_internal/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
192
  dstack/_internal/core/models/common.py,sha256=TbshwjP_G0Z-JRPCnZ-a5bgwAcOsNfb1_JNMyhOEa4U,3873
179
193
  dstack/_internal/core/models/config.py,sha256=VYfgyWG2kfGhJxkC48vZDCbHahIEnO05mDDagJ5kA6s,787
180
- dstack/_internal/core/models/configurations.py,sha256=6kyyucBxxbY3a0DqkncF2A9Tg5JzlbgecorREP79zbQ,30383
194
+ dstack/_internal/core/models/configurations.py,sha256=7i8Ub5djXWZzsszVUzQZqL7pYWorw4tKkgx-9YArZiQ,30782
181
195
  dstack/_internal/core/models/envs.py,sha256=yq84YRFBILOy4x3XnGcTgYpbZ69eFTCQPgBCr9Ndov4,4969
182
- dstack/_internal/core/models/files.py,sha256=XrsCLSWwGrnkua_gIoe8DZ3ObPCvGPNU1-EQmC6tD7E,1974
183
- dstack/_internal/core/models/fleets.py,sha256=sG-d1_i39PRZdTPZyq3pcn9t3b72SvKqjM-jTdPUxko,12524
196
+ dstack/_internal/core/models/files.py,sha256=CI1AQN07ACot_6RVkG7qLml07Ro0co2hGsAfcTamn3Y,1977
197
+ dstack/_internal/core/models/fleets.py,sha256=Df0Ns3MuJoonD8D9fVncUhlmImnoBex96TYxvfe2GVk,14948
184
198
  dstack/_internal/core/models/gateways.py,sha256=_O8EWwHWLdgNoWY4P4u71KM-uEr5DDp42LXfyv1qMDI,4054
185
199
  dstack/_internal/core/models/health.py,sha256=Q0Z5pYbW-rD5wLn3-EDre2Q7X6tX7DFaglKz5SDv18U,570
186
200
  dstack/_internal/core/models/instances.py,sha256=cILMmY-NaHz3Hnl5pm0BQyAq4LXDe7fYHqLENa0dOGI,6895
@@ -190,7 +204,7 @@ dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7V
190
204
  dstack/_internal/core/models/profiles.py,sha256=62LMs6_eGxTs5lNLt5bEAq9RsEwKOKwKWu5fMs5qLnM,13957
191
205
  dstack/_internal/core/models/projects.py,sha256=HmmlrvUSSEjfGfX7X5tmGJ-CbKeyGK6shHD5OghDNks,671
192
206
  dstack/_internal/core/models/resources.py,sha256=ISQeTuzuHSXA5KUgoMCNE9nSoHvfxu3HmjETNPrqCtM,14588
193
- dstack/_internal/core/models/runs.py,sha256=ZGUG0MZWc4usmeGMomoX4tcj-ivCxvEy7erR9_Pzj9A,21895
207
+ dstack/_internal/core/models/runs.py,sha256=sLvlNXO1qDU79JHOeYS_6T-req6V_QOjEfcW_zutT68,22557
194
208
  dstack/_internal/core/models/secrets.py,sha256=5T4B4eCeZmVQ8t22qYYlm4NUyX7VloiXCJuyDfE92QA,413
195
209
  dstack/_internal/core/models/server.py,sha256=Hkc1v2s3KOiwslsWVmhUOAzcSeREoG-HD1SzSX9WUGg,152
196
210
  dstack/_internal/core/models/services.py,sha256=2Hpi7j0Q1shaf_0wd0C0044AJAmuYi-D3qx3PH849oI,3076
@@ -198,7 +212,7 @@ dstack/_internal/core/models/unix.py,sha256=KxnSQELnkAjjuUgYcQKVkf-UAbYREBD8WCWD
198
212
  dstack/_internal/core/models/users.py,sha256=o_rd0GAmd6jufypVUs9P12NRri3rgAPDt-KxnqNNsGw,703
199
213
  dstack/_internal/core/models/volumes.py,sha256=PeEHM71aG8SMgMaCM8NyvIBKiufHYyb7CzIRGNgK_HY,7289
200
214
  dstack/_internal/core/models/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
- dstack/_internal/core/models/backends/base.py,sha256=9mD2lgMMo9s1EAAcvfLo7x6RKuqQkypVDDc3smrMa2E,1230
215
+ dstack/_internal/core/models/backends/base.py,sha256=OVy1zqYVX9C_XZpo2g3SHfKAXOpDzUf6ktxZb34TdLM,1400
202
216
  dstack/_internal/core/models/repos/__init__.py,sha256=7Qo1QgJ852LklUuM-mlCNFodp_XrQ4iqV7uRPiX_qm0,885
203
217
  dstack/_internal/core/models/repos/base.py,sha256=nErlSR3AbG9fwDE5vuJK5DIrP8JB3fG8a7mXqosJ9gY,846
204
218
  dstack/_internal/core/models/repos/local.py,sha256=zKnEOyN7hSDQ7EKn8q9aJ3uikiTTtGdGEN_3896HTTc,2913
@@ -209,7 +223,7 @@ dstack/_internal/core/services/api_client.py,sha256=HTQ0fcZciUh-nmfV09hUt__Z4N2z
209
223
  dstack/_internal/core/services/diff.py,sha256=xtJzlSLIw9pnECpMQTy-a2zcfnSd4Q9qi_Y0W00D65A,2073
210
224
  dstack/_internal/core/services/logs.py,sha256=7_eJdH4MD-3rVb4A6rIJfjj_p4jzUOCmjRVlPD-UDsg,2166
211
225
  dstack/_internal/core/services/profiles.py,sha256=ZFY6VILW6urm6l3u6xpORJ2z48eGJ2jcmRgjVrxr2tw,1612
212
- dstack/_internal/core/services/repos.py,sha256=qkQ5D8_qvhwbGWS96W4u-7GDS6bDx3YalMDneQsZpHc,5187
226
+ dstack/_internal/core/services/repos.py,sha256=Cq-t9RvdmEKjQIgQA6giQirqopdrPT-WzUoCoKLt0ws,6251
213
227
  dstack/_internal/core/services/configs/__init__.py,sha256=jMAHvZphEgZJldEiQhkaNSW8lVrVAxuYbu9RtLysUGU,5645
214
228
  dstack/_internal/core/services/ssh/__init__.py,sha256=UhgC3Lv3CPSGqSPEQZIKOfLKUlCFnaB0uqPQhfKCFt0,878
215
229
  dstack/_internal/core/services/ssh/attach.py,sha256=6YZ_HaimKrjdLzcDLksGi0_9rlVyLeBgPmmWHC7dYxo,9096
@@ -274,22 +288,22 @@ dstack/_internal/server/app.py,sha256=-qkKsnSTtFIFrSXh7POISuJmEgitwmuRLAAJz0DPQh
274
288
  dstack/_internal/server/db.py,sha256=NY0-K_7ok2OYLtPMeZ4EHlHK5N2a77uj4aJCVgWO2qE,3245
275
289
  dstack/_internal/server/deps.py,sha256=31e8SU_ogPJWHIDLkgl7cuC_5V91xbJoLyAj17VanfM,670
276
290
  dstack/_internal/server/main.py,sha256=kztKhCYNoHSDyJJQScWfZXE0naNleJOCQULW6dd8SGw,109
277
- dstack/_internal/server/models.py,sha256=R8e8-xJoVPdtFlRc1BnD5sLe3MeLF1inPk52eQf_ewI,33964
291
+ dstack/_internal/server/models.py,sha256=f5RUOEebaGpZMfZPfhTi6cr5LkY2CeOIr9ezXYbDCXs,34146
278
292
  dstack/_internal/server/settings.py,sha256=0gW2TDzRgkpKXrXoljhCT2iOfpjegNzVUAxd6fZjg-k,5784
279
293
  dstack/_internal/server/background/__init__.py,sha256=QftEjgQZffu83sY-F0WL65vRp28FbBEtezfowQYcTv4,5606
280
294
  dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
281
295
  dstack/_internal/server/background/tasks/common.py,sha256=N7xSXbf2MoBWgbJ1e3AEzYBTf1Gn-pDXYND8Zr_YCJQ,970
282
- dstack/_internal/server/background/tasks/process_fleets.py,sha256=ufuCGbLXlmYqtNCUSHvu5-mUrDYmxC61zM2dUUWzqjE,3945
296
+ dstack/_internal/server/background/tasks/process_fleets.py,sha256=bMJtsNPzSpl6n-XP0b5krQbZ6rU6UqmYtFhA4RkOny8,8234
283
297
  dstack/_internal/server/background/tasks/process_gateways.py,sha256=FH9RY3Tfmtw_UctCdYZDIRb2rgtmHdxTg6Oc4IBiDBA,8356
284
298
  dstack/_internal/server/background/tasks/process_idle_volumes.py,sha256=mqnl8wvWaKTYvJMbgFJbOP-bZMRQG2vrhUnaNcyBldE,5223
285
- dstack/_internal/server/background/tasks/process_instances.py,sha256=H5p5kEf3Xo0TvAbatDZmr1pR65g7-aoDKck1LEf-YoE,46274
299
+ dstack/_internal/server/background/tasks/process_instances.py,sha256=ddBR_r7VwOuDb4zlp9QSQWgoK4XvOi4IGh0dBZkxtUY,44004
286
300
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=yKXe9J7m3oleK0C-oGJaYNkcPT8kqkz0nw-A7xqYbjE,6390
287
301
  dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=lgYIzjHG9EITK31yG6uQjlIcSwW5jsP9ZOBBZqW_eNs,4263
288
302
  dstack/_internal/server/background/tasks/process_probes.py,sha256=dmug-_rmYiVLLF-imto-Ju1gPtENvHvCjHyilqgYuJw,6457
289
303
  dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=_UZm37FVV4rhdd0So7HtcKbIgrSdAr5Vx-Uen_xizec,5459
290
- dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=W0SAvSwJiRvp-LJNgjNX1lEEhSwJa51DtXXDx2RD_o4,44862
291
- dstack/_internal/server/background/tasks/process_runs.py,sha256=OA-HK-6_tLOnmvAi3xU5Sc4CO5K2llRXeplcx8FYsIs,24938
292
- dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=nuMFNUZu4R-KmGulhCmoNkYakX-ASxGQSpQ1DMtmKKE,37715
304
+ dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=ulDrWgwnhosbK0Mtt0yNS4E38QSKXSh6ermNt-3jUTs,44965
305
+ dstack/_internal/server/background/tasks/process_runs.py,sha256=Cx7Z1B7pZVlvCl-OsIaAiIMFG_aZDdn3nlZeha6k2x4,25041
306
+ dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=23q8Il4xw1gAEc2KK6kB195opLlB-umKEDTJrpjAKbg,38109
293
307
  dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=S7ZSDVMX-N0XMaMgwFa1QG_RAi48BP432s9AqHw4PMM,4066
294
308
  dstack/_internal/server/background/tasks/process_volumes.py,sha256=_fMmkwLYsyX-kpW9pDrZVJvFTZEOPp0gpjyKBMW-zw0,5204
295
309
  dstack/_internal/server/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -305,6 +319,7 @@ dstack/_internal/server/migrations/versions/1e3fb39ef74b_add_remote_connection_d
305
319
  dstack/_internal/server/migrations/versions/1e76fb0dde87_add_jobmodel_inactivity_secs.py,sha256=4-H_mGGSD6tI7H0HQ-pBs5wixMKdDro6KtLdH_QId28,831
306
320
  dstack/_internal/server/migrations/versions/20166748b60c_add_jobmodel_disconnected_at.py,sha256=Vj7VPo67pAy6gHztSrbp9HmzAz0ckROeV6HxDfvRwOw,3085
307
321
  dstack/_internal/server/migrations/versions/23e01c56279a_make_blob_nullable.py,sha256=O5ZrwAXs1ubPrChyItCbuEeAPrlRF_ys1nVw4knAO5g,845
322
+ dstack/_internal/server/migrations/versions/2498ab323443_add_fleetmodel_consolidation_attempt_.py,sha256=rPnfB2xRGNUnH3HhaE4_OD0Lx2r6GF-ZooGs6Lci1ac,1237
308
323
  dstack/_internal/server/migrations/versions/252d3743b641_.py,sha256=z3mMF3YCEg6ueoj746cDNBNlQSimmBOcVLNupOv2UuU,1246
309
324
  dstack/_internal/server/migrations/versions/25479f540245_add_probes.py,sha256=rlHb0kzrEpHxvYx3SwO4cxLZ5-VYj5NMGY8gLU9BMV8,1475
310
325
  dstack/_internal/server/migrations/versions/27d3e55759fa_add_pools.py,sha256=yKEQ1OdPZSaO8YxRd986mJjNc9CjeO6SqY5SmL6aGfE,5433
@@ -403,7 +418,7 @@ dstack/_internal/server/schemas/instances.py,sha256=PQZ34rtCn2AVaoCuTcHOjENSbzVu
403
418
  dstack/_internal/server/schemas/logs.py,sha256=I4KaPgXiaYLWtovBchUiqK0wk-b7py-yTHKzhPH8tYc,453
404
419
  dstack/_internal/server/schemas/projects.py,sha256=sXm9KMecLYaLemE4rPr8MzvlkHvpwzawmL5GNB87wuY,804
405
420
  dstack/_internal/server/schemas/repos.py,sha256=Sit0Tqol79VOMGGp8ncZXLLsZ4INcF-pAA_jwRchYqA,666
406
- dstack/_internal/server/schemas/runner.py,sha256=Vv3Frl3RrPydvhnY_6_ysIEZQUDUmhqvGeYV3qXgX3A,5626
421
+ dstack/_internal/server/schemas/runner.py,sha256=RNPVScuqjveEcIWoANtx4i_f6v9r6W0aRnYoWnnsQxY,5654
407
422
  dstack/_internal/server/schemas/runs.py,sha256=CjTWIyokU8eVGR0yCSIMaOrFG91Xt1mCZep3iFB05Qo,1781
408
423
  dstack/_internal/server/schemas/secrets.py,sha256=pnvvtPWdv-kBnKTDJsynBksX1vREK1fSUMCYD42gyRI,281
409
424
  dstack/_internal/server/schemas/users.py,sha256=FuDqwRVe3mOmv497vOZKjI0a_d4Wt2g4ZiCJcyfHEKA,495
@@ -416,9 +431,9 @@ dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
416
431
  dstack/_internal/server/services/config.py,sha256=yo8njslwfS7_blhbPPhOtzCMyg8N_mmFSw5aPvirSzw,10691
417
432
  dstack/_internal/server/services/docker.py,sha256=z4apNSdxJrv1ZQ_Mxj-56mzNA39qNZ_uILCdvboGGcg,5400
418
433
  dstack/_internal/server/services/files.py,sha256=LJYFRtIJwB-QL-FhIu1408oqVVfa2lPZZlaTuZMo6pw,2847
419
- dstack/_internal/server/services/fleets.py,sha256=hs7HTJlKJZKm-Dqg4FtKvVZzhgalvJRAsHhrIRwG4Io,37189
434
+ dstack/_internal/server/services/fleets.py,sha256=B_LXk_inn0rIOwC6SejQuBgT8_C_e9QdCNN5pXH7Sx0,37095
420
435
  dstack/_internal/server/services/gpus.py,sha256=_CGqUsizWf_Bq-_JYcRkLg_yg4iKpsp-1_1m5MedBr0,14758
421
- dstack/_internal/server/services/instances.py,sha256=HMyn2LeLhuUBvzeKoElrumwToY1Pp0UzNv9OYofNNFM,24169
436
+ dstack/_internal/server/services/instances.py,sha256=-3m2WOg0R5W2X0IcMivT5C6Qha6RXcXyqmHOQLTvt-o,24160
422
437
  dstack/_internal/server/services/locking.py,sha256=k00cS2SYUVekUIorsi6l5ofL-Q-Bnc5BnRZ1FAB6dDk,5239
423
438
  dstack/_internal/server/services/logging.py,sha256=IPyRg2c3gls_6KEJxus3hfFG8pgI4LqHM5b9F4VTI9g,816
424
439
  dstack/_internal/server/services/metrics.py,sha256=jKLy1jSCVR_crqVu_CmsOMbvMkucWBandI0SS1LDeRQ,6896
@@ -430,7 +445,7 @@ dstack/_internal/server/services/probes.py,sha256=pdgtkOvBuvneUo4Gysg8_afibTf1wu
430
445
  dstack/_internal/server/services/projects.py,sha256=qvbzEpvi52mOGfsLsLTgWGzg8VDNlaIXAvr_Lwx20AA,23334
431
446
  dstack/_internal/server/services/repos.py,sha256=ECl1cbpdzhTv1P3Y9IQmoWyHHF8iXFyL4s2drfwRDvg,9352
432
447
  dstack/_internal/server/services/resources.py,sha256=VRFOih_cMJdc0c2m9nSGsX8vWAJQV3M6N87aqS_JXfw,699
433
- dstack/_internal/server/services/runs.py,sha256=x-8Y_ejlP-go0xHrQVle4Ujrex0rbr6LmB1geOg2CcI,47126
448
+ dstack/_internal/server/services/runs.py,sha256=-RoBSmcau8n_8rvEH-yuORL7R9OaoO92VkLFFZOwcAk,47686
434
449
  dstack/_internal/server/services/secrets.py,sha256=M7RS4X1-DIL0f7m6BBb3PhsrAbxwKUD3_pZEWRfR3sM,5567
435
450
  dstack/_internal/server/services/ssh.py,sha256=DT7U_8ON8o30-53WlJwjd5kVrKyt4KPgKeN63NW3P8U,2883
436
451
  dstack/_internal/server/services/users.py,sha256=L-COF4RjtwYSfnkGQefrSiEU0haTv0o1P2OuUdvMK8E,7378
@@ -448,14 +463,14 @@ dstack/_internal/server/services/gateways/connection.py,sha256=31qellW-zc-l8cxb8
448
463
  dstack/_internal/server/services/gateways/pool.py,sha256=0LclTl1tyx-doS78LeaAKjr-SMp98zuwh5f9s06JSd0,1914
449
464
  dstack/_internal/server/services/jobs/__init__.py,sha256=qB5Y2DdpQkShfBUDIqHWJis_oA75e6jfHy7KgjwvLL0,28351
450
465
  dstack/_internal/server/services/jobs/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
451
- dstack/_internal/server/services/jobs/configurators/base.py,sha256=oN-DPJCK6LBZgSkftHpgOZpWjTuSD95pedLj2NXEhpY,14380
452
- dstack/_internal/server/services/jobs/configurators/dev.py,sha256=axeVDDdCSLZsbK-N6bZoENt0cBxQrCc8ZauKmSP74-o,2639
453
- dstack/_internal/server/services/jobs/configurators/service.py,sha256=o9jr7nv58w8seG0vvqZnx9bKw7HsyYbUnq2jv6oR4Rk,990
454
- dstack/_internal/server/services/jobs/configurators/task.py,sha256=EOo_MzpTXY3HBFBd6p4fefZ2p9_ZSVCbm44auj8IDew,1610
466
+ dstack/_internal/server/services/jobs/configurators/base.py,sha256=b-VI8bo5-glLR3ycio7OEC6ILTy6sap-bCH7N6Oq06w,15996
467
+ dstack/_internal/server/services/jobs/configurators/dev.py,sha256=6dEbuRYr83XAmgie63uyq6jE0Er2Vd1kTZKPy8kpvY4,2635
468
+ dstack/_internal/server/services/jobs/configurators/service.py,sha256=Kbv9GycRX2FA09M5LcUCUzywTzYzjpLLDomwWT6IOG8,866
469
+ dstack/_internal/server/services/jobs/configurators/task.py,sha256=K2Z1QzWmgs3uvBQOD6H-YkAlmqObeH1ImfwZSnNEAUE,1486
455
470
  dstack/_internal/server/services/jobs/configurators/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
456
471
  dstack/_internal/server/services/jobs/configurators/extensions/base.py,sha256=xJbHxaaSJ1zjn8zuuApP1Xt2uBaedPhhc-IY0NtDDJQ,418
457
- dstack/_internal/server/services/jobs/configurators/extensions/cursor.py,sha256=-GuYFw05_cNMdg0_3oc5B-HIExxYQcDXn0D0gstGjIw,1749
458
- dstack/_internal/server/services/jobs/configurators/extensions/vscode.py,sha256=Vi210saAjIosqjnr0jdN0tJ2Apyuk8gRKUM7hE6mYR8,1724
472
+ dstack/_internal/server/services/jobs/configurators/extensions/cursor.py,sha256=Bh_C6kGM3ulQL8MFpN1_DFlRmnlqxKjxOM6bB1n0KGQ,1645
473
+ dstack/_internal/server/services/jobs/configurators/extensions/vscode.py,sha256=LUg-NXOH1UuQqAkRH2kltPH0UONsqd5K2zjx4ktVI-A,1622
459
474
  dstack/_internal/server/services/logs/__init__.py,sha256=KwkZeMeoeM8H1PHb9P46bhUaDDgEqITIjEb68L5Mna8,3599
460
475
  dstack/_internal/server/services/logs/aws.py,sha256=4NeoCshC6kkRENqf0r5rL6qXQhmvpBzksZOcv1_stUI,16927
461
476
  dstack/_internal/server/services/logs/base.py,sha256=7eCB6SPF9iWviv4vZ_34SvfM_Bvi9DeVj1t7TxmrXKs,1273
@@ -509,11 +524,11 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
509
524
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
510
525
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
511
526
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
512
- dstack/_internal/server/statics/index.html,sha256=FcGFFbTp8a3eJaaJu-wTdcEsbped80TldpMXp7VUR-U,11071
527
+ dstack/_internal/server/statics/index.html,sha256=xzc8VT4KW7rPfpjT9H7PQgTz61-i4HRlSHqE5GpIjkE,11071
513
528
  dstack/_internal/server/statics/logo-notext.svg,sha256=Oth7XfcAeDJcaPdzNtDaqYuLU7mCB0JqNtxeyWb6Z3c,11231
514
- dstack/_internal/server/statics/main-aec4762350e34d6fbff9.css,sha256=siDI2FtwN5Iax3O6-EKHbeROGytzFEWMvM8jyRoTcVM,1353840
515
- dstack/_internal/server/statics/main-d151b300fcac3933213d.js,sha256=MEnX2JndE26t-GRltuoO-L7HqY8QddC8G7fwJ-OPjKk,6403176
516
- dstack/_internal/server/statics/main-d151b300fcac3933213d.js.map,sha256=EIgrdkMwboFjqppQWO1iCa0Waof3iBoZCgqUr3VpxQQ,8481266
529
+ dstack/_internal/server/statics/main-4eecc75fbe64067eb1bc.js,sha256=_GkzNFsW9RgiB_Xo0aBp0W7x2-VPamJYdCsZD26sDnY,6433171
530
+ dstack/_internal/server/statics/main-4eecc75fbe64067eb1bc.js.map,sha256=y1zPoACRaF1vXEOoi-EUB45pVefXO0CeF2G5k675FRo,8534455
531
+ dstack/_internal/server/statics/main-56191c63d516fd0041c4.css,sha256=c_4kpUqgyUa7WR2UbLUqrT1qBjj5xNJ0cdKSylL6Msg,1367438
517
532
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
518
533
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
519
534
  dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
@@ -592,7 +607,7 @@ dstack/_internal/server/statics/static/media/logo.f602feeb138844eda97c8cb6414614
592
607
  dstack/_internal/server/statics/static/media/okta.12f178e6873a1100965f2a4dbd18fcec.svg,sha256=KqFI05gQM135zC1plF1WBRF2F7CyKL7km97WKsZjAHI,319
593
608
  dstack/_internal/server/statics/static/media/theme.3994c817bb7dda191c1c9640dee0bf42.svg,sha256=ZxFFBVZWuRLqmWH4zhwGLNtKjOzHj-5MGJRunFAtu1I,561
594
609
  dstack/_internal/server/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
595
- dstack/_internal/server/testing/common.py,sha256=t7ltfnYgHPRU7UjWJ_-XFNQOpDcZ20IQ3-QXbUfjppU,35825
610
+ dstack/_internal/server/testing/common.py,sha256=kEFIwHtPt65oxEjj90MmPcao0gqn25npnmd9ajImB30,35948
596
611
  dstack/_internal/server/testing/conf.py,sha256=-zhujfFjTHNfQDOK-hBck32By11c_kC0OeinB3esQGg,1902
597
612
  dstack/_internal/server/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
598
613
  dstack/_internal/server/utils/common.py,sha256=PbjXtqYy1taKXpyG5ys8cIrz9MXqc9dBAsR_9D1brrk,1414
@@ -616,17 +631,17 @@ dstack/_internal/utils/json_utils.py,sha256=RkSSvP4sPgRDa_0cZ1DykH_QvszcDjGMZmv3
616
631
  dstack/_internal/utils/logging.py,sha256=j37rgL-fQh2_E3ec_RqDy6Ora-Aa79ZVV-BAgZJViME,97
617
632
  dstack/_internal/utils/nested_list.py,sha256=ba4fmMuaz807Bf6KRve-9_8zm4dxlNMQiFbcvr3RjBg,1243
618
633
  dstack/_internal/utils/network.py,sha256=vvIQulBapL6Zw50jsit7sNNbGJVKTzooqWhkVWqaAzQ,1488
619
- dstack/_internal/utils/path.py,sha256=C2l1FKPkMhhYH9kB7-mQsbk_hI39iUHeFma8K4SMjls,1119
634
+ dstack/_internal/utils/path.py,sha256=FSKOBLDZdT64KJ-lqpRMoo6YzqR2jwCgdEmcodFQz-E,1342
620
635
  dstack/_internal/utils/random_names.py,sha256=lVyzAmXhaSf2bAuvRFQ_ihLy42in1ydN4gJYsMw4GG8,3537
621
- dstack/_internal/utils/ssh.py,sha256=R5ga40BMeSrjh-siVgP6WDTngDCjnGNz8P0ztGZ3nnI,11871
636
+ dstack/_internal/utils/ssh.py,sha256=FxOA85-NTYEGhnW_PL3-uVYGZbVZfyvcA8uvD7BcN2Q,12131
622
637
  dstack/_internal/utils/tags.py,sha256=Gx4aZM85E_UUCGuFZbCEFxHB5DNgrtJP15_1tFFEd1c,1292
623
638
  dstack/_internal/utils/typing.py,sha256=tHrhtkr3G6jkk-_FZyobdjLYvP5_YIgXbKsN-13dfvg,386
624
639
  dstack/api/__init__.py,sha256=7qbG42qEHMyNDFRCz9FgfuimAKws3hV8eMXs6oRgh5c,1607
625
640
  dstack/api/utils.py,sha256=_la3CRk1vgrPGkInPI1SOr33e8Jvh8ziJC32fjvKnaU,4188
626
641
  dstack/api/_public/__init__.py,sha256=mbzsdV3nWUJRksc7czX5C0iPT3NA6YRpriQQRiXwIbY,3429
627
642
  dstack/api/_public/backends.py,sha256=w_cIUVU3L1tN8VoPH6-ltq-oJewlfXWTiEFXfDvm-1Q,1056
628
- dstack/api/_public/repos.py,sha256=N9joXdr1WwpkQgTzhJwwUXLzIY2YMQUm5PQLQneNKOs,7132
629
- dstack/api/_public/runs.py,sha256=AbDAQMila9Gb9bGqMC-lKXCa-M7wdbrS4hPkh2tfkYw,31303
643
+ dstack/api/_public/repos.py,sha256=N6cvsey2jjVIu1D0SSCEnVOgm37YflzUtyAKdYUm_8U,8281
644
+ dstack/api/_public/runs.py,sha256=tHWK7_dylmCVbdA8ZVA0F3GH09oENozqZ5910vAo8Jw,32020
630
645
  dstack/api/server/__init__.py,sha256=6hr2scrtZ1LsH_VQ7TRYlKoOykL1wsSnDb6ZzMZ1T_U,6712
631
646
  dstack/api/server/_backends.py,sha256=tSvJ4j-yp-S-4IYo7pKHluDaSsx6Xbwo08Ff6Do85fo,1639
632
647
  dstack/api/server/_files.py,sha256=iOBHm1CvJiG4TqNx3t5LYOf7w3jff9I15wxYpIAg-r4,780
@@ -652,8 +667,8 @@ dstack/plugins/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
652
667
  dstack/plugins/builtin/rest_plugin/__init__.py,sha256=lgTsq8Z6Km2F2UhPRChVB4vDM5ZpWtdk1iB1aa20ypA,440
653
668
  dstack/plugins/builtin/rest_plugin/_models.py,sha256=9hgVuU6OGSxidar88XhQnNo9izYWeQvVH45ciErv-Es,1910
654
669
  dstack/plugins/builtin/rest_plugin/_plugin.py,sha256=h3r3Yc3h22i93fifPTgTm9Oojd1sN1O4DP7ZTV-kWpM,5386
655
- dstack-0.19.26.dist-info/METADATA,sha256=dq9pHCfTXeTqAIbzQ2uEuY1zbTRTDN47NmEOGtoJBSg,20586
656
- dstack-0.19.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
657
- dstack-0.19.26.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
658
- dstack-0.19.26.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
659
- dstack-0.19.26.dist-info/RECORD,,
670
+ dstack-0.19.27.dist-info/METADATA,sha256=WXnkivc2veHjzVXjHwZ3GnB7EdiGiHQGGcp6K-b5VlY,20586
671
+ dstack-0.19.27.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
672
+ dstack-0.19.27.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
673
+ dstack-0.19.27.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
674
+ dstack-0.19.27.dist-info/RECORD,,