dstack 0.18.43__py3-none-any.whl → 0.19.0rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. dstack/_internal/cli/commands/gateway.py +15 -3
  2. dstack/_internal/cli/commands/logs.py +0 -22
  3. dstack/_internal/cli/commands/stats.py +8 -17
  4. dstack/_internal/cli/main.py +1 -5
  5. dstack/_internal/cli/services/configurators/fleet.py +4 -39
  6. dstack/_internal/cli/services/configurators/run.py +22 -20
  7. dstack/_internal/cli/services/profile.py +34 -83
  8. dstack/_internal/cli/utils/gateway.py +1 -1
  9. dstack/_internal/cli/utils/run.py +11 -0
  10. dstack/_internal/core/backends/__init__.py +56 -39
  11. dstack/_internal/core/backends/aws/__init__.py +0 -25
  12. dstack/_internal/core/backends/aws/auth.py +1 -10
  13. dstack/_internal/core/backends/aws/backend.py +26 -0
  14. dstack/_internal/core/backends/aws/compute.py +21 -45
  15. dstack/_internal/{server/services/backends/configurators/aws.py → core/backends/aws/configurator.py} +46 -85
  16. dstack/_internal/core/backends/aws/models.py +135 -0
  17. dstack/_internal/core/backends/aws/resources.py +1 -1
  18. dstack/_internal/core/backends/azure/__init__.py +0 -20
  19. dstack/_internal/core/backends/azure/auth.py +2 -11
  20. dstack/_internal/core/backends/azure/backend.py +21 -0
  21. dstack/_internal/core/backends/azure/compute.py +14 -28
  22. dstack/_internal/{server/services/backends/configurators/azure.py → core/backends/azure/configurator.py} +141 -210
  23. dstack/_internal/core/backends/azure/models.py +89 -0
  24. dstack/_internal/core/backends/base/__init__.py +0 -12
  25. dstack/_internal/core/backends/base/backend.py +18 -0
  26. dstack/_internal/core/backends/base/compute.py +153 -33
  27. dstack/_internal/core/backends/base/configurator.py +105 -0
  28. dstack/_internal/core/backends/base/models.py +14 -0
  29. dstack/_internal/core/backends/configurators.py +138 -0
  30. dstack/_internal/core/backends/cudo/__init__.py +0 -15
  31. dstack/_internal/core/backends/cudo/backend.py +16 -0
  32. dstack/_internal/core/backends/cudo/compute.py +8 -26
  33. dstack/_internal/core/backends/cudo/configurator.py +72 -0
  34. dstack/_internal/core/backends/cudo/models.py +37 -0
  35. dstack/_internal/core/backends/datacrunch/__init__.py +0 -15
  36. dstack/_internal/core/backends/datacrunch/backend.py +16 -0
  37. dstack/_internal/core/backends/datacrunch/compute.py +8 -25
  38. dstack/_internal/core/backends/datacrunch/configurator.py +66 -0
  39. dstack/_internal/core/backends/datacrunch/models.py +38 -0
  40. dstack/_internal/core/{models/backends/dstack.py → backends/dstack/models.py} +7 -7
  41. dstack/_internal/core/backends/gcp/__init__.py +0 -16
  42. dstack/_internal/core/backends/gcp/auth.py +2 -11
  43. dstack/_internal/core/backends/gcp/backend.py +17 -0
  44. dstack/_internal/core/backends/gcp/compute.py +14 -44
  45. dstack/_internal/{server/services/backends/configurators/gcp.py → core/backends/gcp/configurator.py} +46 -103
  46. dstack/_internal/core/backends/gcp/models.py +125 -0
  47. dstack/_internal/core/backends/kubernetes/__init__.py +0 -15
  48. dstack/_internal/core/backends/kubernetes/backend.py +16 -0
  49. dstack/_internal/core/backends/kubernetes/compute.py +16 -5
  50. dstack/_internal/core/backends/kubernetes/configurator.py +55 -0
  51. dstack/_internal/core/backends/kubernetes/models.py +72 -0
  52. dstack/_internal/core/backends/lambdalabs/__init__.py +0 -16
  53. dstack/_internal/core/backends/lambdalabs/backend.py +17 -0
  54. dstack/_internal/core/backends/lambdalabs/compute.py +7 -28
  55. dstack/_internal/core/backends/lambdalabs/configurator.py +82 -0
  56. dstack/_internal/core/backends/lambdalabs/models.py +37 -0
  57. dstack/_internal/core/backends/local/__init__.py +0 -13
  58. dstack/_internal/core/backends/local/backend.py +14 -0
  59. dstack/_internal/core/backends/local/compute.py +16 -2
  60. dstack/_internal/core/backends/models.py +128 -0
  61. dstack/_internal/core/backends/oci/__init__.py +0 -15
  62. dstack/_internal/core/backends/oci/auth.py +1 -5
  63. dstack/_internal/core/backends/oci/backend.py +16 -0
  64. dstack/_internal/core/backends/oci/compute.py +9 -23
  65. dstack/_internal/{server/services/backends/configurators/oci.py → core/backends/oci/configurator.py} +40 -85
  66. dstack/_internal/core/{models/backends/oci.py → backends/oci/models.py} +24 -25
  67. dstack/_internal/core/backends/oci/region.py +1 -1
  68. dstack/_internal/core/backends/runpod/__init__.py +0 -15
  69. dstack/_internal/core/backends/runpod/backend.py +16 -0
  70. dstack/_internal/core/backends/runpod/compute.py +28 -6
  71. dstack/_internal/core/backends/runpod/configurator.py +59 -0
  72. dstack/_internal/core/backends/runpod/models.py +54 -0
  73. dstack/_internal/core/backends/template/__init__.py +0 -0
  74. dstack/_internal/core/backends/tensordock/__init__.py +0 -15
  75. dstack/_internal/core/backends/tensordock/backend.py +16 -0
  76. dstack/_internal/core/backends/tensordock/compute.py +8 -27
  77. dstack/_internal/core/backends/tensordock/configurator.py +68 -0
  78. dstack/_internal/core/backends/tensordock/models.py +38 -0
  79. dstack/_internal/core/backends/vastai/__init__.py +0 -15
  80. dstack/_internal/core/backends/vastai/backend.py +16 -0
  81. dstack/_internal/core/backends/vastai/compute.py +2 -2
  82. dstack/_internal/core/backends/vastai/configurator.py +66 -0
  83. dstack/_internal/core/backends/vastai/models.py +37 -0
  84. dstack/_internal/core/backends/vultr/__init__.py +0 -15
  85. dstack/_internal/core/backends/vultr/backend.py +16 -0
  86. dstack/_internal/core/backends/vultr/compute.py +10 -24
  87. dstack/_internal/core/backends/vultr/configurator.py +64 -0
  88. dstack/_internal/core/backends/vultr/models.py +34 -0
  89. dstack/_internal/core/models/backends/__init__.py +0 -184
  90. dstack/_internal/core/models/backends/base.py +0 -19
  91. dstack/_internal/core/models/configurations.py +22 -16
  92. dstack/_internal/core/models/envs.py +4 -3
  93. dstack/_internal/core/models/fleets.py +17 -22
  94. dstack/_internal/core/models/gateways.py +3 -3
  95. dstack/_internal/core/models/instances.py +24 -0
  96. dstack/_internal/core/models/profiles.py +85 -45
  97. dstack/_internal/core/models/projects.py +1 -1
  98. dstack/_internal/core/models/repos/base.py +0 -5
  99. dstack/_internal/core/models/repos/local.py +3 -3
  100. dstack/_internal/core/models/repos/remote.py +26 -12
  101. dstack/_internal/core/models/repos/virtual.py +1 -1
  102. dstack/_internal/core/models/resources.py +45 -76
  103. dstack/_internal/core/models/runs.py +21 -19
  104. dstack/_internal/core/models/volumes.py +1 -3
  105. dstack/_internal/core/services/profiles.py +7 -16
  106. dstack/_internal/core/services/repos.py +0 -4
  107. dstack/_internal/server/app.py +11 -4
  108. dstack/_internal/server/background/__init__.py +10 -0
  109. dstack/_internal/server/background/tasks/process_gateways.py +4 -8
  110. dstack/_internal/server/background/tasks/process_instances.py +14 -9
  111. dstack/_internal/server/background/tasks/process_metrics.py +1 -1
  112. dstack/_internal/server/background/tasks/process_placement_groups.py +5 -1
  113. dstack/_internal/server/background/tasks/process_prometheus_metrics.py +135 -0
  114. dstack/_internal/server/background/tasks/process_running_jobs.py +80 -24
  115. dstack/_internal/server/background/tasks/process_runs.py +1 -0
  116. dstack/_internal/server/background/tasks/process_submitted_jobs.py +20 -38
  117. dstack/_internal/server/background/tasks/process_volumes.py +5 -2
  118. dstack/_internal/server/migrations/versions/60e444118b6d_add_jobprometheusmetrics.py +40 -0
  119. dstack/_internal/server/migrations/versions/7bc2586e8b9e_make_instancemodel_pool_id_optional.py +36 -0
  120. dstack/_internal/server/migrations/versions/98d1b92988bc_add_jobterminationreason_terminated_due_.py +140 -0
  121. dstack/_internal/server/migrations/versions/bc8ca4a505c6_store_backendtype_as_string.py +171 -0
  122. dstack/_internal/server/models.py +59 -9
  123. dstack/_internal/server/routers/backends.py +14 -23
  124. dstack/_internal/server/routers/instances.py +3 -4
  125. dstack/_internal/server/routers/metrics.py +31 -10
  126. dstack/_internal/server/routers/prometheus.py +36 -0
  127. dstack/_internal/server/routers/repos.py +1 -2
  128. dstack/_internal/server/routers/runs.py +13 -59
  129. dstack/_internal/server/schemas/gateways.py +14 -23
  130. dstack/_internal/server/schemas/projects.py +7 -2
  131. dstack/_internal/server/schemas/repos.py +2 -38
  132. dstack/_internal/server/schemas/runner.py +1 -0
  133. dstack/_internal/server/schemas/runs.py +1 -24
  134. dstack/_internal/server/security/permissions.py +1 -1
  135. dstack/_internal/server/services/backends/__init__.py +85 -158
  136. dstack/_internal/server/services/config.py +53 -567
  137. dstack/_internal/server/services/fleets.py +9 -103
  138. dstack/_internal/server/services/gateways/__init__.py +13 -4
  139. dstack/_internal/server/services/{pools.py → instances.py} +22 -329
  140. dstack/_internal/server/services/jobs/__init__.py +9 -6
  141. dstack/_internal/server/services/jobs/configurators/base.py +25 -1
  142. dstack/_internal/server/services/jobs/configurators/dev.py +9 -1
  143. dstack/_internal/server/services/jobs/configurators/extensions/cursor.py +42 -0
  144. dstack/_internal/server/services/metrics.py +131 -72
  145. dstack/_internal/server/services/offers.py +1 -1
  146. dstack/_internal/server/services/projects.py +23 -14
  147. dstack/_internal/server/services/prometheus.py +245 -0
  148. dstack/_internal/server/services/runner/client.py +14 -3
  149. dstack/_internal/server/services/runs.py +67 -31
  150. dstack/_internal/server/services/volumes.py +9 -4
  151. dstack/_internal/server/settings.py +3 -0
  152. dstack/_internal/server/statics/index.html +1 -1
  153. dstack/_internal/server/statics/{main-fe8fd9db55df8d10e648.js → main-4fd5a4770eff59325ee3.js} +68 -15
  154. dstack/_internal/server/statics/{main-fe8fd9db55df8d10e648.js.map → main-4fd5a4770eff59325ee3.js.map} +1 -1
  155. dstack/_internal/server/statics/{main-7510e71dfa9749a4e70e.css → main-da9f8c06a69c20dac23e.css} +1 -1
  156. dstack/_internal/server/statics/static/media/entraID.d65d1f3e9486a8e56d24fc07b3230885.svg +9 -0
  157. dstack/_internal/server/testing/common.py +75 -32
  158. dstack/_internal/utils/json_schema.py +6 -0
  159. dstack/_internal/utils/ssh.py +2 -1
  160. dstack/api/__init__.py +4 -0
  161. dstack/api/_public/__init__.py +16 -20
  162. dstack/api/_public/backends.py +1 -1
  163. dstack/api/_public/repos.py +36 -36
  164. dstack/api/_public/runs.py +170 -83
  165. dstack/api/server/__init__.py +11 -13
  166. dstack/api/server/_backends.py +12 -16
  167. dstack/api/server/_fleets.py +15 -55
  168. dstack/api/server/_gateways.py +3 -14
  169. dstack/api/server/_repos.py +1 -4
  170. dstack/api/server/_runs.py +21 -96
  171. dstack/api/server/_volumes.py +10 -5
  172. dstack/api/utils.py +3 -0
  173. dstack/version.py +1 -1
  174. {dstack-0.18.43.dist-info → dstack-0.19.0rc1.dist-info}/METADATA +10 -1
  175. {dstack-0.18.43.dist-info → dstack-0.19.0rc1.dist-info}/RECORD +229 -206
  176. tests/_internal/cli/services/configurators/test_profile.py +6 -6
  177. tests/_internal/core/backends/aws/test_configurator.py +35 -0
  178. tests/_internal/core/backends/aws/test_resources.py +1 -1
  179. tests/_internal/core/backends/azure/test_configurator.py +61 -0
  180. tests/_internal/core/backends/cudo/__init__.py +0 -0
  181. tests/_internal/core/backends/cudo/test_configurator.py +37 -0
  182. tests/_internal/core/backends/datacrunch/__init__.py +0 -0
  183. tests/_internal/core/backends/datacrunch/test_configurator.py +17 -0
  184. tests/_internal/core/backends/gcp/test_configurator.py +42 -0
  185. tests/_internal/core/backends/kubernetes/test_configurator.py +43 -0
  186. tests/_internal/core/backends/lambdalabs/__init__.py +0 -0
  187. tests/_internal/core/backends/lambdalabs/test_configurator.py +38 -0
  188. tests/_internal/core/backends/oci/test_configurator.py +55 -0
  189. tests/_internal/core/backends/runpod/__init__.py +0 -0
  190. tests/_internal/core/backends/runpod/test_configurator.py +33 -0
  191. tests/_internal/core/backends/tensordock/__init__.py +0 -0
  192. tests/_internal/core/backends/tensordock/test_configurator.py +38 -0
  193. tests/_internal/core/backends/vastai/__init__.py +0 -0
  194. tests/_internal/core/backends/vastai/test_configurator.py +33 -0
  195. tests/_internal/core/backends/vultr/__init__.py +0 -0
  196. tests/_internal/core/backends/vultr/test_configurator.py +33 -0
  197. tests/_internal/server/background/tasks/test_process_gateways.py +4 -0
  198. tests/_internal/server/background/tasks/test_process_instances.py +49 -48
  199. tests/_internal/server/background/tasks/test_process_metrics.py +0 -3
  200. tests/_internal/server/background/tasks/test_process_placement_groups.py +2 -0
  201. tests/_internal/server/background/tasks/test_process_prometheus_metrics.py +186 -0
  202. tests/_internal/server/background/tasks/test_process_running_jobs.py +123 -19
  203. tests/_internal/server/background/tasks/test_process_runs.py +8 -22
  204. tests/_internal/server/background/tasks/test_process_submitted_jobs.py +3 -40
  205. tests/_internal/server/background/tasks/test_process_submitted_volumes.py +2 -0
  206. tests/_internal/server/background/tasks/test_process_terminating_jobs.py +10 -15
  207. tests/_internal/server/routers/test_backends.py +6 -764
  208. tests/_internal/server/routers/test_fleets.py +2 -26
  209. tests/_internal/server/routers/test_gateways.py +27 -3
  210. tests/_internal/server/routers/test_instances.py +0 -10
  211. tests/_internal/server/routers/test_metrics.py +42 -0
  212. tests/_internal/server/routers/test_projects.py +56 -0
  213. tests/_internal/server/routers/test_prometheus.py +333 -0
  214. tests/_internal/server/routers/test_repos.py +0 -15
  215. tests/_internal/server/routers/test_runs.py +83 -275
  216. tests/_internal/server/routers/test_volumes.py +2 -3
  217. tests/_internal/server/services/backends/__init__.py +0 -0
  218. tests/_internal/server/services/jobs/configurators/test_task.py +35 -0
  219. tests/_internal/server/services/test_config.py +7 -4
  220. tests/_internal/server/services/test_fleets.py +1 -4
  221. tests/_internal/server/services/{test_pools.py → test_instances.py} +11 -49
  222. tests/_internal/server/services/test_metrics.py +167 -0
  223. tests/_internal/server/services/test_repos.py +1 -14
  224. tests/_internal/server/services/test_runs.py +0 -4
  225. dstack/_internal/cli/commands/pool.py +0 -581
  226. dstack/_internal/cli/commands/run.py +0 -75
  227. dstack/_internal/core/backends/aws/config.py +0 -18
  228. dstack/_internal/core/backends/azure/config.py +0 -12
  229. dstack/_internal/core/backends/base/config.py +0 -5
  230. dstack/_internal/core/backends/cudo/config.py +0 -9
  231. dstack/_internal/core/backends/datacrunch/config.py +0 -9
  232. dstack/_internal/core/backends/gcp/config.py +0 -22
  233. dstack/_internal/core/backends/kubernetes/config.py +0 -6
  234. dstack/_internal/core/backends/lambdalabs/config.py +0 -9
  235. dstack/_internal/core/backends/nebius/__init__.py +0 -15
  236. dstack/_internal/core/backends/nebius/api_client.py +0 -319
  237. dstack/_internal/core/backends/nebius/compute.py +0 -220
  238. dstack/_internal/core/backends/nebius/config.py +0 -6
  239. dstack/_internal/core/backends/nebius/types.py +0 -37
  240. dstack/_internal/core/backends/oci/config.py +0 -6
  241. dstack/_internal/core/backends/runpod/config.py +0 -9
  242. dstack/_internal/core/backends/tensordock/config.py +0 -9
  243. dstack/_internal/core/backends/vastai/config.py +0 -6
  244. dstack/_internal/core/backends/vultr/config.py +0 -9
  245. dstack/_internal/core/models/backends/aws.py +0 -86
  246. dstack/_internal/core/models/backends/azure.py +0 -68
  247. dstack/_internal/core/models/backends/cudo.py +0 -43
  248. dstack/_internal/core/models/backends/datacrunch.py +0 -44
  249. dstack/_internal/core/models/backends/gcp.py +0 -67
  250. dstack/_internal/core/models/backends/kubernetes.py +0 -40
  251. dstack/_internal/core/models/backends/lambdalabs.py +0 -43
  252. dstack/_internal/core/models/backends/nebius.py +0 -54
  253. dstack/_internal/core/models/backends/runpod.py +0 -40
  254. dstack/_internal/core/models/backends/tensordock.py +0 -44
  255. dstack/_internal/core/models/backends/vastai.py +0 -43
  256. dstack/_internal/core/models/backends/vultr.py +0 -40
  257. dstack/_internal/core/models/pools.py +0 -43
  258. dstack/_internal/server/routers/pools.py +0 -142
  259. dstack/_internal/server/schemas/pools.py +0 -38
  260. dstack/_internal/server/services/backends/configurators/base.py +0 -72
  261. dstack/_internal/server/services/backends/configurators/cudo.py +0 -87
  262. dstack/_internal/server/services/backends/configurators/datacrunch.py +0 -79
  263. dstack/_internal/server/services/backends/configurators/kubernetes.py +0 -63
  264. dstack/_internal/server/services/backends/configurators/lambdalabs.py +0 -98
  265. dstack/_internal/server/services/backends/configurators/nebius.py +0 -85
  266. dstack/_internal/server/services/backends/configurators/runpod.py +0 -97
  267. dstack/_internal/server/services/backends/configurators/tensordock.py +0 -82
  268. dstack/_internal/server/services/backends/configurators/vastai.py +0 -80
  269. dstack/_internal/server/services/backends/configurators/vultr.py +0 -80
  270. dstack/api/_public/pools.py +0 -41
  271. dstack/api/_public/resources.py +0 -105
  272. dstack/api/server/_pools.py +0 -63
  273. tests/_internal/server/routers/test_pools.py +0 -612
  274. /dstack/_internal/{server/services/backends/configurators → core/backends/dstack}/__init__.py +0 -0
  275. {dstack-0.18.43.dist-info → dstack-0.19.0rc1.dist-info}/LICENSE.md +0 -0
  276. {dstack-0.18.43.dist-info → dstack-0.19.0rc1.dist-info}/WHEEL +0 -0
  277. {dstack-0.18.43.dist-info → dstack-0.19.0rc1.dist-info}/entry_points.txt +0 -0
  278. {dstack-0.18.43.dist-info → dstack-0.19.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,6 +0,0 @@
1
- from dstack._internal.core.backends.base.config import BackendConfig
2
- from dstack._internal.core.models.backends.vastai import AnyVastAICreds, VastAIStoredConfig
3
-
4
-
5
- class VastAIConfig(VastAIStoredConfig, BackendConfig):
6
- creds: AnyVastAICreds
@@ -1,9 +0,0 @@
1
- from dstack._internal.core.backends.base.config import BackendConfig
2
- from dstack._internal.core.models.backends.vultr import (
3
- AnyVultrCreds,
4
- VultrStoredConfig,
5
- )
6
-
7
-
8
- class VultrConfig(VultrStoredConfig, BackendConfig):
9
- creds: AnyVultrCreds
@@ -1,86 +0,0 @@
1
- from typing import Dict
2
-
3
- from pydantic import Field
4
- from typing_extensions import Annotated, List, Literal, Optional, Union
5
-
6
- from dstack._internal.core.models.backends.base import ConfigMultiElement
7
- from dstack._internal.core.models.common import CoreModel
8
-
9
-
10
- class AWSOSImage(CoreModel):
11
- name: Annotated[str, Field(description="The AMI name")]
12
- owner: Annotated[
13
- str,
14
- Field(regex=r"^(\d{12}|self)$", description="The AMI owner, account ID or `self`"),
15
- ] = "self"
16
- user: Annotated[str, Field(description="The OS user for provisioning")]
17
-
18
-
19
- class AWSOSImageConfig(CoreModel):
20
- cpu: Annotated[Optional[AWSOSImage], Field(description="The AMI used for CPU instances")] = (
21
- None
22
- )
23
- nvidia: Annotated[
24
- Optional[AWSOSImage], Field(description="The AMI used for NVIDIA GPU instances")
25
- ] = None
26
-
27
-
28
- class AWSConfigInfo(CoreModel):
29
- type: Literal["aws"] = "aws"
30
- regions: Optional[List[str]] = None
31
- vpc_name: Optional[str] = None
32
- vpc_ids: Optional[Dict[str, str]] = None
33
- default_vpcs: Optional[bool] = None
34
- public_ips: Optional[bool] = None
35
- iam_instance_profile: Optional[str] = None
36
- tags: Optional[Dict[str, str]] = None
37
- os_images: Optional[AWSOSImageConfig] = None
38
-
39
-
40
- class AWSAccessKeyCreds(CoreModel):
41
- type: Annotated[Literal["access_key"], Field(description="The type of credentials")] = (
42
- "access_key"
43
- )
44
- access_key: Annotated[str, Field(description="The access key")]
45
- secret_key: Annotated[str, Field(description="The secret key")]
46
-
47
-
48
- class AWSDefaultCreds(CoreModel):
49
- type: Annotated[Literal["default"], Field(description="The type of credentials")] = "default"
50
-
51
-
52
- AnyAWSCreds = Union[AWSAccessKeyCreds, AWSDefaultCreds]
53
-
54
-
55
- class AWSCreds(CoreModel):
56
- __root__: AnyAWSCreds = Field(..., discriminator="type")
57
-
58
-
59
- class AWSConfigInfoWithCreds(AWSConfigInfo):
60
- creds: AnyAWSCreds
61
-
62
-
63
- AnyAWSConfigInfo = Union[AWSConfigInfo, AWSConfigInfoWithCreds]
64
-
65
-
66
- class AWSConfigInfoWithCredsPartial(CoreModel):
67
- type: Literal["aws"] = "aws"
68
- creds: Optional[AnyAWSCreds]
69
- regions: Optional[List[str]]
70
- vpc_name: Optional[str]
71
- vpc_ids: Optional[Dict[str, str]]
72
- default_vpcs: Optional[bool]
73
- public_ips: Optional[bool]
74
- iam_instance_profile: Optional[str]
75
- tags: Optional[Dict[str, str]]
76
- os_images: Optional["AWSOSImageConfig"]
77
-
78
-
79
- class AWSConfigValues(CoreModel):
80
- type: Literal["aws"] = "aws"
81
- default_creds: bool = False
82
- regions: Optional[ConfigMultiElement]
83
-
84
-
85
- class AWSStoredConfig(AWSConfigInfo):
86
- pass
@@ -1,68 +0,0 @@
1
- from typing import Dict
2
-
3
- from pydantic import Field
4
- from typing_extensions import Annotated, List, Literal, Optional, Union
5
-
6
- from dstack._internal.core.models.backends.base import ConfigElement, ConfigMultiElement
7
- from dstack._internal.core.models.common import CoreModel
8
-
9
-
10
- class AzureConfigInfo(CoreModel):
11
- type: Literal["azure"] = "azure"
12
- tenant_id: str
13
- subscription_id: str
14
- resource_group: Optional[str] = None
15
- locations: Optional[List[str]] = None
16
- vpc_ids: Optional[Dict[str, str]] = None
17
- public_ips: Optional[bool] = None
18
- tags: Optional[Dict[str, str]] = None
19
-
20
-
21
- class AzureClientCreds(CoreModel):
22
- type: Annotated[Literal["client"], Field(description="The type of credentials")] = "client"
23
- client_id: Annotated[str, Field(description="The client ID")]
24
- client_secret: Annotated[str, Field(description="The client secret")]
25
- # if tenant_id is missing, it will be populated from config info
26
- tenant_id: Optional[str]
27
-
28
-
29
- class AzureDefaultCreds(CoreModel):
30
- type: Annotated[Literal["default"], Field(description="The type of credentials")] = "default"
31
-
32
-
33
- AnyAzureCreds = Union[AzureClientCreds, AzureDefaultCreds]
34
-
35
-
36
- class AzureCreds(CoreModel):
37
- __root__: AnyAzureCreds = Field(..., discriminator="type")
38
-
39
-
40
- class AzureConfigInfoWithCreds(AzureConfigInfo):
41
- creds: AnyAzureCreds
42
-
43
-
44
- AnyAzureConfigInfo = Union[AzureConfigInfo, AzureConfigInfoWithCreds]
45
-
46
-
47
- class AzureConfigInfoWithCredsPartial(CoreModel):
48
- type: Literal["azure"] = "azure"
49
- creds: Optional[AnyAzureCreds]
50
- tenant_id: Optional[str]
51
- subscription_id: Optional[str]
52
- resource_group: Optional[str]
53
- locations: Optional[List[str]]
54
- vpc_ids: Optional[Dict[str, str]]
55
- public_ips: Optional[bool]
56
- tags: Optional[Dict[str, str]]
57
-
58
-
59
- class AzureConfigValues(CoreModel):
60
- type: Literal["azure"] = "azure"
61
- default_creds: bool = False
62
- tenant_id: Optional[ConfigElement]
63
- subscription_id: Optional[ConfigElement]
64
- locations: Optional[ConfigMultiElement]
65
-
66
-
67
- class AzureStoredConfig(AzureConfigInfo):
68
- resource_group: str = ""
@@ -1,43 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from pydantic.fields import Field
4
- from typing_extensions import Annotated, Literal
5
-
6
- from dstack._internal.core.models.backends.base import ConfigElement, ConfigMultiElement
7
- from dstack._internal.core.models.common import CoreModel
8
-
9
-
10
- class CudoConfigInfo(CoreModel):
11
- type: Literal["cudo"] = "cudo"
12
- project_id: str
13
- regions: Optional[List[str]] = None
14
-
15
-
16
- class CudoStoredConfig(CudoConfigInfo):
17
- pass
18
-
19
-
20
- class CudoAPIKeyCreds(CoreModel):
21
- type: Annotated[Literal["api_key"], Field(description="The type of credentials")] = "api_key"
22
- api_key: Annotated[str, Field(description="The API key")]
23
-
24
-
25
- AnyCudoCreds = CudoAPIKeyCreds
26
- CudoCreds = AnyCudoCreds
27
-
28
-
29
- class CudoConfigInfoWithCreds(CudoConfigInfo):
30
- creds: AnyCudoCreds
31
-
32
-
33
- class CudoConfigInfoWithCredsPartial(CoreModel):
34
- type: Literal["cudo"] = "cudo"
35
- creds: Optional[AnyCudoCreds]
36
- project_id: Optional[str]
37
- regions: Optional[List[str]]
38
-
39
-
40
- class CudoConfigValues(CoreModel):
41
- type: Literal["cudo"] = "cudo"
42
- regions: Optional[ConfigMultiElement]
43
- project_id: Optional[ConfigElement]
@@ -1,44 +0,0 @@
1
- from pydantic.fields import Field
2
- from typing_extensions import Annotated, List, Literal, Optional, Union
3
-
4
- from dstack._internal.core.models.backends.base import ConfigMultiElement
5
- from dstack._internal.core.models.common import CoreModel
6
-
7
-
8
- class DataCrunchConfigInfo(CoreModel):
9
- type: Literal["datacrunch"] = "datacrunch"
10
- regions: Optional[List[str]] = None
11
-
12
-
13
- class DataCrunchAPIKeyCreds(CoreModel):
14
- type: Annotated[Literal["api_key"], Field(description="The type of credentials")] = "api_key"
15
- client_id: Annotated[str, Field(description="The client ID")]
16
- client_secret: Annotated[str, Field(description="The client secret")]
17
-
18
-
19
- AnyDataCrunchCreds = DataCrunchAPIKeyCreds
20
-
21
-
22
- DataCrunchCreds = AnyDataCrunchCreds
23
-
24
-
25
- class DataCrunchConfigInfoWithCreds(DataCrunchConfigInfo):
26
- creds: AnyDataCrunchCreds
27
-
28
-
29
- AnyDataCrunchConfigInfo = Union[DataCrunchConfigInfo, DataCrunchConfigInfoWithCreds]
30
-
31
-
32
- class DataCrunchConfigInfoWithCredsPartial(CoreModel):
33
- type: Literal["datacrunch"] = "datacrunch"
34
- creds: Optional[AnyDataCrunchCreds]
35
- regions: Optional[List[str]]
36
-
37
-
38
- class DataCrunchConfigValues(CoreModel):
39
- type: Literal["datacrunch"] = "datacrunch"
40
- regions: Optional[ConfigMultiElement]
41
-
42
-
43
- class DataCrunchStoredConfig(DataCrunchConfigInfo):
44
- pass
@@ -1,67 +0,0 @@
1
- from typing import Dict, List, Optional, Union
2
-
3
- from pydantic import Field
4
- from typing_extensions import Literal
5
-
6
- from dstack._internal.core.models.backends.base import ConfigElement, ConfigMultiElement
7
- from dstack._internal.core.models.common import CoreModel
8
-
9
-
10
- class GCPConfigInfo(CoreModel):
11
- type: Literal["gcp"] = "gcp"
12
- project_id: str
13
- regions: Optional[List[str]] = None
14
- vpc_name: Optional[str] = None
15
- vpc_project_id: Optional[str] = None
16
- public_ips: Optional[bool] = None
17
- nat_check: Optional[bool] = None
18
- vm_service_account: Optional[str] = None
19
- tags: Optional[Dict[str, str]] = None
20
-
21
-
22
- class GCPServiceAccountCreds(CoreModel):
23
- type: Literal["service_account"] = "service_account"
24
- filename: str
25
- data: str
26
-
27
-
28
- class GCPDefaultCreds(CoreModel):
29
- type: Literal["default"] = "default"
30
-
31
-
32
- AnyGCPCreds = Union[GCPServiceAccountCreds, GCPDefaultCreds]
33
-
34
-
35
- class GCPCreds(CoreModel):
36
- __root__: AnyGCPCreds = Field(..., discriminator="type")
37
-
38
-
39
- class GCPConfigInfoWithCreds(GCPConfigInfo):
40
- creds: AnyGCPCreds
41
-
42
-
43
- AnyGCPConfigInfo = Union[GCPConfigInfo, GCPConfigInfoWithCreds]
44
-
45
-
46
- class GCPConfigInfoWithCredsPartial(CoreModel):
47
- type: Literal["gcp"] = "gcp"
48
- creds: Optional[AnyGCPCreds]
49
- project_id: Optional[str]
50
- regions: Optional[List[str]]
51
- vpc_name: Optional[str] = None
52
- vpc_project_id: Optional[str] = None
53
- public_ips: Optional[bool]
54
- nat_check: Optional[bool] = None
55
- vm_service_account: Optional[str] = None
56
- tags: Optional[Dict[str, str]] = None
57
-
58
-
59
- class GCPConfigValues(CoreModel):
60
- type: Literal["gcp"] = "gcp"
61
- default_creds: bool = False
62
- project_id: Optional[ConfigElement]
63
- regions: Optional[ConfigMultiElement]
64
-
65
-
66
- class GCPStoredConfig(GCPConfigInfo):
67
- pass
@@ -1,40 +0,0 @@
1
- from pydantic.fields import Field
2
- from typing_extensions import Annotated, Literal, Optional, Union
3
-
4
- from dstack._internal.core.models.common import CoreModel
5
-
6
-
7
- class KubernetesNetworkingConfig(CoreModel):
8
- ssh_host: Annotated[Optional[str], Field(description="The external IP address of any node")]
9
- ssh_port: Annotated[
10
- Optional[int], Field(description="Any port accessible outside of the cluster")
11
- ]
12
-
13
-
14
- class KubernetesConfigInfo(CoreModel):
15
- type: Literal["kubernetes"] = "kubernetes"
16
- networking: KubernetesNetworkingConfig
17
-
18
-
19
- class KubeconfigConfig(CoreModel):
20
- filename: str
21
- data: str
22
-
23
-
24
- class KubernetesConfigInfoWithCreds(KubernetesConfigInfo):
25
- kubeconfig: KubeconfigConfig
26
-
27
-
28
- AnyKubernetesConfigInfo = Union[KubernetesConfigInfo, KubernetesConfigInfoWithCreds]
29
-
30
-
31
- class KubernetesConfigInfoWithCredsPartial(KubernetesConfigInfoWithCreds):
32
- pass
33
-
34
-
35
- class KubernetesConfigValues(CoreModel):
36
- type: Literal["kubernetes"] = "kubernetes"
37
-
38
-
39
- class KubernetesStoredConfig(KubernetesConfigInfoWithCreds):
40
- pass
@@ -1,43 +0,0 @@
1
- from pydantic.fields import Field
2
- from typing_extensions import Annotated, List, Literal, Optional, Union
3
-
4
- from dstack._internal.core.models.backends.base import ConfigMultiElement
5
- from dstack._internal.core.models.common import CoreModel
6
-
7
-
8
- class LambdaConfigInfo(CoreModel):
9
- type: Literal["lambda"] = "lambda"
10
- regions: Optional[List[str]] = None
11
-
12
-
13
- class LambdaAPIKeyCreds(CoreModel):
14
- type: Annotated[Literal["api_key"], Field(description="The type of credentials")] = "api_key"
15
- api_key: Annotated[str, Field(description="The API key")]
16
-
17
-
18
- AnyLambdaCreds = LambdaAPIKeyCreds
19
-
20
-
21
- LambdaCreds = AnyLambdaCreds
22
-
23
-
24
- class LambdaConfigInfoWithCreds(LambdaConfigInfo):
25
- creds: AnyLambdaCreds
26
-
27
-
28
- AnyLambdaConfigInfo = Union[LambdaConfigInfo, LambdaConfigInfoWithCreds]
29
-
30
-
31
- class LambdaConfigInfoWithCredsPartial(CoreModel):
32
- type: Literal["lambda"] = "lambda"
33
- creds: Optional[AnyLambdaCreds]
34
- regions: Optional[List[str]]
35
-
36
-
37
- class LambdaConfigValues(CoreModel):
38
- type: Literal["lambda"] = "lambda"
39
- regions: Optional[ConfigMultiElement]
40
-
41
-
42
- class LambdaStoredConfig(LambdaConfigInfo):
43
- pass
@@ -1,54 +0,0 @@
1
- from typing import List, Optional, Union
2
-
3
- from typing_extensions import Literal
4
-
5
- from dstack._internal.core.models.backends.base import ConfigElement, ConfigMultiElement
6
- from dstack._internal.core.models.common import CoreModel
7
-
8
-
9
- class NebiusConfigInfo(CoreModel):
10
- type: Literal["nebius"] = "nebius"
11
- cloud_id: str
12
- folder_id: str
13
- network_id: str
14
- regions: Optional[List[str]] = None
15
-
16
-
17
- class NebiusServiceAccountCreds(CoreModel):
18
- type: Literal["service_account"] = "service_account"
19
- filename: str
20
- data: str
21
-
22
-
23
- AnyNebiusCreds = NebiusServiceAccountCreds
24
-
25
-
26
- NebiusCreds = AnyNebiusCreds
27
-
28
-
29
- class NebiusConfigInfoWithCreds(NebiusConfigInfo):
30
- creds: AnyNebiusCreds
31
-
32
-
33
- AnyNebiusConfigInfo = Union[NebiusConfigInfo, NebiusConfigInfoWithCreds]
34
-
35
-
36
- class NebiusConfigInfoWithCredsPartial(CoreModel):
37
- type: Literal["nebius"] = "nebius"
38
- creds: Optional[AnyNebiusCreds]
39
- cloud_id: Optional[str]
40
- folder_id: Optional[str]
41
- network_id: Optional[str]
42
- regions: Optional[List[str]]
43
-
44
-
45
- class NebiusConfigValues(CoreModel):
46
- type: Literal["nebius"] = "nebius"
47
- cloud_id: Optional[ConfigElement]
48
- folder_id: Optional[ConfigElement]
49
- network_id: Optional[ConfigElement]
50
- regions: Optional[ConfigMultiElement]
51
-
52
-
53
- class NebiusStoredConfig(NebiusConfigInfo):
54
- pass
@@ -1,40 +0,0 @@
1
- from typing import Annotated, List, Optional
2
-
3
- from pydantic import Field
4
- from typing_extensions import Literal
5
-
6
- from dstack._internal.core.models.backends.base import ConfigMultiElement
7
- from dstack._internal.core.models.common import CoreModel
8
-
9
-
10
- class RunpodConfigInfo(CoreModel):
11
- type: Literal["runpod"] = "runpod"
12
- regions: Optional[List[str]] = None
13
-
14
-
15
- class RunpodStoredConfig(RunpodConfigInfo):
16
- pass
17
-
18
-
19
- class RunpodAPIKeyCreds(CoreModel):
20
- type: Literal["api_key"] = "api_key"
21
- api_key: Annotated[str, Field(description="The API key")]
22
-
23
-
24
- AnyRunpodCreds = RunpodAPIKeyCreds
25
- RunpodCreds = AnyRunpodCreds
26
-
27
-
28
- class RunpodConfigInfoWithCreds(RunpodConfigInfo):
29
- creds: AnyRunpodCreds
30
-
31
-
32
- class RunpodConfigInfoWithCredsPartial(CoreModel):
33
- type: Literal["runpod"] = "runpod"
34
- creds: Optional[AnyRunpodCreds]
35
- regions: Optional[List[str]]
36
-
37
-
38
- class RunpodConfigValues(CoreModel):
39
- type: Literal["runpod"] = "runpod"
40
- regions: Optional[ConfigMultiElement]
@@ -1,44 +0,0 @@
1
- from pydantic.fields import Field
2
- from typing_extensions import Annotated, List, Literal, Optional, Union
3
-
4
- from dstack._internal.core.models.backends.base import ConfigMultiElement
5
- from dstack._internal.core.models.common import CoreModel
6
-
7
-
8
- class TensorDockConfigInfo(CoreModel):
9
- type: Literal["tensordock"] = "tensordock"
10
- regions: Optional[List[str]] = None
11
-
12
-
13
- class TensorDockAPIKeyCreds(CoreModel):
14
- type: Annotated[Literal["api_key"], Field(description="The type of credentials")] = "api_key"
15
- api_key: Annotated[str, Field(description="The API key")]
16
- api_token: Annotated[str, Field(description="The API token")]
17
-
18
-
19
- AnyTensorDockCreds = TensorDockAPIKeyCreds
20
-
21
-
22
- TensorDockCreds = AnyTensorDockCreds
23
-
24
-
25
- class TensorDockConfigInfoWithCreds(TensorDockConfigInfo):
26
- creds: AnyTensorDockCreds
27
-
28
-
29
- AnyTensorDockConfigInfo = Union[TensorDockConfigInfo, TensorDockConfigInfoWithCreds]
30
-
31
-
32
- class TensorDockConfigInfoWithCredsPartial(CoreModel):
33
- type: Literal["tensordock"] = "tensordock"
34
- creds: Optional[AnyTensorDockCreds]
35
- regions: Optional[List[str]]
36
-
37
-
38
- class TensorDockConfigValues(CoreModel):
39
- type: Literal["tensordock"] = "tensordock"
40
- regions: Optional[ConfigMultiElement]
41
-
42
-
43
- class TensorDockStoredConfig(TensorDockConfigInfo):
44
- pass
@@ -1,43 +0,0 @@
1
- from pydantic.fields import Field
2
- from typing_extensions import Annotated, List, Literal, Optional, Union
3
-
4
- from dstack._internal.core.models.backends.base import ConfigMultiElement
5
- from dstack._internal.core.models.common import CoreModel
6
-
7
-
8
- class VastAIConfigInfo(CoreModel):
9
- type: Literal["vastai"] = "vastai"
10
- regions: Optional[List[str]] = None
11
-
12
-
13
- class VastAIAPIKeyCreds(CoreModel):
14
- type: Annotated[Literal["api_key"], Field(description="The type of credentials")] = "api_key"
15
- api_key: Annotated[str, Field(description="The API key")]
16
-
17
-
18
- AnyVastAICreds = VastAIAPIKeyCreds
19
-
20
-
21
- VastAICreds = AnyVastAICreds
22
-
23
-
24
- class VastAIConfigInfoWithCreds(VastAIConfigInfo):
25
- creds: AnyVastAICreds
26
-
27
-
28
- AnyVastAIConfigInfo = Union[VastAIConfigInfo, VastAIConfigInfoWithCreds]
29
-
30
-
31
- class VastAIConfigInfoWithCredsPartial(CoreModel):
32
- type: Literal["vastai"] = "vastai"
33
- creds: Optional[AnyVastAICreds]
34
- regions: Optional[List[str]]
35
-
36
-
37
- class VastAIConfigValues(CoreModel):
38
- type: Literal["vastai"] = "vastai"
39
- regions: Optional[ConfigMultiElement]
40
-
41
-
42
- class VastAIStoredConfig(VastAIConfigInfo):
43
- pass
@@ -1,40 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from pydantic.fields import Field
4
- from typing_extensions import Annotated, Literal
5
-
6
- from dstack._internal.core.models.backends.base import ConfigMultiElement
7
- from dstack._internal.core.models.common import CoreModel
8
-
9
-
10
- class VultrConfigInfo(CoreModel):
11
- type: Literal["vultr"] = "vultr"
12
- regions: Optional[List[str]] = None
13
-
14
-
15
- class VultrStoredConfig(VultrConfigInfo):
16
- pass
17
-
18
-
19
- class VultrAPIKeyCreds(CoreModel):
20
- type: Annotated[Literal["api_key"], Field(description="The type of credentials")] = "api_key"
21
- api_key: Annotated[str, Field(description="The API key")]
22
-
23
-
24
- AnyVultrCreds = VultrAPIKeyCreds
25
- VultrCreds = AnyVultrCreds
26
-
27
-
28
- class VultrConfigInfoWithCreds(VultrConfigInfo):
29
- creds: AnyVultrCreds
30
-
31
-
32
- class VultrConfigInfoWithCredsPartial(CoreModel):
33
- type: Literal["vultr"] = "vultr"
34
- creds: Optional[AnyVultrCreds]
35
- regions: Optional[List[str]]
36
-
37
-
38
- class VultrConfigValues(CoreModel):
39
- type: Literal["vultr"] = "vultr"
40
- regions: Optional[ConfigMultiElement]
@@ -1,43 +0,0 @@
1
- import datetime
2
- from typing import List, Optional
3
- from uuid import UUID
4
-
5
- from dstack._internal.core.models.backends.base import BackendType
6
- from dstack._internal.core.models.common import CoreModel
7
- from dstack._internal.core.models.instances import InstanceStatus, InstanceType
8
-
9
-
10
- class Pool(CoreModel):
11
- name: str
12
- default: bool
13
- created_at: datetime.datetime
14
- total_instances: int
15
- available_instances: int
16
-
17
-
18
- class Instance(CoreModel):
19
- id: UUID
20
- project_name: str
21
- backend: Optional[BackendType] = None
22
- instance_type: Optional[InstanceType] = None
23
- name: str
24
- fleet_id: Optional[UUID] = None
25
- fleet_name: Optional[str] = None
26
- instance_num: int
27
- pool_name: Optional[str] = None
28
- job_name: Optional[str] = None # deprecated, always None (instance can have more than one job)
29
- hostname: Optional[str] = None
30
- status: InstanceStatus
31
- unreachable: bool = False
32
- termination_reason: Optional[str] = None
33
- created: datetime.datetime
34
- region: Optional[str] = None
35
- availability_zone: Optional[str] = None
36
- price: Optional[float] = None
37
- total_blocks: Optional[int] = None
38
- busy_blocks: int = 0
39
-
40
-
41
- class PoolInstances(CoreModel):
42
- name: str
43
- instances: List[Instance]