dstack 0.19.27__py3-none-any.whl → 0.19.29__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 (74) hide show
  1. dstack/_internal/cli/commands/__init__.py +11 -8
  2. dstack/_internal/cli/commands/apply.py +6 -3
  3. dstack/_internal/cli/commands/completion.py +3 -1
  4. dstack/_internal/cli/commands/config.py +1 -0
  5. dstack/_internal/cli/commands/init.py +2 -2
  6. dstack/_internal/cli/commands/offer.py +1 -1
  7. dstack/_internal/cli/commands/project.py +1 -0
  8. dstack/_internal/cli/commands/server.py +2 -2
  9. dstack/_internal/cli/main.py +1 -1
  10. dstack/_internal/cli/services/configurators/base.py +2 -4
  11. dstack/_internal/cli/services/configurators/fleet.py +4 -5
  12. dstack/_internal/cli/services/configurators/gateway.py +3 -5
  13. dstack/_internal/cli/services/configurators/run.py +51 -27
  14. dstack/_internal/cli/services/configurators/volume.py +3 -5
  15. dstack/_internal/core/backends/aws/compute.py +51 -36
  16. dstack/_internal/core/backends/azure/compute.py +10 -7
  17. dstack/_internal/core/backends/base/compute.py +96 -14
  18. dstack/_internal/core/backends/base/offers.py +34 -4
  19. dstack/_internal/core/backends/cloudrift/compute.py +5 -7
  20. dstack/_internal/core/backends/cudo/compute.py +4 -2
  21. dstack/_internal/core/backends/datacrunch/compute.py +13 -11
  22. dstack/_internal/core/backends/digitalocean_base/compute.py +4 -5
  23. dstack/_internal/core/backends/gcp/compute.py +12 -7
  24. dstack/_internal/core/backends/hotaisle/compute.py +4 -7
  25. dstack/_internal/core/backends/kubernetes/compute.py +6 -4
  26. dstack/_internal/core/backends/lambdalabs/compute.py +4 -5
  27. dstack/_internal/core/backends/local/compute.py +1 -3
  28. dstack/_internal/core/backends/nebius/compute.py +10 -7
  29. dstack/_internal/core/backends/oci/compute.py +10 -7
  30. dstack/_internal/core/backends/runpod/compute.py +15 -6
  31. dstack/_internal/core/backends/template/compute.py.jinja +3 -1
  32. dstack/_internal/core/backends/tensordock/compute.py +1 -3
  33. dstack/_internal/core/backends/tensordock/models.py +2 -0
  34. dstack/_internal/core/backends/vastai/compute.py +7 -3
  35. dstack/_internal/core/backends/vultr/compute.py +5 -5
  36. dstack/_internal/core/compatibility/runs.py +2 -0
  37. dstack/_internal/core/models/common.py +67 -43
  38. dstack/_internal/core/models/configurations.py +88 -62
  39. dstack/_internal/core/models/fleets.py +41 -24
  40. dstack/_internal/core/models/instances.py +5 -5
  41. dstack/_internal/core/models/profiles.py +66 -47
  42. dstack/_internal/core/models/projects.py +8 -0
  43. dstack/_internal/core/models/repos/remote.py +21 -16
  44. dstack/_internal/core/models/resources.py +69 -65
  45. dstack/_internal/core/models/runs.py +17 -9
  46. dstack/_internal/server/app.py +5 -0
  47. dstack/_internal/server/background/tasks/process_fleets.py +8 -0
  48. dstack/_internal/server/background/tasks/process_instances.py +3 -2
  49. dstack/_internal/server/background/tasks/process_submitted_jobs.py +97 -34
  50. dstack/_internal/server/models.py +6 -5
  51. dstack/_internal/server/schemas/gateways.py +10 -9
  52. dstack/_internal/server/services/backends/__init__.py +1 -1
  53. dstack/_internal/server/services/backends/handlers.py +2 -0
  54. dstack/_internal/server/services/docker.py +8 -7
  55. dstack/_internal/server/services/projects.py +63 -4
  56. dstack/_internal/server/services/runs.py +2 -0
  57. dstack/_internal/server/settings.py +46 -0
  58. dstack/_internal/server/statics/index.html +1 -1
  59. dstack/_internal/server/statics/main-56191fbfe77f49b251de.css +3 -0
  60. dstack/_internal/server/statics/{main-4eecc75fbe64067eb1bc.js → main-c51afa7f243e24d3e446.js} +61115 -49101
  61. dstack/_internal/server/statics/{main-4eecc75fbe64067eb1bc.js.map → main-c51afa7f243e24d3e446.js.map} +1 -1
  62. dstack/_internal/utils/env.py +85 -11
  63. dstack/version.py +1 -1
  64. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/METADATA +1 -1
  65. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/RECORD +68 -73
  66. dstack/_internal/core/backends/tensordock/__init__.py +0 -0
  67. dstack/_internal/core/backends/tensordock/api_client.py +0 -104
  68. dstack/_internal/core/backends/tensordock/backend.py +0 -16
  69. dstack/_internal/core/backends/tensordock/configurator.py +0 -74
  70. dstack/_internal/server/statics/main-56191c63d516fd0041c4.css +0 -3
  71. dstack/_internal/server/statics/static/media/github.1f7102513534c83a9d8d735d2b8c12a2.svg +0 -3
  72. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/WHEEL +0 -0
  73. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/entry_points.txt +0 -0
  74. {dstack-0.19.27.dist-info → dstack-0.19.29.dist-info}/licenses/LICENSE.md +0 -0
@@ -1,14 +1,88 @@
1
1
  import os
2
+ from collections.abc import Mapping
3
+ from enum import Enum
4
+ from typing import Optional, TypeVar, Union, overload
2
5
 
6
+ _Value = Union[str, int]
7
+ _T = TypeVar("_T", bound=Enum)
3
8
 
4
- def get_bool(name: str, default: bool = False) -> bool:
5
- try:
6
- value = os.environ[name]
7
- except KeyError:
8
- return default
9
- value = value.lower()
10
- if value in ["0", "false", "off"]:
11
- return False
12
- if value in ["1", "true", "on"]:
13
- return True
14
- raise ValueError(f"Invalid bool value: {name}={value}")
9
+
10
+ class Environ:
11
+ def __init__(self, environ: Mapping[str, str]):
12
+ self._environ = environ
13
+
14
+ @overload
15
+ def get_bool(self, name: str, *, default: None = None) -> Optional[bool]: ...
16
+
17
+ @overload
18
+ def get_bool(self, name: str, *, default: bool) -> bool: ...
19
+
20
+ def get_bool(self, name: str, *, default: Optional[bool] = None) -> Optional[bool]:
21
+ try:
22
+ raw_value = self._environ[name]
23
+ except KeyError:
24
+ return default
25
+ value = raw_value.lower()
26
+ if value in ["0", "false", "off"]:
27
+ return False
28
+ if value in ["1", "true", "on"]:
29
+ return True
30
+ raise ValueError(f"Invalid bool value: {name}={raw_value}")
31
+
32
+ @overload
33
+ def get_int(self, name: str, *, default: None = None) -> Optional[int]: ...
34
+
35
+ @overload
36
+ def get_int(self, name: str, *, default: int) -> int: ...
37
+
38
+ def get_int(self, name: str, *, default: Optional[int] = None) -> Optional[int]:
39
+ try:
40
+ raw_value = self._environ[name]
41
+ except KeyError:
42
+ return default
43
+ try:
44
+ return int(raw_value)
45
+ except ValueError as e:
46
+ raise ValueError(f"Invalid int value: {e}: {name}={raw_value}") from e
47
+
48
+ @overload
49
+ def get_enum(
50
+ self,
51
+ name: str,
52
+ enum_cls: type[_T],
53
+ *,
54
+ value_type: Optional[type[_Value]] = None,
55
+ default: None = None,
56
+ ) -> Optional[_T]: ...
57
+
58
+ @overload
59
+ def get_enum(
60
+ self,
61
+ name: str,
62
+ enum_cls: type[_T],
63
+ *,
64
+ value_type: Optional[type[_Value]] = None,
65
+ default: _T,
66
+ ) -> _T: ...
67
+
68
+ def get_enum(
69
+ self,
70
+ name: str,
71
+ enum_cls: type[_T],
72
+ *,
73
+ value_type: Optional[type[_Value]] = None,
74
+ default: Optional[_T] = None,
75
+ ) -> Optional[_T]:
76
+ try:
77
+ raw_value = self._environ[name]
78
+ except KeyError:
79
+ return default
80
+ try:
81
+ if value_type is not None:
82
+ raw_value = value_type(raw_value)
83
+ return enum_cls(raw_value)
84
+ except (ValueError, TypeError) as e:
85
+ raise ValueError(f"Invalid {enum_cls.__name__} value: {e}: {name}={raw_value}") from e
86
+
87
+
88
+ environ = Environ(os.environ)
dstack/version.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.19.27"
1
+ __version__ = "0.19.29"
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.27
3
+ Version: 0.19.29
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
@@ -1,26 +1,26 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=JdmtCal_jEhc0A-R9g2AhaeYsnCZ6SBjx91NRhza2Fk,102
2
+ dstack/version.py,sha256=YFaOhGPwo6LX5fJekfVb7R4HaBPGERtQmy7ytf9Rmq0,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
6
6
  dstack/_internal/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- dstack/_internal/cli/main.py,sha256=j86KUq76BcxXPkUw3jdd0UEGXtxsi7iQFTMg2W06Z2I,3873
8
- dstack/_internal/cli/commands/__init__.py,sha256=1LCExJx1aXjaSnFuIgx18v3_ksfZBaasQiR2DLG-ov8,2046
9
- dstack/_internal/cli/commands/apply.py,sha256=z1EuBPtvL_QNHw7R9GkKO4iviiFdPZ90MEV18ZL2jqM,3574
7
+ dstack/_internal/cli/main.py,sha256=AZ4TB025U5wpQq3qH5sk9KkOYZCpxMIKqfaLH_Mv0DU,3876
8
+ dstack/_internal/cli/commands/__init__.py,sha256=aZdSeBeL38BYl_kjkdTHNbsQZiFbpDAHxas01be9CG8,2269
9
+ dstack/_internal/cli/commands/apply.py,sha256=py0ysrUSo8EbwzpHRS3d_vbO3ALxpDFQmscieSoKkjE,3725
10
10
  dstack/_internal/cli/commands/attach.py,sha256=75hojBqYRXj_65eQNvjypuyDy1G1HmajzOHSLe3pOIk,5148
11
- dstack/_internal/cli/commands/completion.py,sha256=k_0t4y68IbGMoVfAsYv-C33IALMZN_79Sh-4e3TExKI,576
12
- dstack/_internal/cli/commands/config.py,sha256=cpNCVCklQDW4vcdD9ovtJs6bcDIM1dULOZ6PKx3D39o,3148
11
+ dstack/_internal/cli/commands/completion.py,sha256=2QVAj-CfyDTMmGEWw_rTOclcey6fHY4xWkeX2kc4juk,613
12
+ dstack/_internal/cli/commands/config.py,sha256=Nt_zCe2kLOMEq3xZo4epv9OyoylgqyEaBgcJHNgnq_s,3179
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=VEBOdhHuPKnKkiIv93vy-B-3sFD_X4JJtm1V1lDf3M0,4244
16
+ dstack/_internal/cli/commands/init.py,sha256=Q0jmftfa1e_n7NahDVVeC4PlaoRqfkQ98MF--Lax9ws,4228
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
- dstack/_internal/cli/commands/offer.py,sha256=3TKsFug2RSKmh7A2aX3DH7-E22lPXnZayEwdjWRj-tk,6245
20
- dstack/_internal/cli/commands/project.py,sha256=A9LT_8Z7Esq1NOPy37R6llqTKORSOW9J5_iEbRANoII,6130
19
+ dstack/_internal/cli/commands/offer.py,sha256=sXjhp3_OTafG7QqPcNCvS5AtkgxoQeO4tbsuUIMr95A,6241
20
+ dstack/_internal/cli/commands/project.py,sha256=EyDOg1aK6e1SFZHvURSp73XYFltTxFXXBgXeB_eCsOc,6161
21
21
  dstack/_internal/cli/commands/ps.py,sha256=5RU4mcL4-FT4PcXktfKb4htCOPqia7mIuVGgfK7x9lY,1894
22
22
  dstack/_internal/cli/commands/secrets.py,sha256=Qke4UEGeRP5MfbhKFg4-T07FJEU_3nuCmPIGzQz0nuA,3142
23
- dstack/_internal/cli/commands/server.py,sha256=bHpUHl_slMcC6uJFPwCvOY7-P7G8yq2WC-vEXpSoMio,2851
23
+ dstack/_internal/cli/commands/server.py,sha256=zDHXEDN-9dKtWIIA_zTIlBeUcXR5aHbHuB8UsYfFk7Y,2845
24
24
  dstack/_internal/cli/commands/stats.py,sha256=_CiJPQZuKHUzA1x7CHJP-leth3MmqiQ2-jwojq6G-e8,390
25
25
  dstack/_internal/cli/commands/stop.py,sha256=mnM-x0SkvrYn5zNDnSgbl9-Q7W_zxR_5qOzRsE4phgk,1030
26
26
  dstack/_internal/cli/commands/volume.py,sha256=IlgKXJ2FYNrm0-Jh9KW1Wy56UueHv710x1ZLgCl42iM,3244
@@ -30,11 +30,11 @@ dstack/_internal/cli/services/completion.py,sha256=gjR3i4SIm2AQHvSilOd3la5sWBxJ2
30
30
  dstack/_internal/cli/services/profile.py,sha256=TiNMP_0Xbx9cD22zc8dTHHNIsZeIpavWL41UlT_tGgE,5850
31
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
- dstack/_internal/cli/services/configurators/base.py,sha256=MuNQ6CxLK57WLG2h2qQ80W8FWm9GGAhv1__5ZdWcZWE,3337
34
- dstack/_internal/cli/services/configurators/fleet.py,sha256=tdw4y92IyyPCwBoYP3mkTx8AqkS39mzmwWwn_HWPC1w,18924
35
- dstack/_internal/cli/services/configurators/gateway.py,sha256=Epxg5naso0BnjQ-rqxQunRCfIRncQ40ZUHpQaMt-Q8s,8870
36
- dstack/_internal/cli/services/configurators/run.py,sha256=ZFblrpJ6h-q1e7VM62ylT22fYUT4z-waXxgzGJ8qk5E,38865
37
- dstack/_internal/cli/services/configurators/volume.py,sha256=toN1QZJI47BNlkoLE39lXYNhlMaw7Mo53vkRs1LhWlo,8461
33
+ dstack/_internal/cli/services/configurators/base.py,sha256=9mabsRsKHY7xFl8yDRM__FOEQvtEYOn_4KeXKzO6-vA,3244
34
+ dstack/_internal/cli/services/configurators/fleet.py,sha256=pPfQmXBdqXHy8QAxGm9yY3Y3vKis-vaKirLrCO84zQA,18827
35
+ dstack/_internal/cli/services/configurators/gateway.py,sha256=B2aEoVhhRZGk25OekR7BT4eAvAgZGAyVOw7DlSuo2jg,8755
36
+ dstack/_internal/cli/services/configurators/run.py,sha256=lD14geWv8WtImrVDa5w9bXmA8JK8xIcTUawBTbbu6ZE,39543
37
+ dstack/_internal/cli/services/configurators/volume.py,sha256=ZeESHttKFERBFysJvSGFC4UXUOLghKlzcilXbL48s-c,8346
38
38
  dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  dstack/_internal/cli/utils/common.py,sha256=xgq2Rdx6wGS1NLx8FlmkjKrGaNYD428oeBB4VMjvJ5c,3447
40
40
  dstack/_internal/cli/utils/fleet.py,sha256=qgyZnhKSsdx4nWVnzcU30vhwV7dtrwn8C0yNKMQ1H4g,4044
@@ -59,39 +59,39 @@ dstack/_internal/core/backends/amddevcloud/configurator.py,sha256=WF4e-Yh2jMuTKQ
59
59
  dstack/_internal/core/backends/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  dstack/_internal/core/backends/aws/auth.py,sha256=BAe3HAedoAO42Fbv7YhpODKWlyil8M0PuRJsL-_u_kw,978
61
61
  dstack/_internal/core/backends/aws/backend.py,sha256=pjROH-S9pgrSMm-Eox_ocL7cTU6mIMRxvURq7Vi-2J8,876
62
- dstack/_internal/core/backends/aws/compute.py,sha256=Ztodgn_EkDcnVtJkPBduYmDXV8_gsANW9wJW3l2hd4E,44546
62
+ dstack/_internal/core/backends/aws/compute.py,sha256=mxwNXg1sNjF1bGNxt42DfXj66bbEi-Yh92lKS6EMxkg,45224
63
63
  dstack/_internal/core/backends/aws/configurator.py,sha256=X4CS-DnvsbdYCEVo6HBKLmH0YQ-zh5RucOjyhEcRca8,7634
64
64
  dstack/_internal/core/backends/aws/models.py,sha256=EUCHXHmZnshe3rwI9UtjilwcUMu1Z7MO4Y4-nlZ_IcA,4404
65
65
  dstack/_internal/core/backends/aws/resources.py,sha256=ccvdQd2H1DuUupdzMtqf86nkrenYPBJb1k3VgHu5Gp4,23610
66
66
  dstack/_internal/core/backends/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  dstack/_internal/core/backends/azure/auth.py,sha256=CHp3QRNx3tIwkhyOY_l8WU-ElY4Pxhavoy9JSdwr15g,1259
68
68
  dstack/_internal/core/backends/azure/backend.py,sha256=XySTor8v_tLkZctDBryrFHrbVzQgNf_RUPkXQYplvwM,746
69
- dstack/_internal/core/backends/azure/compute.py,sha256=waunprBzpiJBMtVDJMjFCxEdmtO52E7ckzcc6OcZLf4,24488
69
+ dstack/_internal/core/backends/azure/compute.py,sha256=cbR0nSQfSIiR1x2J35So9xJbDkSjfYTEcYGQ-_1pceo,24695
70
70
  dstack/_internal/core/backends/azure/configurator.py,sha256=tKovBgMvyKmCogZ2OMxOJ-Sh_TCBqYXBvbBM-kgyeBI,18367
71
71
  dstack/_internal/core/backends/azure/models.py,sha256=ap0WsYBSFdDCxY0G3W1sg2DBN2k0xknz6bp8Ypf6phs,3356
72
72
  dstack/_internal/core/backends/azure/resources.py,sha256=cJWS2Yjxdg-XtjpdBxfVDZaX_gTbuoEpmdjTxdA9uIw,3431
73
73
  dstack/_internal/core/backends/azure/utils.py,sha256=taHMJq6UHRzUXLUcO2P5VCKy3wJaye2bG-6QdkEPNdY,1741
74
74
  dstack/_internal/core/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  dstack/_internal/core/backends/base/backend.py,sha256=hdFMHED1RMV9GVfLSU0yGhGE-cXlbLvt1coDA885PMM,505
76
- dstack/_internal/core/backends/base/compute.py,sha256=3x--AsQYD63n_KtNJa1TkdRdTw8t3thaZKhfnL0hq9g,30581
76
+ dstack/_internal/core/backends/base/compute.py,sha256=bK4whPes7mCQ698Fu1XtgOUGOpiBhx9EnhTI9KkG_R0,33666
77
77
  dstack/_internal/core/backends/base/configurator.py,sha256=TKG5iJlOXxVT2agE_ruMW8JGt2dtwXY7ghmJN8bEWlw,4299
78
78
  dstack/_internal/core/backends/base/models.py,sha256=Ij0osOl-T-ABsKLoVg2eY81DMkwdWkevAnjXj2QnLXI,532
79
- dstack/_internal/core/backends/base/offers.py,sha256=IlK1X7Rz3piKeUJNsIjyqrj68k4PlWsC-5e76i9NjYg,6305
79
+ dstack/_internal/core/backends/base/offers.py,sha256=1688KlzBWgQWJFAEQMtqOud4Z8CwpvufNolX1zm1UTI,7487
80
80
  dstack/_internal/core/backends/cloudrift/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  dstack/_internal/core/backends/cloudrift/api_client.py,sha256=mI3_ttwujfSunTiTIelnc1XaLBlfxsKsacrlyB12f8c,8178
82
82
  dstack/_internal/core/backends/cloudrift/backend.py,sha256=Jz3nIQsa3TnMISVXK6EU43O0B7FgIMxwwaEBmd_s5BY,596
83
- dstack/_internal/core/backends/cloudrift/compute.py,sha256=fmCaUliSRKDjAPT8YFwX-7xSk0eMnxryFsDBFBcS7VQ,5141
83
+ dstack/_internal/core/backends/cloudrift/compute.py,sha256=NoMreAUiYK8Pg0g0QrsIpz0ojTzgVlNMiSM1vUcvDRY,5063
84
84
  dstack/_internal/core/backends/cloudrift/configurator.py,sha256=ZchmFjn49QDz7If-tbC1kFQeDvBbu6CiZJGESyt6tGE,2492
85
85
  dstack/_internal/core/backends/cloudrift/models.py,sha256=tFpcG68OghznpzmspjdnlVEWY_GDvFPt_d41p9ceLrk,1119
86
86
  dstack/_internal/core/backends/cudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  dstack/_internal/core/backends/cudo/api_client.py,sha256=ygq1Gx7ZvwKaifdXtvzDSw4xR4ZH6UWd5J47BjuaGh0,3685
88
88
  dstack/_internal/core/backends/cudo/backend.py,sha256=i13YoAkUfIStc3Yyyt_3YmL30eVrKtrhwnE9_B1iBRI,546
89
- dstack/_internal/core/backends/cudo/compute.py,sha256=XlhBQ02TB5Co3IKXcrKqko0YodZWFSTOLlg0LQmLNzI,6680
89
+ dstack/_internal/core/backends/cudo/compute.py,sha256=S5VYgwEvLQrAmqVcnPmWnYerSc2lC4RAnS9vE_z7bZ0,6753
90
90
  dstack/_internal/core/backends/cudo/configurator.py,sha256=3wAegbWDI2DcWD_225PNSQEnT9FPpDIKrJQLlY8hMu0,2193
91
91
  dstack/_internal/core/backends/cudo/models.py,sha256=6sfEqY2hvTpIACkyT4mhD3D8K5TsW_pupys9nqtrgoI,1055
92
92
  dstack/_internal/core/backends/datacrunch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  dstack/_internal/core/backends/datacrunch/backend.py,sha256=-wanJJ_K_wOXezxTSRgsK1MjsOuCl0MoVJREPj3SgM8,606
94
- dstack/_internal/core/backends/datacrunch/compute.py,sha256=i06kApZD9-cRRE4ZEDfvqcFM2944tOMseyPC-Vx2vBc,9159
94
+ dstack/_internal/core/backends/datacrunch/compute.py,sha256=uQTJfDdvNnpiS_BwaQxgiTtAVbNyBxifwOC9A1CMNhg,9367
95
95
  dstack/_internal/core/backends/datacrunch/configurator.py,sha256=9eG3p9LIp5M45T7WH60q8YwH9cNlzz5l_DSRcugO45I,2564
96
96
  dstack/_internal/core/backends/datacrunch/models.py,sha256=QeadH8qmcK3oDY9DfQKmX65fDGQo6FABLQAe9wQsHr8,1194
97
97
  dstack/_internal/core/backends/digitalocean/__init__.py,sha256=BPjTlv6iNDgu2mcsaIh0FEi9T8iwCEEIVbJQYJAa0gY,34
@@ -101,7 +101,7 @@ dstack/_internal/core/backends/digitalocean/configurator.py,sha256=_4Tiei4ejehHd
101
101
  dstack/_internal/core/backends/digitalocean_base/__init__.py,sha256=-7saeWMuPLmclPKi3VT-H5lwALbO9AABcaL248npyBc,84
102
102
  dstack/_internal/core/backends/digitalocean_base/api_client.py,sha256=-QBAOs-Qj1E_4q3uM7oKPxsN86c-quwiZNqqYbTcs8I,3834
103
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
104
+ dstack/_internal/core/backends/digitalocean_base/compute.py,sha256=2hEeOg6OEYq73rBIhN0XamdOfkhmYZmjJgEay-Zlcdc,6944
105
105
  dstack/_internal/core/backends/digitalocean_base/configurator.py,sha256=piXOi4jtUprESLkHE_hSeo1ndxe-3pI5aYDPicNbyAQ,2141
106
106
  dstack/_internal/core/backends/digitalocean_base/models.py,sha256=oyVnr_xaneudGeogfCr0BLZ22kzubUmGaNE5V8FI-6U,1334
107
107
  dstack/_internal/core/backends/dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -109,7 +109,7 @@ dstack/_internal/core/backends/dstack/models.py,sha256=Jbe0Syez43N5i97TlIc8l-5Vn
109
109
  dstack/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
110
  dstack/_internal/core/backends/gcp/auth.py,sha256=VWCn34hapaZ3E0OHCoiAVL97o3s64RF9w85CZ6xdtmk,2235
111
111
  dstack/_internal/core/backends/gcp/backend.py,sha256=OvTv1c7j4LTPCIEtkwD3-q6Eo1QET8xlM8CzbY0hLmI,572
112
- dstack/_internal/core/backends/gcp/compute.py,sha256=arHF6BcMDpGNdA1OadfeKoEYJ6kliX_kV0rz4vSVJwA,43030
112
+ dstack/_internal/core/backends/gcp/compute.py,sha256=LycsCO9gCI1WEhsjUNnn-A4PrjciSU28BDsG3BEGNb4,43239
113
113
  dstack/_internal/core/backends/gcp/configurator.py,sha256=eVPr6pD4g66ej5qxhFd94lb_R11CIBA-py9PQS9EOGE,6865
114
114
  dstack/_internal/core/backends/gcp/models.py,sha256=biLA3rlFcoPatAZpKycuIl-8PdnNSAFiDCJjov65_zo,4612
115
115
  dstack/_internal/core/backends/gcp/resources.py,sha256=2jpg24NH4Ov4J4Of1F3DPkwEWkRxEi-x4ZTx8XSNGIQ,16926
@@ -118,27 +118,27 @@ dstack/_internal/core/backends/gcp/features/tcpx.py,sha256=8bDR5kwF5qke5EWNdBscd
118
118
  dstack/_internal/core/backends/hotaisle/__init__.py,sha256=CYMaS1jd9Km0Y6Jvg4ePjYOtfqL9swGsRo5kcXGFrFQ,30
119
119
  dstack/_internal/core/backends/hotaisle/api_client.py,sha256=Fd1TOg4_orwQyJtoZ657zJweLeBhzj_9ObfL538S5uI,3640
120
120
  dstack/_internal/core/backends/hotaisle/backend.py,sha256=o0cqLIKGcrXhvksHHGvjCpLShoQxT2IKdJy9sm0H9gE,586
121
- dstack/_internal/core/backends/hotaisle/compute.py,sha256=vZnaw3CuO8wMlrZvXrDfyGnzqNAuGH-K9GEL3lV5pUo,7511
121
+ dstack/_internal/core/backends/hotaisle/compute.py,sha256=uMiz6UEa5bd03RWFb8bH82CV4tphO5v2Ly5F2LsIsEg,7483
122
122
  dstack/_internal/core/backends/hotaisle/configurator.py,sha256=EJwdKFfC0ab0pe4lzeV65b80Ok21rR0OfupOmuqCp6c,2287
123
123
  dstack/_internal/core/backends/hotaisle/models.py,sha256=CmJ20SbpKzFldX7rrR0CpVytSJSN2YWKQ3Ixnta_A1M,1334
124
124
  dstack/_internal/core/backends/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  dstack/_internal/core/backends/kubernetes/backend.py,sha256=Jy0_Nwn6Oro8McJIo_QeNxxq4Pmwsd7JPd5_YE8Fz9U,606
126
- dstack/_internal/core/backends/kubernetes/compute.py,sha256=hFQkElNHRi4DBoyLJAYXuhCV4bJi0HjzbMGtrsKrMr0,23037
126
+ dstack/_internal/core/backends/kubernetes/compute.py,sha256=pc5FK1wmY8XRpupFZIpOkzLf4BtWJ8XEHkzYYFmmFPY,23132
127
127
  dstack/_internal/core/backends/kubernetes/configurator.py,sha256=RK8_eznv1AFrcG3fM-KIxyolsaJ8UTBAO7c3P3RCBnw,2228
128
128
  dstack/_internal/core/backends/kubernetes/models.py,sha256=YITTXi8f1-0FQ7qlC3nDV46m48w88bIiZ_weQJ9bQXU,2577
129
129
  dstack/_internal/core/backends/kubernetes/utils.py,sha256=k0cmjqMoNfJ_pAe6W82exV4AywMcpZ5jf0QICVbVuFY,1218
130
130
  dstack/_internal/core/backends/lambdalabs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
131
  dstack/_internal/core/backends/lambdalabs/api_client.py,sha256=WaBO7VrPB4kbMQJDxjFxx0HEtAoSncQvH-cahWnVxx4,2688
132
132
  dstack/_internal/core/backends/lambdalabs/backend.py,sha256=zVU_M2EBbP-9-snmh64GTKeYAX84-g5kwrZ9d7xETzs,610
133
- dstack/_internal/core/backends/lambdalabs/compute.py,sha256=BctxiSr2DJ_WwmoYZGm7mUBTw0-TSA3l8YyxvVUWrv4,8184
133
+ dstack/_internal/core/backends/lambdalabs/compute.py,sha256=k9aTZVd7E_RLfF6vXvEIN1w87ghCGTgoROeuUHMJr-Q,8158
134
134
  dstack/_internal/core/backends/lambdalabs/configurator.py,sha256=JL6n0nM42diqVyI1w-8uUY3WgQCbLouurZ4yA8QD69w,2276
135
135
  dstack/_internal/core/backends/lambdalabs/models.py,sha256=c9dAYd0wjun2dvMLUZO4D09XvEskBRehjLDN_nwbSEU,1036
136
136
  dstack/_internal/core/backends/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  dstack/_internal/core/backends/local/backend.py,sha256=KJuNXUXrg60NhLywnExD1EXH2gK0TL-kzNWUPRNZ_Zg,427
138
- dstack/_internal/core/backends/local/compute.py,sha256=-FUD8Ii5VTBtygAV1U3k1j10MFdK1whGvrSeRwTk29Y,3788
138
+ dstack/_internal/core/backends/local/compute.py,sha256=M5xCk7Yav_u6OtZUzLfmw36RfNwzl1SCs-I7mWYiyPY,3757
139
139
  dstack/_internal/core/backends/nebius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  dstack/_internal/core/backends/nebius/backend.py,sha256=2XqZIbSR8VzlfOnuVklXlDxNmwAkQj7txQN8VXF1j2E,566
141
- dstack/_internal/core/backends/nebius/compute.py,sha256=UcYIfaqp0-keMuGhARcL82bQK_VXEMigsveW_LbD6Ds,14645
141
+ dstack/_internal/core/backends/nebius/compute.py,sha256=9r0m0yqefZbnT9iP-9VtWCJNcNalk9Kut1KBy3OWEy0,14852
142
142
  dstack/_internal/core/backends/nebius/configurator.py,sha256=PilZ5M0xj-koYz9PPew9L29rrHoF2JrW2bxgCqt27u4,3213
143
143
  dstack/_internal/core/backends/nebius/fabrics.py,sha256=-X-nSPV2pUin2PAYDHGm-j14KPboIFRpLi93PKHUXTM,1616
144
144
  dstack/_internal/core/backends/nebius/models.py,sha256=UudYX32p-ZY-GWR83VEtY5dpZBaWhKXQIfn2nrBCq-4,4245
@@ -146,7 +146,7 @@ dstack/_internal/core/backends/nebius/resources.py,sha256=ttgwdqokvXF8BH_IDPFZxW
146
146
  dstack/_internal/core/backends/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
147
  dstack/_internal/core/backends/oci/auth.py,sha256=8Cr18y_LOsyRP-16yfFpT70Cofpm0clB3KawS_7aRl4,717
148
148
  dstack/_internal/core/backends/oci/backend.py,sha256=yXjVCt7n6BVLH0byYFbNFf-P9J0FwlNfxsYbKGMdoI4,536
149
- dstack/_internal/core/backends/oci/compute.py,sha256=-1UyAcsJ7PG980zKGZBg9dYVi_hZrvNWxRh-YGjKas4,7398
149
+ dstack/_internal/core/backends/oci/compute.py,sha256=jB3A6s4Hxh-LYrqQR8wJYqYCxLt31cbeMxrEkBxRfys,7605
150
150
  dstack/_internal/core/backends/oci/configurator.py,sha256=_mi093BzV8Xdfw81wkiqoY5d5x4CCCtni7J01CZeDCQ,5768
151
151
  dstack/_internal/core/backends/oci/exceptions.py,sha256=GxlUf7itcAQgY3m-U2ul_ZXzfUOcEcPEmisWFaoWSkA,288
152
152
  dstack/_internal/core/backends/oci/models.py,sha256=fDlY7-A0WDQeiwJzwrQl6D5ENOc-677Bz8LXyvBvF0c,2969
@@ -155,30 +155,26 @@ dstack/_internal/core/backends/oci/resources.py,sha256=VfTDuVTEO8MUvD3i2DFoe2du1
155
155
  dstack/_internal/core/backends/runpod/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
156
  dstack/_internal/core/backends/runpod/api_client.py,sha256=Oet7CwQTu3sE57unqh-JvuMCBDEDPruAbGB4GyM0dM4,13427
157
157
  dstack/_internal/core/backends/runpod/backend.py,sha256=GcLbySsGY29ZGHXSqTXCxUUoTK9pxVScKly0_fkNr8c,566
158
- dstack/_internal/core/backends/runpod/compute.py,sha256=yPu7P5vpt2hoGoBfZAMDj-XCkluy0sCVMVxVhu8zllE,10559
158
+ dstack/_internal/core/backends/runpod/compute.py,sha256=ryPUmZ50-iiYHxSvSexs1p3eJFzltrJqNksF4VYMrZo,11056
159
159
  dstack/_internal/core/backends/runpod/configurator.py,sha256=ZcDKN5ulmFMjSy9TlnV-2qxqPwTZUpIwfVwtShZL5fU,2242
160
160
  dstack/_internal/core/backends/runpod/models.py,sha256=W3nO4sjvvWtfKYDZDVJ8oBSsgeGdSR-Z_PD7OpfDBgY,1466
161
161
  dstack/_internal/core/backends/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  dstack/_internal/core/backends/template/backend.py.jinja,sha256=jqSUr05lKHSuGq2MCk4tHob1TfGiSSsHox1GuEz30zU,704
163
- dstack/_internal/core/backends/template/compute.py.jinja,sha256=jLFZ_EMEjlgu6y3VJtvXs4qNXZmytZhl5JzJVM04lIc,3319
163
+ dstack/_internal/core/backends/template/compute.py.jinja,sha256=kJDJztC4VA-2tp9HdMwNn-8OpwChmhdtNmIZSmzrWwU,3368
164
164
  dstack/_internal/core/backends/template/configurator.py.jinja,sha256=OeEjI36hpH62FdSm7tGDMuOwuRpnE6u5VmyeGmNJdgk,2665
165
165
  dstack/_internal/core/backends/template/models.py.jinja,sha256=dhJd8uWoMvAHAsPpDMPNtdMKzJTIoXDtsGC0NCQ3Y08,2061
166
- dstack/_internal/core/backends/tensordock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
- dstack/_internal/core/backends/tensordock/api_client.py,sha256=NUEKgu6JY6kqQXRqsghT-aBf7sNstHQo7J1WmqL-Qfs,3872
168
- dstack/_internal/core/backends/tensordock/backend.py,sha256=KT5bRuD3KttEqiNNqQpW5f6nX7Qez-L74TBmYKy3puI,606
169
- dstack/_internal/core/backends/tensordock/compute.py,sha256=GnW8eAeJXYU11_ukX9lBznbYaOQssBH6RltMOX6UYSU,4528
170
- dstack/_internal/core/backends/tensordock/configurator.py,sha256=SlYFcdzgQ09-BJH7FdZFaJ1HWFmMbZzciTkmiQMcaks,2649
171
- dstack/_internal/core/backends/tensordock/models.py,sha256=oxbSWRCsD0_j4-2lQYo4LpmhKL8Kgv2nmq_dfMaSCiU,1182
166
+ dstack/_internal/core/backends/tensordock/compute.py,sha256=yLV9lAYARlrKninbVJ7eoqbfSd8g6lvraQ-j9WiHZRQ,4497
167
+ dstack/_internal/core/backends/tensordock/models.py,sha256=Dov-XsJcgOWML8c_jPpzo47y3wGQkxk3o-hTaZfYrPE,1250
172
168
  dstack/_internal/core/backends/vastai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
169
  dstack/_internal/core/backends/vastai/api_client.py,sha256=b-qgx352lnxhBXichJtURFGxR7Jd9JYx4WXaxYV-HH0,4940
174
170
  dstack/_internal/core/backends/vastai/backend.py,sha256=NawGHNYVmgNwL8HruEA84rimnpeSyXccdJXr6Dr95UY,566
175
- dstack/_internal/core/backends/vastai/compute.py,sha256=ZjeJF196lXTjO5gQ8fnQtvNEVZdYpcVODmZOOV3g96Q,4911
171
+ dstack/_internal/core/backends/vastai/compute.py,sha256=X4nkJUCGB55W2FvqKpQcIPV73s22xviDSBREd4LmPCI,4991
176
172
  dstack/_internal/core/backends/vastai/configurator.py,sha256=rFeUdlGiBw8PsB_zgBLm-p2pzHdyN8cSATHFLzeKhrg,2408
177
173
  dstack/_internal/core/backends/vastai/models.py,sha256=2xpFE-ouYUBienxZXam2Mo4dy9enSv-FuVJXeYnjVLk,1036
178
174
  dstack/_internal/core/backends/vultr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
175
  dstack/_internal/core/backends/vultr/api_client.py,sha256=isHbdBQr2hFRYTcnTsGxSlWIKYrpC1X_gjSZjGxUupE,4363
180
176
  dstack/_internal/core/backends/vultr/backend.py,sha256=WkPmbUxm3Ysv3_wJjuktQqvvN_L_TX5g37CflGQWQFo,556
181
- dstack/_internal/core/backends/vultr/compute.py,sha256=9qfya_TKMvvWyWm2OElQjMIFwANaFcEkyc_gHj5XNVA,5845
177
+ dstack/_internal/core/backends/vultr/compute.py,sha256=7YUgbHOBInSVeYOVW5GtCkv5z2bbq1pk9TmY7D4bXYI,5850
182
178
  dstack/_internal/core/backends/vultr/configurator.py,sha256=JMJ9itCGIRb4MJ8fjS6syd7xrO7wUra2OVoqLTrGRo4,2373
183
179
  dstack/_internal/core/backends/vultr/models.py,sha256=TkqK_lW6w5k_7wsoFiKDb6NXuTrHL6ypVm59FoyaSFY,928
184
180
  dstack/_internal/core/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -186,25 +182,25 @@ dstack/_internal/core/compatibility/fleets.py,sha256=jg42A7OmprqATKKt6JpLL1qOQSZ
186
182
  dstack/_internal/core/compatibility/gateways.py,sha256=4h_lfpN9KJFyLTFexq-wlu74Rwpk0anV67v38aJ-SnI,1463
187
183
  dstack/_internal/core/compatibility/gpus.py,sha256=myWVUjaK2S1QuYgRZyMtD8-DPKQTjadSbsnECtfoHHs,575
188
184
  dstack/_internal/core/compatibility/logs.py,sha256=keXt3OFKR0CjD_XMsetzRu8yQGCz7CWBwycuP267L_Q,629
189
- dstack/_internal/core/compatibility/runs.py,sha256=I-9CW-sx01HQXk5jS5_VT4f2tceZpkRodmh3zJS5au0,8772
185
+ dstack/_internal/core/compatibility/runs.py,sha256=kdYvirgXWO2m9Uj_LOadzMUsJSWXtFY6yEdNadNypZs,8869
190
186
  dstack/_internal/core/compatibility/volumes.py,sha256=ofjpVusuc-pq285bGrIh8PAqu0QlAd6NQgU3gfJQIc0,1546
191
187
  dstack/_internal/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
- dstack/_internal/core/models/common.py,sha256=TbshwjP_G0Z-JRPCnZ-a5bgwAcOsNfb1_JNMyhOEa4U,3873
188
+ dstack/_internal/core/models/common.py,sha256=QKdZM7L2NepzOPavkkI_q3g6WYCauMTbtZSZwWZVYHE,4704
193
189
  dstack/_internal/core/models/config.py,sha256=VYfgyWG2kfGhJxkC48vZDCbHahIEnO05mDDagJ5kA6s,787
194
- dstack/_internal/core/models/configurations.py,sha256=7i8Ub5djXWZzsszVUzQZqL7pYWorw4tKkgx-9YArZiQ,30782
190
+ dstack/_internal/core/models/configurations.py,sha256=G0MO8iKR1uRQABWuB_biglZQTCqLBK3vhxIKwJKEsTg,30998
195
191
  dstack/_internal/core/models/envs.py,sha256=yq84YRFBILOy4x3XnGcTgYpbZ69eFTCQPgBCr9Ndov4,4969
196
192
  dstack/_internal/core/models/files.py,sha256=CI1AQN07ACot_6RVkG7qLml07Ro0co2hGsAfcTamn3Y,1977
197
- dstack/_internal/core/models/fleets.py,sha256=Df0Ns3MuJoonD8D9fVncUhlmImnoBex96TYxvfe2GVk,14948
193
+ dstack/_internal/core/models/fleets.py,sha256=FXwILyyemijNrhUPgJvgwZlKpjsX7OGbPIHnjg_3iXk,15192
198
194
  dstack/_internal/core/models/gateways.py,sha256=_O8EWwHWLdgNoWY4P4u71KM-uEr5DDp42LXfyv1qMDI,4054
199
195
  dstack/_internal/core/models/health.py,sha256=Q0Z5pYbW-rD5wLn3-EDre2Q7X6tX7DFaglKz5SDv18U,570
200
- dstack/_internal/core/models/instances.py,sha256=cILMmY-NaHz3Hnl5pm0BQyAq4LXDe7fYHqLENa0dOGI,6895
196
+ dstack/_internal/core/models/instances.py,sha256=Gpv46fu3uWO-3f8w1A6rBzU5dYhmO_wWh9s8fvnd9iw,6872
201
197
  dstack/_internal/core/models/logs.py,sha256=VOsgEsvUIRNNHivD6OZnPZNC52ioqafv7ccdnFQ1YI8,529
202
198
  dstack/_internal/core/models/metrics.py,sha256=Xb8hCXUL-ncQ3PMsErIUAJTe9gwh5jyrQ4UQoZbibsc,269
203
199
  dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7VSAtR_xoFvPVM,720
204
- dstack/_internal/core/models/profiles.py,sha256=62LMs6_eGxTs5lNLt5bEAq9RsEwKOKwKWu5fMs5qLnM,13957
205
- dstack/_internal/core/models/projects.py,sha256=HmmlrvUSSEjfGfX7X5tmGJ-CbKeyGK6shHD5OghDNks,671
206
- dstack/_internal/core/models/resources.py,sha256=ISQeTuzuHSXA5KUgoMCNE9nSoHvfxu3HmjETNPrqCtM,14588
207
- dstack/_internal/core/models/runs.py,sha256=sLvlNXO1qDU79JHOeYS_6T-req6V_QOjEfcW_zutT68,22557
200
+ dstack/_internal/core/models/profiles.py,sha256=_ZxSk-rMvzpiUYUZD0EQbrJDy3FVmRUmIUtEgzlVeHo,14217
201
+ dstack/_internal/core/models/projects.py,sha256=hOZoL85q-873vT_Aw7FhzpS6DGVt0Y3yT8kpElrLFto,833
202
+ dstack/_internal/core/models/resources.py,sha256=-dLupzud5BSqxNABBjLVYTCKekbr9_mhaNGD1ZWBjgM,14544
203
+ dstack/_internal/core/models/runs.py,sha256=ehGSyCSx5OAaEqCEd2YvCRiP_uewUeDOHbJGSocu6w0,22609
208
204
  dstack/_internal/core/models/secrets.py,sha256=5T4B4eCeZmVQ8t22qYYlm4NUyX7VloiXCJuyDfE92QA,413
209
205
  dstack/_internal/core/models/server.py,sha256=Hkc1v2s3KOiwslsWVmhUOAzcSeREoG-HD1SzSX9WUGg,152
210
206
  dstack/_internal/core/models/services.py,sha256=2Hpi7j0Q1shaf_0wd0C0044AJAmuYi-D3qx3PH849oI,3076
@@ -216,7 +212,7 @@ dstack/_internal/core/models/backends/base.py,sha256=OVy1zqYVX9C_XZpo2g3SHfKAXOp
216
212
  dstack/_internal/core/models/repos/__init__.py,sha256=7Qo1QgJ852LklUuM-mlCNFodp_XrQ4iqV7uRPiX_qm0,885
217
213
  dstack/_internal/core/models/repos/base.py,sha256=nErlSR3AbG9fwDE5vuJK5DIrP8JB3fG8a7mXqosJ9gY,846
218
214
  dstack/_internal/core/models/repos/local.py,sha256=zKnEOyN7hSDQ7EKn8q9aJ3uikiTTtGdGEN_3896HTTc,2913
219
- dstack/_internal/core/models/repos/remote.py,sha256=KzzfOJLtuaZZxvNpFj4axDdJGUTKdzE6ZjbmqOUZQfk,11592
215
+ dstack/_internal/core/models/repos/remote.py,sha256=Ax1kXrHHyFlTy4nEbzBUQA9xQZEVb05U484ISJC_Gz4,11690
220
216
  dstack/_internal/core/models/repos/virtual.py,sha256=8g4hGSQ6Z8oDKoF6cj2souJ2A5vRop5OyFCQ5z84rw4,2582
221
217
  dstack/_internal/core/services/__init__.py,sha256=UVVcj26WYVgo7jHzD07sNRqSOO7zA3QzQv-9LnCDqR4,415
222
218
  dstack/_internal/core/services/api_client.py,sha256=HTQ0fcZciUh-nmfV09hUt__Z4N2zq_R12xAiYXD0Jy0,650
@@ -284,26 +280,26 @@ dstack/_internal/proxy/lib/testing/auth.py,sha256=-firWTnis9Eogoi58BURv1S-te4Hf9
284
280
  dstack/_internal/proxy/lib/testing/common.py,sha256=5e2VYboMqjBnUxkvidaWLoQ-uaBGh_hnURb_VJc38q4,1518
285
281
  dstack/_internal/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
286
282
  dstack/_internal/server/alembic.ini,sha256=rTauBJC8Jxlw76KUygW061OFAGV7GhwAStinlaxoYGY,3166
287
- dstack/_internal/server/app.py,sha256=-qkKsnSTtFIFrSXh7POISuJmEgitwmuRLAAJz0DPQh0,15223
283
+ dstack/_internal/server/app.py,sha256=BdjpR_XsTMkNey85ZwTjKd9_KKbtlePnIqy7QQDQdq0,15364
288
284
  dstack/_internal/server/db.py,sha256=NY0-K_7ok2OYLtPMeZ4EHlHK5N2a77uj4aJCVgWO2qE,3245
289
285
  dstack/_internal/server/deps.py,sha256=31e8SU_ogPJWHIDLkgl7cuC_5V91xbJoLyAj17VanfM,670
290
286
  dstack/_internal/server/main.py,sha256=kztKhCYNoHSDyJJQScWfZXE0naNleJOCQULW6dd8SGw,109
291
- dstack/_internal/server/models.py,sha256=f5RUOEebaGpZMfZPfhTi6cr5LkY2CeOIr9ezXYbDCXs,34146
292
- dstack/_internal/server/settings.py,sha256=0gW2TDzRgkpKXrXoljhCT2iOfpjegNzVUAxd6fZjg-k,5784
287
+ dstack/_internal/server/models.py,sha256=mpQYS1hELiopZLlxF8rVMs4K5yF1zGBFnc1DHgE1BBQ,34213
288
+ dstack/_internal/server/settings.py,sha256=7SRzSlTnUPNNjlZH-vpgwbwj95gI-LLtQite8LQnaTU,7418
293
289
  dstack/_internal/server/background/__init__.py,sha256=QftEjgQZffu83sY-F0WL65vRp28FbBEtezfowQYcTv4,5606
294
290
  dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
295
291
  dstack/_internal/server/background/tasks/common.py,sha256=N7xSXbf2MoBWgbJ1e3AEzYBTf1Gn-pDXYND8Zr_YCJQ,970
296
- dstack/_internal/server/background/tasks/process_fleets.py,sha256=bMJtsNPzSpl6n-XP0b5krQbZ6rU6UqmYtFhA4RkOny8,8234
292
+ dstack/_internal/server/background/tasks/process_fleets.py,sha256=b0wECmweaetFv9vSjE1BiOJmlIPlk7O-fmntpdSiWgg,8590
297
293
  dstack/_internal/server/background/tasks/process_gateways.py,sha256=FH9RY3Tfmtw_UctCdYZDIRb2rgtmHdxTg6Oc4IBiDBA,8356
298
294
  dstack/_internal/server/background/tasks/process_idle_volumes.py,sha256=mqnl8wvWaKTYvJMbgFJbOP-bZMRQG2vrhUnaNcyBldE,5223
299
- dstack/_internal/server/background/tasks/process_instances.py,sha256=ddBR_r7VwOuDb4zlp9QSQWgoK4XvOi4IGh0dBZkxtUY,44004
295
+ dstack/_internal/server/background/tasks/process_instances.py,sha256=5xYWqcxNnsZ4ZgGRE1m894N6BgsSMNRL49sg6Wc_zGI,44067
300
296
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=yKXe9J7m3oleK0C-oGJaYNkcPT8kqkz0nw-A7xqYbjE,6390
301
297
  dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=lgYIzjHG9EITK31yG6uQjlIcSwW5jsP9ZOBBZqW_eNs,4263
302
298
  dstack/_internal/server/background/tasks/process_probes.py,sha256=dmug-_rmYiVLLF-imto-Ju1gPtENvHvCjHyilqgYuJw,6457
303
299
  dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=_UZm37FVV4rhdd0So7HtcKbIgrSdAr5Vx-Uen_xizec,5459
304
300
  dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=ulDrWgwnhosbK0Mtt0yNS4E38QSKXSh6ermNt-3jUTs,44965
305
301
  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
302
+ dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=vcu1JRJ0-p_VB7HZfYkVf9d_yclazrcW1U7zHQltjcA,40935
307
303
  dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=S7ZSDVMX-N0XMaMgwFa1QG_RAi48BP432s9AqHw4PMM,4066
308
304
  dstack/_internal/server/background/tasks/process_volumes.py,sha256=_fMmkwLYsyX-kpW9pDrZVJvFTZEOPp0gpjyKBMW-zw0,5204
309
305
  dstack/_internal/server/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -412,7 +408,7 @@ dstack/_internal/server/schemas/backends.py,sha256=KC6ZunAW71OCEIE_LnPO-wScJKVFX
412
408
  dstack/_internal/server/schemas/common.py,sha256=FCt3EwntxkykIK8ykKATmJM_gq3X3js-f8Z5tYqdQqA,230
413
409
  dstack/_internal/server/schemas/files.py,sha256=3SW-aMv5eAL5Fs_N3isCSPc6xgjOkRQnA-Nf5UAplFE,120
414
410
  dstack/_internal/server/schemas/fleets.py,sha256=9JcKe8VQM6p705lsgrp0xO08aTC32R88BJah7vZ-LgM,1101
415
- dstack/_internal/server/schemas/gateways.py,sha256=JFKIoC937THftILhpIR-4k_qtflsQcRPlO4OH2v0P6g,1160
411
+ dstack/_internal/server/schemas/gateways.py,sha256=O6RSAcnNYw0t1NI8sQlWsvNfOmEKN2zwfoatbdj5oSA,1224
416
412
  dstack/_internal/server/schemas/gpus.py,sha256=z3Oa5w0KBdTy2gvDIelfnrFz-iZq7qygzK62EKyw2xc,1872
417
413
  dstack/_internal/server/schemas/instances.py,sha256=PQZ34rtCn2AVaoCuTcHOjENSbzVuVbucRPpDdNKoixA,1470
418
414
  dstack/_internal/server/schemas/logs.py,sha256=I4KaPgXiaYLWtovBchUiqK0wk-b7py-yTHKzhPH8tYc,453
@@ -429,7 +425,7 @@ dstack/_internal/server/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
429
425
  dstack/_internal/server/security/permissions.py,sha256=7lWM9jiNt-6cMms6t5g9Fn0H3B3-MEJ7gDCtL7xZ9Lg,8187
430
426
  dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
431
427
  dstack/_internal/server/services/config.py,sha256=yo8njslwfS7_blhbPPhOtzCMyg8N_mmFSw5aPvirSzw,10691
432
- dstack/_internal/server/services/docker.py,sha256=z4apNSdxJrv1ZQ_Mxj-56mzNA39qNZ_uILCdvboGGcg,5400
428
+ dstack/_internal/server/services/docker.py,sha256=DEEUFNYtyus4qDTBC33ujSZxl5wp8iKaKrpF2X-Bk88,5395
433
429
  dstack/_internal/server/services/files.py,sha256=LJYFRtIJwB-QL-FhIu1408oqVVfa2lPZZlaTuZMo6pw,2847
434
430
  dstack/_internal/server/services/fleets.py,sha256=B_LXk_inn0rIOwC6SejQuBgT8_C_e9QdCNN5pXH7Sx0,37095
435
431
  dstack/_internal/server/services/gpus.py,sha256=_CGqUsizWf_Bq-_JYcRkLg_yg4iKpsp-1_1m5MedBr0,14758
@@ -442,16 +438,16 @@ dstack/_internal/server/services/permissions.py,sha256=l7Ngdelmn65vjw13NcOdaC6lB
442
438
  dstack/_internal/server/services/placement.py,sha256=U-7z4kJ6ZyrCXzkDychWoOhniz19ooFwiNI2InoTLls,2420
443
439
  dstack/_internal/server/services/plugins.py,sha256=aOlqfTUiU2aZ5G4DUW2rY4959PqS2r9imo5pfU3NUww,3851
444
440
  dstack/_internal/server/services/probes.py,sha256=pdgtkOvBuvneUo4Gysg8_afibTf1wuWnrrcuAnOGBE0,357
445
- dstack/_internal/server/services/projects.py,sha256=qvbzEpvi52mOGfsLsLTgWGzg8VDNlaIXAvr_Lwx20AA,23334
441
+ dstack/_internal/server/services/projects.py,sha256=PZdMCi1PVu68c_rYfwJRk7hgM6ddkekxlG_IU_957QI,25276
446
442
  dstack/_internal/server/services/repos.py,sha256=ECl1cbpdzhTv1P3Y9IQmoWyHHF8iXFyL4s2drfwRDvg,9352
447
443
  dstack/_internal/server/services/resources.py,sha256=VRFOih_cMJdc0c2m9nSGsX8vWAJQV3M6N87aqS_JXfw,699
448
- dstack/_internal/server/services/runs.py,sha256=-RoBSmcau8n_8rvEH-yuORL7R9OaoO92VkLFFZOwcAk,47686
444
+ dstack/_internal/server/services/runs.py,sha256=cZPyGTR7_7l88XAbqXep-P7xcGOCHZhLrIj9ua4z1Bs,47818
449
445
  dstack/_internal/server/services/secrets.py,sha256=M7RS4X1-DIL0f7m6BBb3PhsrAbxwKUD3_pZEWRfR3sM,5567
450
446
  dstack/_internal/server/services/ssh.py,sha256=DT7U_8ON8o30-53WlJwjd5kVrKyt4KPgKeN63NW3P8U,2883
451
447
  dstack/_internal/server/services/users.py,sha256=L-COF4RjtwYSfnkGQefrSiEU0haTv0o1P2OuUdvMK8E,7378
452
448
  dstack/_internal/server/services/volumes.py,sha256=DBGIUsysAO7sQ6vb4mjhzO9XLdyQvtNujucxhGnkSsU,16682
453
- dstack/_internal/server/services/backends/__init__.py,sha256=dyUBoM39lijFTqrKwBn7Vms9NtTgr4Pz8rpLuXqzft8,13427
454
- dstack/_internal/server/services/backends/handlers.py,sha256=ZCTgyhw6QBcNqM2iNYiLJnRHe70I4rJZbBp5ShJW5_Y,3415
449
+ dstack/_internal/server/services/backends/__init__.py,sha256=xWHI-A24u9RE7H5I4A3e_JQyuQtp5pdKbU--ZyizrnU,13420
450
+ dstack/_internal/server/services/backends/handlers.py,sha256=Rz4QjqmmDGDzn6QbwxlJvV5oC6pE4PZN3FX0DVqnBHc,3539
455
451
  dstack/_internal/server/services/encryption/__init__.py,sha256=3kCw_cxC3-Un1OIofdW5Gqsm0ZCXXTlGz09cULBx_uc,3155
456
452
  dstack/_internal/server/services/encryption/keys/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
457
453
  dstack/_internal/server/services/encryption/keys/aes.py,sha256=2He1p2_Rg6hnCeLIGJo-Yfdsij7so_338oY49RXuL3Q,2276
@@ -524,11 +520,11 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
524
520
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
525
521
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
526
522
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
527
- dstack/_internal/server/statics/index.html,sha256=xzc8VT4KW7rPfpjT9H7PQgTz61-i4HRlSHqE5GpIjkE,11071
523
+ dstack/_internal/server/statics/index.html,sha256=zv7wlS5mh2aAps7sEhXTlCwp0UOsiqhsMiIEOhLxt2Q,11155
528
524
  dstack/_internal/server/statics/logo-notext.svg,sha256=Oth7XfcAeDJcaPdzNtDaqYuLU7mCB0JqNtxeyWb6Z3c,11231
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
525
+ dstack/_internal/server/statics/main-56191fbfe77f49b251de.css,sha256=1exsufAv8oyw_4fbdcDJ7CtyRdWFyf-Boxua8HiK81c,1456319
526
+ dstack/_internal/server/statics/main-c51afa7f243e24d3e446.js,sha256=StRTIpOyv0Wt1fPh6XtuUiRQx5dRsDsXDNrNCbp1PPg,6928035
527
+ dstack/_internal/server/statics/main-c51afa7f243e24d3e446.js.map,sha256=gKw2zgeA1icax9QkCOX5jfYFPGe60omyZDRZCrdPtgo,9190078
532
528
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
533
529
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
534
530
  dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
@@ -601,7 +597,6 @@ dstack/_internal/server/statics/assets/mstile-70x70.png,sha256=Uh-iXux5J5EkcBPRH
601
597
  dstack/_internal/server/statics/assets/yandex-browser-50x50.png,sha256=GGaavXItFc_V5P2G2_MTLFtGDMatissn8YkdBMyGv54,5403
602
598
  dstack/_internal/server/statics/assets/yandex-browser-manifest.json,sha256=wQcuGCfkNsSmCXGg2IwxcwdykLSIx7xL3Y_WtmYYLq0,147
603
599
  dstack/_internal/server/statics/static/media/entraID.d65d1f3e9486a8e56d24fc07b3230885.svg,sha256=_v0ZwN0Yi2FB4XNlplXWZ-jjOtFIFabQTcC2gyPIRE4,1302
604
- dstack/_internal/server/statics/static/media/github.1f7102513534c83a9d8d735d2b8c12a2.svg,sha256=mNW9cuKg4s5dYQv8ZMzPsYyLJgxUg4jYBTape-pIy8c,2179
605
600
  dstack/_internal/server/statics/static/media/google.b194b06fafd0a52aeb566922160ea514.svg,sha256=ft4tBpFOIPNWj-EcXicLUNgDafxFNlIlhtnMy7Zm4Mw,743
606
601
  dstack/_internal/server/statics/static/media/logo.f602feeb138844eda97c8cb641461448.svg,sha256=z1mS8Qo_NNRDObJ41uZfbZA0ZieZUVTnROuJjoiQabE,16373
607
602
  dstack/_internal/server/statics/static/media/okta.12f178e6873a1100965f2a4dbd18fcec.svg,sha256=KqFI05gQM135zC1plF1WBRF2F7CyKL7km97WKsZjAHI,319
@@ -620,7 +615,7 @@ dstack/_internal/utils/common.py,sha256=9PtlJwE7B4F70nL_iP1J4ky33bUeW7r73Np7GYvr
620
615
  dstack/_internal/utils/cron.py,sha256=_axJFBCuZwMXZN04YPSk_gMvrRv6gNiGqd5hITyIg9Y,127
621
616
  dstack/_internal/utils/crypto.py,sha256=2RTSyzePuwwqc1X2HO6lwcSFyZ2kujnqluoICQ2DLJQ,1462
622
617
  dstack/_internal/utils/dxf.py,sha256=wguK9s6-69kqSDZkxd1kFEr6VlH5ixvFRJxizyOuJ8I,3229
623
- dstack/_internal/utils/env.py,sha256=HRbIspHpKHh05fMZeV23-hrZoV6vVMuniefD08u6ey0,357
618
+ dstack/_internal/utils/env.py,sha256=mEtlkO0sBHL-YjnYrlR_jCGcNFehn4IESvDezKkQYYM,2455
624
619
  dstack/_internal/utils/event_loop.py,sha256=DO2ADtWfH2z8F2hBbg_EADSWzleQYGVZ9D1XYDpH-tk,880
625
620
  dstack/_internal/utils/files.py,sha256=3ILdDvPPv2_vSEHRhLI15PG0R03RnO2aq_sWXGWIvm0,2692
626
621
  dstack/_internal/utils/gpu.py,sha256=ZeWpy1nRLVh-FwBZdxbMoVjjCF0DWJlWfNoVgFhGx2w,1776
@@ -667,8 +662,8 @@ dstack/plugins/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
667
662
  dstack/plugins/builtin/rest_plugin/__init__.py,sha256=lgTsq8Z6Km2F2UhPRChVB4vDM5ZpWtdk1iB1aa20ypA,440
668
663
  dstack/plugins/builtin/rest_plugin/_models.py,sha256=9hgVuU6OGSxidar88XhQnNo9izYWeQvVH45ciErv-Es,1910
669
664
  dstack/plugins/builtin/rest_plugin/_plugin.py,sha256=h3r3Yc3h22i93fifPTgTm9Oojd1sN1O4DP7ZTV-kWpM,5386
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,,
665
+ dstack-0.19.29.dist-info/METADATA,sha256=HcciEQov78Oe3HcLD7vquMFJHimJXPOx_AANTEW33gM,20586
666
+ dstack-0.19.29.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
667
+ dstack-0.19.29.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
668
+ dstack-0.19.29.dist-info/licenses/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
669
+ dstack-0.19.29.dist-info/RECORD,,
File without changes
@@ -1,104 +0,0 @@
1
- import uuid
2
-
3
- import requests
4
- import yaml
5
-
6
- from dstack._internal.core.errors import BackendError
7
- from dstack._internal.core.models.instances import InstanceType
8
- from dstack._internal.utils.logging import get_logger
9
-
10
- logger = get_logger(__name__)
11
- REQUEST_TIMEOUT = 20
12
-
13
-
14
- class TensorDockAPIClient:
15
- def __init__(self, api_key: str, api_token: str):
16
- self.api_url = "https://marketplace.tensordock.com/api/v0".rstrip("/")
17
- self.api_key = api_key
18
- self.api_token = api_token
19
- self.s = requests.Session()
20
-
21
- def auth_test(self) -> bool:
22
- resp = self.s.post(
23
- self._url("/auth/test"),
24
- data={"api_key": self.api_key, "api_token": self.api_token},
25
- timeout=REQUEST_TIMEOUT,
26
- )
27
- resp.raise_for_status()
28
- return resp.json()["success"]
29
-
30
- def get_hostnode(self, hostnode_id: str) -> dict:
31
- logger.debug("Fetching hostnode %s", hostnode_id)
32
- resp = self.s.get(
33
- self._url(f"/client/deploy/hostnodes/{hostnode_id}"), timeout=REQUEST_TIMEOUT
34
- )
35
- resp.raise_for_status()
36
- data = resp.json()
37
- if not data["success"]:
38
- raise requests.HTTPError(data)
39
- return data["hostnode"]
40
-
41
- def deploy_single(self, instance_name: str, instance: InstanceType, cloudinit: dict) -> dict:
42
- hostnode = self.get_hostnode(instance.name)
43
- gpu = instance.resources.gpus[0]
44
- for gpu_model in hostnode["specs"]["gpu"].keys():
45
- if gpu_model.endswith(f"-{gpu.memory_mib // 1024}gb"):
46
- if gpu.name.lower() in gpu_model.lower():
47
- break
48
- else:
49
- raise ValueError(f"Can't find GPU on the hostnode: {gpu.name}")
50
- form = {
51
- "api_key": self.api_key,
52
- "api_token": self.api_token,
53
- "password": uuid.uuid4().hex, # we disable the password auth, but it's required
54
- "name": instance_name,
55
- "gpu_count": len(instance.resources.gpus),
56
- "gpu_model": gpu_model,
57
- "vcpus": instance.resources.cpus,
58
- "ram": instance.resources.memory_mib // 1024,
59
- "external_ports": "{%s}"
60
- % max(hostnode["networking"]["ports"]), # it's safer to use a higher port
61
- "internal_ports": "{22}",
62
- "hostnode": instance.name,
63
- "storage": round(instance.resources.disk.size_mib / 1024),
64
- "operating_system": "Ubuntu 22.04 LTS",
65
- "cloudinit_script": yaml.dump(cloudinit).replace("\n", "\\n"),
66
- }
67
- logger.debug(
68
- "Deploying instance hostnode=%s, cpus=%s, memory=%s, gpu=%sx %s",
69
- form["hostnode"],
70
- form["vcpus"],
71
- form["ram"],
72
- form["gpu_count"],
73
- form["gpu_model"],
74
- )
75
- resp = self.s.post(self._url("/client/deploy/single"), data=form, timeout=REQUEST_TIMEOUT)
76
- resp.raise_for_status()
77
- data = resp.json()
78
- if not data["success"]:
79
- raise requests.HTTPError(data)
80
- data["password"] = form["password"]
81
- return data
82
-
83
- def delete_single_if_exists(self, instance_id: str):
84
- logger.debug("Deleting instance %s", instance_id)
85
- resp = self.s.post(
86
- self._url("/client/delete/single"),
87
- data={
88
- "api_key": self.api_key,
89
- "api_token": self.api_token,
90
- "server": instance_id,
91
- },
92
- timeout=REQUEST_TIMEOUT,
93
- )
94
- try:
95
- data = resp.json()
96
- if "already terminated" in data.get("error", ""):
97
- return
98
- if not data.get("success"):
99
- raise BackendError(data)
100
- except ValueError: # json parsing error
101
- raise BackendError(resp.text)
102
-
103
- def _url(self, path):
104
- return f"{self.api_url}/{path.lstrip('/')}"
@@ -1,16 +0,0 @@
1
- from dstack._internal.core.backends.base.backend import Backend
2
- from dstack._internal.core.backends.tensordock.compute import TensorDockCompute
3
- from dstack._internal.core.backends.tensordock.models import TensorDockConfig
4
- from dstack._internal.core.models.backends.base import BackendType
5
-
6
-
7
- class TensorDockBackend(Backend):
8
- TYPE = BackendType.TENSORDOCK
9
- COMPUTE_CLASS = TensorDockCompute
10
-
11
- def __init__(self, config: TensorDockConfig):
12
- self.config = config
13
- self._compute = TensorDockCompute(self.config)
14
-
15
- def compute(self) -> TensorDockCompute:
16
- return self._compute