dstack 0.18.42__py3-none-any.whl → 0.18.44__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 (115) hide show
  1. dstack/_internal/cli/commands/__init__.py +2 -1
  2. dstack/_internal/cli/commands/apply.py +4 -2
  3. dstack/_internal/cli/commands/attach.py +21 -1
  4. dstack/_internal/cli/commands/completion.py +20 -0
  5. dstack/_internal/cli/commands/delete.py +3 -1
  6. dstack/_internal/cli/commands/fleet.py +2 -1
  7. dstack/_internal/cli/commands/gateway.py +7 -2
  8. dstack/_internal/cli/commands/logs.py +3 -2
  9. dstack/_internal/cli/commands/stats.py +2 -1
  10. dstack/_internal/cli/commands/stop.py +2 -1
  11. dstack/_internal/cli/commands/volume.py +2 -1
  12. dstack/_internal/cli/main.py +6 -0
  13. dstack/_internal/cli/services/completion.py +86 -0
  14. dstack/_internal/cli/services/configurators/run.py +11 -17
  15. dstack/_internal/cli/utils/fleet.py +5 -1
  16. dstack/_internal/cli/utils/run.py +11 -0
  17. dstack/_internal/core/backends/aws/compute.py +23 -10
  18. dstack/_internal/core/backends/aws/resources.py +3 -3
  19. dstack/_internal/core/backends/azure/compute.py +15 -9
  20. dstack/_internal/core/backends/azure/resources.py +2 -0
  21. dstack/_internal/core/backends/base/compute.py +102 -2
  22. dstack/_internal/core/backends/base/offers.py +7 -1
  23. dstack/_internal/core/backends/cudo/compute.py +8 -4
  24. dstack/_internal/core/backends/datacrunch/compute.py +10 -4
  25. dstack/_internal/core/backends/gcp/auth.py +19 -13
  26. dstack/_internal/core/backends/gcp/compute.py +26 -20
  27. dstack/_internal/core/backends/gcp/resources.py +3 -10
  28. dstack/_internal/core/backends/kubernetes/compute.py +4 -3
  29. dstack/_internal/core/backends/lambdalabs/compute.py +9 -3
  30. dstack/_internal/core/backends/nebius/compute.py +2 -2
  31. dstack/_internal/core/backends/oci/compute.py +10 -4
  32. dstack/_internal/core/backends/runpod/compute.py +32 -7
  33. dstack/_internal/core/backends/runpod/config.py +8 -0
  34. dstack/_internal/core/backends/tensordock/compute.py +14 -3
  35. dstack/_internal/core/backends/vastai/compute.py +12 -2
  36. dstack/_internal/core/backends/vultr/api_client.py +3 -3
  37. dstack/_internal/core/backends/vultr/compute.py +9 -3
  38. dstack/_internal/core/models/backends/aws.py +2 -0
  39. dstack/_internal/core/models/backends/base.py +1 -0
  40. dstack/_internal/core/models/backends/runpod.py +2 -0
  41. dstack/_internal/core/models/configurations.py +2 -2
  42. dstack/_internal/core/models/profiles.py +46 -1
  43. dstack/_internal/core/models/runs.py +4 -0
  44. dstack/_internal/core/services/__init__.py +5 -1
  45. dstack/_internal/core/services/configs/__init__.py +3 -0
  46. dstack/_internal/server/app.py +11 -1
  47. dstack/_internal/server/background/__init__.py +10 -0
  48. dstack/_internal/server/background/tasks/common.py +22 -0
  49. dstack/_internal/server/background/tasks/process_instances.py +11 -18
  50. dstack/_internal/server/background/tasks/process_placement_groups.py +1 -0
  51. dstack/_internal/server/background/tasks/process_prometheus_metrics.py +135 -0
  52. dstack/_internal/server/background/tasks/process_running_jobs.py +74 -34
  53. dstack/_internal/server/background/tasks/process_runs.py +1 -0
  54. dstack/_internal/server/background/tasks/process_submitted_jobs.py +4 -1
  55. dstack/_internal/server/background/tasks/process_terminating_jobs.py +1 -7
  56. dstack/_internal/server/migrations/versions/60e444118b6d_add_jobprometheusmetrics.py +40 -0
  57. dstack/_internal/server/migrations/versions/98d1b92988bc_add_jobterminationreason_terminated_due_.py +140 -0
  58. dstack/_internal/server/models.py +11 -0
  59. dstack/_internal/server/routers/logs.py +3 -0
  60. dstack/_internal/server/routers/metrics.py +21 -2
  61. dstack/_internal/server/routers/prometheus.py +36 -0
  62. dstack/_internal/server/security/permissions.py +1 -1
  63. dstack/_internal/server/services/backends/configurators/aws.py +31 -1
  64. dstack/_internal/server/services/backends/configurators/gcp.py +8 -15
  65. dstack/_internal/server/services/backends/configurators/runpod.py +3 -33
  66. dstack/_internal/server/services/config.py +24 -4
  67. dstack/_internal/server/services/fleets.py +1 -0
  68. dstack/_internal/server/services/gateways/__init__.py +1 -0
  69. dstack/_internal/server/services/jobs/__init__.py +12 -9
  70. dstack/_internal/server/services/jobs/configurators/base.py +9 -1
  71. dstack/_internal/server/services/jobs/configurators/dev.py +1 -3
  72. dstack/_internal/server/services/jobs/configurators/task.py +1 -3
  73. dstack/_internal/server/services/logs/__init__.py +78 -0
  74. dstack/_internal/server/services/{logs.py → logs/aws.py} +12 -207
  75. dstack/_internal/server/services/logs/base.py +47 -0
  76. dstack/_internal/server/services/logs/filelog.py +110 -0
  77. dstack/_internal/server/services/logs/gcp.py +165 -0
  78. dstack/_internal/server/services/metrics.py +103 -70
  79. dstack/_internal/server/services/pools.py +16 -17
  80. dstack/_internal/server/services/prometheus.py +87 -0
  81. dstack/_internal/server/services/proxy/routers/service_proxy.py +14 -7
  82. dstack/_internal/server/services/runner/client.py +14 -3
  83. dstack/_internal/server/services/runs.py +43 -15
  84. dstack/_internal/server/services/volumes.py +1 -0
  85. dstack/_internal/server/settings.py +6 -0
  86. dstack/_internal/server/statics/index.html +1 -1
  87. dstack/_internal/server/statics/{main-2ac66bfcbd2e39830b88.js → main-4eb116b97819badd1e2c.js} +131 -78
  88. dstack/_internal/server/statics/{main-2ac66bfcbd2e39830b88.js.map → main-4eb116b97819badd1e2c.js.map} +1 -1
  89. dstack/_internal/server/statics/{main-ad5150a441de98cd8987.css → main-da9f8c06a69c20dac23e.css} +1 -1
  90. dstack/_internal/server/statics/static/media/entraID.d65d1f3e9486a8e56d24fc07b3230885.svg +9 -0
  91. dstack/_internal/server/testing/common.py +50 -8
  92. dstack/api/_public/runs.py +4 -1
  93. dstack/api/server/_fleets.py +2 -0
  94. dstack/api/server/_runs.py +4 -0
  95. dstack/api/utils.py +3 -0
  96. dstack/version.py +2 -2
  97. {dstack-0.18.42.dist-info → dstack-0.18.44.dist-info}/METADATA +13 -3
  98. {dstack-0.18.42.dist-info → dstack-0.18.44.dist-info}/RECORD +115 -97
  99. tests/_internal/core/backends/base/__init__.py +0 -0
  100. tests/_internal/core/backends/base/test_compute.py +56 -0
  101. tests/_internal/server/background/tasks/test_process_prometheus_metrics.py +189 -0
  102. tests/_internal/server/background/tasks/test_process_running_jobs.py +126 -1
  103. tests/_internal/server/conftest.py +4 -5
  104. tests/_internal/server/routers/test_backends.py +1 -0
  105. tests/_internal/server/routers/test_fleets.py +2 -0
  106. tests/_internal/server/routers/test_logs.py +1 -1
  107. tests/_internal/server/routers/test_metrics.py +15 -0
  108. tests/_internal/server/routers/test_prometheus.py +244 -0
  109. tests/_internal/server/routers/test_runs.py +81 -58
  110. tests/_internal/server/services/test_logs.py +3 -3
  111. tests/_internal/server/services/test_metrics.py +163 -0
  112. {dstack-0.18.42.dist-info → dstack-0.18.44.dist-info}/LICENSE.md +0 -0
  113. {dstack-0.18.42.dist-info → dstack-0.18.44.dist-info}/WHEEL +0 -0
  114. {dstack-0.18.42.dist-info → dstack-0.18.44.dist-info}/entry_points.txt +0 -0
  115. {dstack-0.18.42.dist-info → dstack-0.18.44.dist-info}/top_level.txt +0 -0
@@ -1,42 +1,44 @@
1
1
  dstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dstack/version.py,sha256=2vyD60hf6Ar7fKjyGNRtiogwJDCRrkoglz7oYuLU-uY,65
2
+ dstack/version.py,sha256=Ct5iULpJsRMebp_vbEGziNAlFoo4aB8f00ddufM56Js,65
3
3
  dstack/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  dstack/_internal/compat.py,sha256=bF9U9fTMfL8UVhCouedoUSTYFl7UAOiU0WXrnRoByxw,40
5
5
  dstack/_internal/settings.py,sha256=8XODoSW2joaEndvZxuHUPSFK85sGgJ7fVL976isYeJM,557
6
6
  dstack/_internal/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- dstack/_internal/cli/main.py,sha256=XBL1ndQgWF3qVFfpoSJvRzT2N3NEwJs_3mhcNn3NRGU,3473
8
- dstack/_internal/cli/commands/__init__.py,sha256=i6d3YEmvLxV_pxLsHcj8CVmT0IsHRlwUt1Y7c_bNDP0,1914
9
- dstack/_internal/cli/commands/apply.py,sha256=4voRCc6ae9WfhheEkme-JaZsOMzGtUKr_ZqBU_yphZg,4808
10
- dstack/_internal/cli/commands/attach.py,sha256=ppN1wj003ydaGytZwOCh-Cv5WOkMuOMsfbbGB2BYqOg,4178
7
+ dstack/_internal/cli/main.py,sha256=RBGA0CvpRTS2seJPwYBQN_HIqEqSCF8iYoUMjDub57g,3676
8
+ dstack/_internal/cli/commands/__init__.py,sha256=e8EjD8Ej7Q3_APlxAN7NBwY7dGnW-DR91nH_RgcjBXg,2023
9
+ dstack/_internal/cli/commands/apply.py,sha256=dZH2B3Yr-lB7hs-QeUnvX0FV0Yk2x19dEO5uSFo4098,4909
10
+ dstack/_internal/cli/commands/attach.py,sha256=resmqoqkIOptp9Vn4BMs8m42Txl4mPzFDhHcv_lkWJk,5033
11
+ dstack/_internal/cli/commands/completion.py,sha256=2gDBYNb9u1JtuvZaAzqEOy0_ZatBvwn0Aq10j138xnA,546
11
12
  dstack/_internal/cli/commands/config.py,sha256=wc4haqU2-a65DcHdIH0gLyz3ViZ05dR7RXTlPm92G9g,3113
12
- dstack/_internal/cli/commands/delete.py,sha256=2jSt1XQ0W9l5YciO_bylGjljrPYpJbCyJu4HDYsXWtU,1317
13
- dstack/_internal/cli/commands/fleet.py,sha256=JmQCw93yXY4dGZM58zmrNJNwgLDQN6u4evIquJgncbk,3923
14
- dstack/_internal/cli/commands/gateway.py,sha256=nECzuhStVP_EI_x8PvwC2v4SlXH4sTG5Zh1fI2E30B4,5379
13
+ dstack/_internal/cli/commands/delete.py,sha256=agFBwJg8JXy1xp1UplRFLEPbix1bKvt6XvSBKpSPwYI,1418
14
+ dstack/_internal/cli/commands/fleet.py,sha256=J0Yi5CAYvIQF_NC4ZBsDYGc3grTOtvaF7sVcobd19Go,4028
15
+ dstack/_internal/cli/commands/gateway.py,sha256=PYVP3ngxKZ7hIvjUF3HcphMjXQRj84ePQs6gVrDjkgU,5567
15
16
  dstack/_internal/cli/commands/init.py,sha256=bLhSlViNWtjflB6xNq_PuCR2o2A06h222luh1NeUgVA,1169
16
- dstack/_internal/cli/commands/logs.py,sha256=S_TbKQ3YNKIlrcHlxnZl74FVeNq_TOiSNZBiUi7KjXI,2239
17
+ dstack/_internal/cli/commands/logs.py,sha256=ytWsxo_MGlAxsuNOd-yXsFzRDbnye_gtMcFfVdP2F4c,2349
17
18
  dstack/_internal/cli/commands/pool.py,sha256=XjTkW8cMQR20KoUrPuiQI246IMv8qTJD7-_Siuzgu0U,20656
18
19
  dstack/_internal/cli/commands/ps.py,sha256=WUQKL-1HcoM-oFF_WX4zplO8yKGMWfVbsivg0L7LP2w,1666
19
20
  dstack/_internal/cli/commands/run.py,sha256=hDItdHKXvVGQPqXKN-OQJ0HKupgmocqP3DNPl-yCamE,2690
20
21
  dstack/_internal/cli/commands/server.py,sha256=dCEdmVp1OlwFnSGw9k8mBb26wZy1D_ctgn5pmK8ZrCQ,2802
21
- dstack/_internal/cli/commands/stats.py,sha256=cCAk7xgWiCBUF1o7iqYDr4iOwWGTjkoEoEOBaEVr-Fk,5275
22
- dstack/_internal/cli/commands/stop.py,sha256=XFUe-5CiRlYw5ggMf2paZDfz3KXdOLDukA7NY3KEv5c,899
23
- dstack/_internal/cli/commands/volume.py,sha256=JatBQRcwcSrZzdGpmaeCwqdR31ZSNKJQT026V0C_aWE,3107
22
+ dstack/_internal/cli/commands/stats.py,sha256=KKSYfUmTL8d8_29Fajue_sa8KX_ifE_vx98CCNjttSo,5376
23
+ dstack/_internal/cli/commands/stop.py,sha256=i7TreejSemrQcL7C37La22KkwM98O09IDMRNt8cw1NI,1000
24
+ dstack/_internal/cli/commands/volume.py,sha256=h0bQQm6zx1Bq0kdBX5ksqPZk55wz-md_Kitm0RTDReg,3214
24
25
  dstack/_internal/cli/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  dstack/_internal/cli/services/args.py,sha256=Rnqq4M979bNACwWehgGKF2j30x01Efs-dDP-bjyTroE,782
27
+ dstack/_internal/cli/services/completion.py,sha256=HvWHdZhXQWX1FyHf1OtQJxeuIXMXBKcoa5UjNRr0AN0,2984
26
28
  dstack/_internal/cli/services/profile.py,sha256=Fl052TeMCbWO1Q6HiaPVD9CdfClzZAkknkCd2pYXpdM,7716
27
29
  dstack/_internal/cli/services/repos.py,sha256=ImJuElGjsR4OQ7dBquy4PCQUbBM4bR4vhyLwMrVBS7k,3307
28
30
  dstack/_internal/cli/services/configurators/__init__.py,sha256=z94VPBFqybP8Zpwy3CzYxmpPAqYBOvRRLpXoz2H4GKI,2697
29
31
  dstack/_internal/cli/services/configurators/base.py,sha256=DxVuF9pDqghq9mFCcTDG1CxO06IAAwvzlc9nHflCipc,3443
30
32
  dstack/_internal/cli/services/configurators/fleet.py,sha256=bKnWXhr7r8GndxedNdG_TWvwcxV4gab_LFt4s3Q17D0,14822
31
33
  dstack/_internal/cli/services/configurators/gateway.py,sha256=czB2s89s7IowOmWnpDwWErPAUlW3FvFMizImhrkQiBM,8927
32
- dstack/_internal/cli/services/configurators/run.py,sha256=8RFxrk9EgOJZ2GoZPmhAm8z4XoTcVvYGkmTHS6uk73U,23421
34
+ dstack/_internal/cli/services/configurators/run.py,sha256=bmp4-adMi0DAsPpaL4ntxZhoAB7to3hLgEOxDhv1Mgo,23135
33
35
  dstack/_internal/cli/services/configurators/volume.py,sha256=riMXLQbgvHIIFwLKdHfad-_0iE9wE3G_rUmXU5P3ZS8,8519
34
36
  dstack/_internal/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
37
  dstack/_internal/cli/utils/common.py,sha256=rfmzqrsgR3rXW3wj0vxDdvrhUUg2aIy4A6E9MZbd55g,1763
36
- dstack/_internal/cli/utils/fleet.py,sha256=F9oW381tPePaxB0jBnxdpWLvxF6RDBKLbGuxEF52E-s,3755
38
+ dstack/_internal/cli/utils/fleet.py,sha256=NpqTdcMVcuUGke9drroxDoNnmifbKV7iziqdGPLc3lk,3885
37
39
  dstack/_internal/cli/utils/gateway.py,sha256=jMytH6u3x8hctMhm9bcmXLJxSgTXmpW8M9abATQrw3c,1474
38
40
  dstack/_internal/cli/utils/rich.py,sha256=Gx1MJU929kMKsbdo9qF7XHARNta2426Ssb-xMLVhwbQ,5710
39
- dstack/_internal/cli/utils/run.py,sha256=4NDhlcdE4bccQ4gWzhZ2EP8tHryZt4eI3BBho425VOA,7737
41
+ dstack/_internal/cli/utils/run.py,sha256=TCKTdtwrgEIV1ME3g4q_GVGzp2KHBVoJwcKjXZmS-nc,8399
40
42
  dstack/_internal/cli/utils/updates.py,sha256=9KQcm_TEE_PiU0yc5WH4xRse0WIeHOubi9Et55odgvk,2601
41
43
  dstack/_internal/cli/utils/volume.py,sha256=mU9I06dVMFbpjfkefxrZNoSWadKLoib3U14rHudNQN4,1975
42
44
  dstack/_internal/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -45,50 +47,50 @@ dstack/_internal/core/errors.py,sha256=UvqMIBVHG1NIUP0w0g5dWjnxOz37sfFi4lh4yuYK0
45
47
  dstack/_internal/core/backends/__init__.py,sha256=P7uX9QYj-aWSHOub1vIwr-MVERVCwTi8pcG4MQVuEYw,958
46
48
  dstack/_internal/core/backends/aws/__init__.py,sha256=gGXM9op3UJ3-OGDjNr4ywa_fNf--oywRbrOGUH2tTDA,850
47
49
  dstack/_internal/core/backends/aws/auth.py,sha256=lRBwNUdEWMWlblDnFSGlIcNkZMY2tSjapdq1OjwollU,1253
48
- dstack/_internal/core/backends/aws/compute.py,sha256=I7DyBNc9wFqMQ9-9IxX3rmIyNzq4hCS5hT8uorSn9_E,35308
50
+ dstack/_internal/core/backends/aws/compute.py,sha256=UsSYadzCzkCM1jIH64fQRaQz94PKwyKGSVzegXJx-iQ,35964
49
51
  dstack/_internal/core/backends/aws/config.py,sha256=bd4juOaiqsUsWeorIgqCW0xNigCFIRQIvaRxEHyhpwg,533
50
- dstack/_internal/core/backends/aws/resources.py,sha256=yKsMMLO4HMRTWero8cLDxtavWvqcne_y9VDXVH9G1lE,22551
52
+ dstack/_internal/core/backends/aws/resources.py,sha256=8Pm1zwejYESlH559GB0zNg5zVBgC5D4bPyGx7zBRhmg,22540
51
53
  dstack/_internal/core/backends/azure/__init__.py,sha256=J-mWp413v0DQFaTochlvMJXlGf8ukQCH_6oGuYFR31U,718
52
54
  dstack/_internal/core/backends/azure/auth.py,sha256=CZZlcUMkjh18wwtMl75K7kfob1bc9aI1TRr5QwMn_u8,1523
53
- dstack/_internal/core/backends/azure/compute.py,sha256=5NdOT1zonGrQvFiJK3unZW0vI-hw8_Nm8918Oh80ERU,23041
55
+ dstack/_internal/core/backends/azure/compute.py,sha256=og9darSt5c8mM3vDFbwZS825eApVietTlP4diO8kBC4,23290
54
56
  dstack/_internal/core/backends/azure/config.py,sha256=nb7e9rBt5glSOcXW1NZUxlyjfe2W1CiEPERNlxLcLUo,391
55
- dstack/_internal/core/backends/azure/resources.py,sha256=OsVrWnrqUDs8-A6QOH5XDHTX6-fKpXotlvYLBiXDAH8,3020
57
+ dstack/_internal/core/backends/azure/resources.py,sha256=keE3ruSSNWhSYMCkG7832TYppMMe8lDEyph0tulhd18,3048
56
58
  dstack/_internal/core/backends/azure/utils.py,sha256=taHMJq6UHRzUXLUcO2P5VCKy3wJaye2bG-6QdkEPNdY,1741
57
59
  dstack/_internal/core/backends/base/__init__.py,sha256=nTI1mn75hqwUumBVmyD_OSJW3boYHzNh1ER6m9yl39Y,280
58
- dstack/_internal/core/backends/base/compute.py,sha256=awJhv8moWYPk3lOn7kSUT9B0TmgvJi980sNB8DsPjyI,17039
60
+ dstack/_internal/core/backends/base/compute.py,sha256=cATataCnSX881cU5spmpckI5bgjGseOQ8_Ms6ksYyqI,20077
59
61
  dstack/_internal/core/backends/base/config.py,sha256=iwgrp31Yt0iHRU2IpGhOwyuEcdt3igP9Q9rV7pmnyEg,74
60
- dstack/_internal/core/backends/base/offers.py,sha256=Lr0nVbSNBuIG2n0geDyX2JUexNnHqdoHWVshmuFQET8,5682
62
+ dstack/_internal/core/backends/base/offers.py,sha256=89H6g6Dw5WvXDEBnKoZUF-fGIE3Clc8T4lEjZ_jr71A,5909
61
63
  dstack/_internal/core/backends/cudo/__init__.py,sha256=e-RHwoV4-rg1I31BrSIZsgPBY5rsa_kN9dbZM0pve04,519
62
64
  dstack/_internal/core/backends/cudo/api_client.py,sha256=ygq1Gx7ZvwKaifdXtvzDSw4xR4ZH6UWd5J47BjuaGh0,3685
63
- dstack/_internal/core/backends/cudo/compute.py,sha256=Xr0oyNKeqZJtdD9HeCMU3_v6oJew25YcjCRt3jdVHSs,6825
65
+ dstack/_internal/core/backends/cudo/compute.py,sha256=-N6u7PmU--cpSk-B_KG-SbBbFO3ida4yJeTCVPyqhyI,6871
64
66
  dstack/_internal/core/backends/cudo/config.py,sha256=OEtzz3bxJ29D07i5pHd5xd5SkclbpFBN-i--yHyZ6gc,245
65
67
  dstack/_internal/core/backends/datacrunch/__init__.py,sha256=UiyGh78DabzGFkb-zwm84NB5CyhhSoXpqX8FxJp7pY8,573
66
68
  dstack/_internal/core/backends/datacrunch/api_client.py,sha256=EMnd4uEZqSXEcCajMvaYKnL4l-mZRPGYlsjaeG4It8M,2602
67
- dstack/_internal/core/backends/datacrunch/compute.py,sha256=gyOftmUdmS9fMqpyew0POundGLBPEzI2S_sGemhIOFc,6633
69
+ dstack/_internal/core/backends/datacrunch/compute.py,sha256=8ldjO2CtiOHTj9LsoIv2WS0Tcpc-14-1tvZZZ4gI_dg,6759
68
70
  dstack/_internal/core/backends/datacrunch/config.py,sha256=bShWTAb02PYP8fuBz7H7r-YhRkhy6_yfD0nuaKd9xd4,281
69
71
  dstack/_internal/core/backends/gcp/__init__.py,sha256=nxhPNTGd1pPag2DwBRKg3X5gEKlh32p7a9Yfyi7-d5k,546
70
- dstack/_internal/core/backends/gcp/auth.py,sha256=AL5i7VtXvMboTCk-dzvNykaogYV31xAYfEivXxzOD_k,1832
71
- dstack/_internal/core/backends/gcp/compute.py,sha256=ksGatfOjPp78kTIpuxbEX3awMv9Wy2ErLX4FbGlrOI4,36001
72
+ dstack/_internal/core/backends/gcp/auth.py,sha256=hSClOujk8_kcodqK4SltdaIty6kKaQAecHYya99-LBQ,2495
73
+ dstack/_internal/core/backends/gcp/compute.py,sha256=YhssHfSCoKTjchzklRiVA4VIFDdRLzc_snia4tVrlBw,36092
72
74
  dstack/_internal/core/backends/gcp/config.py,sha256=AjNHgIsDqB5aKdyFXTKG9wNO2d3lgNyJW4Dk5Yb-LL4,722
73
- dstack/_internal/core/backends/gcp/resources.py,sha256=6khFYRZwMrjRxVAoHav3OsKFSVw-tuLVkJ_FzQCY8EI,14741
75
+ dstack/_internal/core/backends/gcp/resources.py,sha256=ZDs8rjdMCgHeeHH_vzxJjhCJN-omF4tRBApkN3GOjpg,14539
74
76
  dstack/_internal/core/backends/kubernetes/__init__.py,sha256=MpuT3Dxt2ZwZpAQomE_fXUDmgHBmfP8xvUP1YMAKTJQ,573
75
- dstack/_internal/core/backends/kubernetes/compute.py,sha256=vpI6Gb_WdrZHNqsXEqOUM2f174V0Nv7Zzsd1hlAjV1c,22611
77
+ dstack/_internal/core/backends/kubernetes/compute.py,sha256=aAh4XNs-5lTI-q_2Bt6NzyKT3-mQSCLTk_1qCDLPAhg,22719
76
78
  dstack/_internal/core/backends/kubernetes/config.py,sha256=odZgt1y8tPPm5L6Wta4XjpVDNi7aJGPANyyyapzUDWU,227
77
79
  dstack/_internal/core/backends/kubernetes/utils.py,sha256=k0cmjqMoNfJ_pAe6W82exV4AywMcpZ5jf0QICVbVuFY,1218
78
80
  dstack/_internal/core/backends/lambdalabs/__init__.py,sha256=eAjZoRfstuNcgDpYjYPBfHbBTjmQ0jkRP1AvftyR_Lk,581
79
81
  dstack/_internal/core/backends/lambdalabs/api_client.py,sha256=WaBO7VrPB4kbMQJDxjFxx0HEtAoSncQvH-cahWnVxx4,2688
80
- dstack/_internal/core/backends/lambdalabs/compute.py,sha256=cXSCXS5OU-e1p-UxrZenyXHPcyYHMF02LNH3HSrT4FI,8216
82
+ dstack/_internal/core/backends/lambdalabs/compute.py,sha256=1G5Z2ECtSqlp9dZcbFSKa0zYcgMb5_IA3kMOLFXNCu0,8398
81
83
  dstack/_internal/core/backends/lambdalabs/config.py,sha256=dK5nDZ320x8xVWaIZ_As2rk1rJOpxuFwIve1Qe6tjp8,261
82
84
  dstack/_internal/core/backends/local/__init__.py,sha256=Bbq2l8PWJTsMqovjS4u5VTDFrxYn-o3nJtdD1hfrBHM,399
83
85
  dstack/_internal/core/backends/local/compute.py,sha256=5ETgGZ09axLpRghBZp4GHUcOX0-m4ShhcL3MXHvySaU,3248
84
86
  dstack/_internal/core/backends/nebius/__init__.py,sha256=wmJ1JPm54Vc3omuVrLKbbEr_F9mZbeLl-Vb_eMF5r2s,537
85
87
  dstack/_internal/core/backends/nebius/api_client.py,sha256=T2f429uY2KFWY8NrnCaAu16O4L2ygYrkc10crrbu-BI,10326
86
- dstack/_internal/core/backends/nebius/compute.py,sha256=3mI0-au3XL-EViguA5tVjEws5aEl2Mbu747jKoNQCLo,8510
88
+ dstack/_internal/core/backends/nebius/compute.py,sha256=trlHEGlBiMg_ehYYUyxlA4hM2qQ3dMb7FSMBzy2cvdk,8518
87
89
  dstack/_internal/core/backends/nebius/config.py,sha256=S4XL45mxaZvqFraCyGefGY7G3vXbzLDP-ozIndKrL_w,244
88
90
  dstack/_internal/core/backends/nebius/types.py,sha256=7V5UTFlhdKO410pxtsQRpCjsaMf1vxcTwT3ncp1QI78,509
89
91
  dstack/_internal/core/backends/oci/__init__.py,sha256=Tjf82P3e3nRnYwvr27IRi9C-c9SI6-39TongpJFeQqY,510
90
92
  dstack/_internal/core/backends/oci/auth.py,sha256=dZy8EWsnUbylp0x1VYZpgu2MBXh_Tocz6KPAjPNmjbs,883
91
- dstack/_internal/core/backends/oci/compute.py,sha256=bm3LwfAd8PeNe_P0xIFuAPZIoL1KLqTcJ4M8Hz4dwhA,7742
93
+ dstack/_internal/core/backends/oci/compute.py,sha256=rNEXOsrjfcGRuz-tXVlKJrMcxPXAaxgdaBSwwgGXzu4,7894
92
94
  dstack/_internal/core/backends/oci/config.py,sha256=rSwnbRh7qXe64CfJ_oOnIRFaYevjZ5J4Hx1dNwkT3Xo,226
93
95
  dstack/_internal/core/backends/oci/exceptions.py,sha256=GxlUf7itcAQgY3m-U2ul_ZXzfUOcEcPEmisWFaoWSkA,288
94
96
  dstack/_internal/core/backends/oci/region.py,sha256=6MElwRMVQvl7FF2E90nQ1p7QmcRcyhAps2Dy2cOYR4A,2935
@@ -97,24 +99,24 @@ dstack/_internal/core/backends/remote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
97
99
  dstack/_internal/core/backends/remote/provisioning.py,sha256=oNbomEuXIBdgYeCh6_RWB0nWtnrJ0-HRf9M6VYgoQvk,12461
98
100
  dstack/_internal/core/backends/runpod/__init__.py,sha256=CC9K4rZlSxpSIqt9akM1PIRzaOGozreY4hQWxO8dRZ4,537
99
101
  dstack/_internal/core/backends/runpod/api_client.py,sha256=Oet7CwQTu3sE57unqh-JvuMCBDEDPruAbGB4GyM0dM4,13427
100
- dstack/_internal/core/backends/runpod/compute.py,sha256=GRivKqHvobYHB55_76MiYcye1nwznxH2wgnwAx_xSlQ,9552
101
- dstack/_internal/core/backends/runpod/config.py,sha256=V9ihNEigp5szdDuffHDM47JsshyPc25x6jHwbuc2YhY,257
102
+ dstack/_internal/core/backends/runpod/compute.py,sha256=XCOdW_vcpSrH4sEPK83jWuUphmnq7Z87Ho_O5Hu0zhA,10491
103
+ dstack/_internal/core/backends/runpod/config.py,sha256=5orria50iwzgIu_mEA9yXwyNyoZJXa2QJU4oqtE7wgU,487
102
104
  dstack/_internal/core/backends/tensordock/__init__.py,sha256=AihBzxY8RjJHXYrpqaSGCkcOwqYsMgiyIlH16fnHxso,573
103
105
  dstack/_internal/core/backends/tensordock/api_client.py,sha256=4106Jzn_I1WTX0VZkZk3I-xkG7sHGTUBRapi8Fk2H7o,3805
104
- dstack/_internal/core/backends/tensordock/compute.py,sha256=XhenSNBt2xEatWQRc6QKcIlQXIIYYR7zfEb4zk2DMxE,5348
106
+ dstack/_internal/core/backends/tensordock/compute.py,sha256=njDKvNxN7Fupoxw_eMiItimOvadvdLXEAivM3e75ro0,5584
105
107
  dstack/_internal/core/backends/tensordock/config.py,sha256=tDbQd2JaALw05WQMHepbyaIBKLvDP0AW3qJyoMDxX5o,281
106
108
  dstack/_internal/core/backends/vastai/__init__.py,sha256=0biDt0AfWis81AJZc-R2TuUdSodjpiJjUtxPTG8RdG8,537
107
109
  dstack/_internal/core/backends/vastai/api_client.py,sha256=b-qgx352lnxhBXichJtURFGxR7Jd9JYx4WXaxYV-HH0,4940
108
- dstack/_internal/core/backends/vastai/compute.py,sha256=GYKEGPSUqxgq4_ei7VRjMyx-BAq1ULrZs9sRCY4qW10,4638
110
+ dstack/_internal/core/backends/vastai/compute.py,sha256=3gvzzaYo5yTrnWbRz10M6DRca2WUCiQXqUaVKVBUi5M,4854
109
111
  dstack/_internal/core/backends/vastai/config.py,sha256=cVHqnEkPKw2DFOkEGJ3XhMcRx4IBDgfUuS69DKksosI,244
110
112
  dstack/_internal/core/backends/vultr/__init__.py,sha256=D5FekILnO-lQ91hPYKrXWB0BuiGx7djMajuMa3ZlrV0,528
111
- dstack/_internal/core/backends/vultr/api_client.py,sha256=69iQFuP63Fb5UMacWYLxGXB9V74Tr1Hd6MheVHZkXb8,4346
112
- dstack/_internal/core/backends/vultr/compute.py,sha256=M78r6GIn4HI70yCBWB22xMPLADWgf8FVLVB5M8ymkH8,6175
113
+ dstack/_internal/core/backends/vultr/api_client.py,sha256=isHbdBQr2hFRYTcnTsGxSlWIKYrpC1X_gjSZjGxUupE,4363
114
+ dstack/_internal/core/backends/vultr/compute.py,sha256=HqoI7ZF_DafrOG3XALdRjYQdzpvCP0_SBsm6GSk1Sw4,6357
113
115
  dstack/_internal/core/backends/vultr/config.py,sha256=TqjT2yhW9rAiDpJ96gBFTM638FS9QwYAT33WSoh6z34,251
114
116
  dstack/_internal/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
117
  dstack/_internal/core/models/common.py,sha256=XNfEP_lHAs398oDfSVn8kCX79GIWvl0hDs05Rz1CBic,2579
116
118
  dstack/_internal/core/models/config.py,sha256=JJ7rT7dztzTWCY5TkoyxXxTvG5D4IFYhGe7EzwkLOWQ,581
117
- dstack/_internal/core/models/configurations.py,sha256=Jj9mM52uoYKdq557it8L8UHWsP1kbzHxjV-hmkouHf4,14816
119
+ dstack/_internal/core/models/configurations.py,sha256=uIasiOLgU6Xy9Tuh6Vchx2MWnw5O_A4QcrF3aBVrkR4,14770
118
120
  dstack/_internal/core/models/envs.py,sha256=ls2ahIhEb3LYLX_auH3F46uTRp2zdlMWKEpjmU_V3S4,5017
119
121
  dstack/_internal/core/models/fleets.py,sha256=MzJFMpzsuXBE1Fxlbf8dtsqes5qWMCMRSUWGoWIcRnA,10772
120
122
  dstack/_internal/core/models/gateways.py,sha256=n9lPq6X0n2a7fF-CseiBVDDwasJsU3VQumTetMsfZcc,3465
@@ -123,10 +125,10 @@ dstack/_internal/core/models/logs.py,sha256=Lsmtd_NrnChMjBJahUZpFb1j8Xobix9FHWf1
123
125
  dstack/_internal/core/models/metrics.py,sha256=Xb8hCXUL-ncQ3PMsErIUAJTe9gwh5jyrQ4UQoZbibsc,269
124
126
  dstack/_internal/core/models/placement.py,sha256=WJVq5ENJykyRarQzL2EeYQag_9_jV7VSAtR_xoFvPVM,720
125
127
  dstack/_internal/core/models/pools.py,sha256=SmxNQsSYolUMkraLi0BvEXDacuhp1cvbGQn33tyhcc8,1244
126
- dstack/_internal/core/models/profiles.py,sha256=Y0qsIV0DvvI-YxtcMLqmsrqulGKzJsE_0SdWU2Wusv8,8208
128
+ dstack/_internal/core/models/profiles.py,sha256=WO0hHc-mnjd30k5iLey2PURtjpHOA-J0JQYz6rYu-2Y,9488
127
129
  dstack/_internal/core/models/projects.py,sha256=hY3rhLWkuDRsavAdNvQaK6IhnTr7yBHTmNwy9k7zjVE,643
128
130
  dstack/_internal/core/models/resources.py,sha256=AzBqGEZLHmg-HpjQtcb_W4pJQRxRtDyeuiHO4berdBA,12408
129
- dstack/_internal/core/models/runs.py,sha256=ziWnqFRL1hORWJ10evwxLySAe9umiP7kTc3IUvEniSc,17940
131
+ dstack/_internal/core/models/runs.py,sha256=8DW9q6k-6z9dc_Zw5Ulnd-GsAOgbf9iK1DGxkrc4rTQ,18181
130
132
  dstack/_internal/core/models/secrets.py,sha256=OlnBI8ESBnpjSqB0-Vr3z8JcqB2Ydfiwo8IJUuM5jAc,219
131
133
  dstack/_internal/core/models/server.py,sha256=Hkc1v2s3KOiwslsWVmhUOAzcSeREoG-HD1SzSX9WUGg,152
132
134
  dstack/_internal/core/models/services.py,sha256=2Hpi7j0Q1shaf_0wd0C0044AJAmuYi-D3qx3PH849oI,3076
@@ -134,9 +136,9 @@ dstack/_internal/core/models/unix.py,sha256=KxnSQELnkAjjuUgYcQKVkf-UAbYREBD8WCWD
134
136
  dstack/_internal/core/models/users.py,sha256=o_rd0GAmd6jufypVUs9P12NRri3rgAPDt-KxnqNNsGw,703
135
137
  dstack/_internal/core/models/volumes.py,sha256=ZebkSybGXmnPQHjsDCWVofHavjwjLIovssmpXnLW6nU,6207
136
138
  dstack/_internal/core/models/backends/__init__.py,sha256=iPMAv4j7gpHc0cjt3SxzQGb-sywms8LUXt7IjtKNPnM,5589
137
- dstack/_internal/core/models/backends/aws.py,sha256=H0RB7pTVb7vjW_-MDpBBwPLbAoKDRtYFHe_n4ppXz6w,2463
139
+ dstack/_internal/core/models/backends/aws.py,sha256=YCt2Q3MF7RjYa707iU0EyXvkXYIr2ivNtdauCW-khss,2550
138
140
  dstack/_internal/core/models/backends/azure.py,sha256=OhK3HBvI_ZfLmKVxlnm7AowWOlarp6QXb3tbcbFoACw,2076
139
- dstack/_internal/core/models/backends/base.py,sha256=1UWcpAI6hhwJkNFLp00eJwRzb9C82dsp7QsMkRHr9VA,1373
141
+ dstack/_internal/core/models/backends/base.py,sha256=FabJjSLFnLMY597fJXgS8o2shtToML756aEd30OQyDo,1428
140
142
  dstack/_internal/core/models/backends/cudo.py,sha256=ZaqIq1yxxnoFddvzFES7VO82bVNxeI5laFWKKN_JaeE,1111
141
143
  dstack/_internal/core/models/backends/datacrunch.py,sha256=CpQDDZ2xHWz5BQPb9NA_eSP7FaQQegT0yGJZ1CCSNqc,1281
142
144
  dstack/_internal/core/models/backends/dstack.py,sha256=Oxyf8zqbOjxStimYrYuYvf0Kop3dJbyBQnkMnUGDs0Y,754
@@ -145,7 +147,7 @@ dstack/_internal/core/models/backends/kubernetes.py,sha256=v0buKTfvcrET1QNgAQatj
145
147
  dstack/_internal/core/models/backends/lambdalabs.py,sha256=PrcdI4qU2uJOb5G1PyrInNJF1TFYBiZNF8Jgx0wYAFI,1111
146
148
  dstack/_internal/core/models/backends/nebius.py,sha256=CR91JIPJHQsBKju51cr7vgnsP-UiGcNDtUKAyX1Kz84,1306
147
149
  dstack/_internal/core/models/backends/oci.py,sha256=8vbnkaCXImnkpAIW6c68xsH7sRYZLMpFJiaIdKRIO-g,2893
148
- dstack/_internal/core/models/backends/runpod.py,sha256=462H4cbO5An2AmaUTw-PiyZ9OKHFsDw0kminvBmHF1g,982
150
+ dstack/_internal/core/models/backends/runpod.py,sha256=lYiqVALScjR7FqPpKaP5fQSlkJuf__1i_4Y5GIP-Gkg,1061
149
151
  dstack/_internal/core/models/backends/tensordock.py,sha256=hoD50FTSPdE-tEVFh-AMIW8Jq4g1AVhdDPVMjH8rhW4,1269
150
152
  dstack/_internal/core/models/backends/vastai.py,sha256=Q3Y5HdtNrUuVCMBQMDMBb0dM2u--YYsUnt07hWJuvOQ,1111
151
153
  dstack/_internal/core/models/backends/vultr.py,sha256=uebitIgmcZ_Vy0Y7pMdEuuh_Ym5CTMk-pAtcOVlNx-Y,1026
@@ -154,13 +156,13 @@ dstack/_internal/core/models/repos/base.py,sha256=lHV9iNSV1Iv1xxqxO7wCcGZ5WIliMp
154
156
  dstack/_internal/core/models/repos/local.py,sha256=ve9DoCn9qDyE2VOxzoK4_BdXwVveFPFY0fSls7jRcmI,2379
155
157
  dstack/_internal/core/models/repos/remote.py,sha256=JjqPVGzeYr7T8MhsvkUs3GzUpfnAIEWj-UAUbwJhl2Q,10877
156
158
  dstack/_internal/core/models/repos/virtual.py,sha256=1p6k2vBfWI6UT91os3lZfV5wl8bskNGFa1hyI5kiY-8,2569
157
- dstack/_internal/core/services/__init__.py,sha256=Utrh2zbYsP6IBGWMGROaHUefgo_TvLloN3logcdhuC4,282
159
+ dstack/_internal/core/services/__init__.py,sha256=UVVcj26WYVgo7jHzD07sNRqSOO7zA3QzQv-9LnCDqR4,415
158
160
  dstack/_internal/core/services/api_client.py,sha256=HTQ0fcZciUh-nmfV09hUt__Z4N2zq_R12xAiYXD0Jy0,650
159
161
  dstack/_internal/core/services/diff.py,sha256=lw7vTOYnGtRWlEulgVlHt1KjLdC8VJpfBcqMRuFZzSQ,532
160
162
  dstack/_internal/core/services/logs.py,sha256=7_eJdH4MD-3rVb4A6rIJfjj_p4jzUOCmjRVlPD-UDsg,2166
161
163
  dstack/_internal/core/services/profiles.py,sha256=SJGT6LG8JmrfsqlyXOkPZd61BDwZ4Q1ngcmDVgq826M,2160
162
164
  dstack/_internal/core/services/repos.py,sha256=YgTmLX8U1Y5cz2dG9yThK1-Geq02iik_C6DGZ0y6uEY,5311
163
- dstack/_internal/core/services/configs/__init__.py,sha256=2jwu1w0vEDNcKGdeI15SS4EtpLSZzRpG8xZslHgTJmY,5484
165
+ dstack/_internal/core/services/configs/__init__.py,sha256=hBFfU1IhkFJ7HZU9JgzBys8i1l_YM-iEKt0JqYd1YiE,5580
164
166
  dstack/_internal/core/services/ssh/__init__.py,sha256=UhgC3Lv3CPSGqSPEQZIKOfLKUlCFnaB0uqPQhfKCFt0,878
165
167
  dstack/_internal/core/services/ssh/attach.py,sha256=Vc47zLXqCUcg14BahwyX9qnBaGEJi96mTU1Nd0XU31Q,9011
166
168
  dstack/_internal/core/services/ssh/client.py,sha256=FUg74jNOagYR3OKuWMBwNgJWIDwHfYrIMSER8xn92D8,4102
@@ -219,23 +221,25 @@ dstack/_internal/proxy/lib/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
219
221
  dstack/_internal/proxy/lib/testing/auth.py,sha256=-firWTnis9Eogoi58BURv1S-te4Hf9x1Q_aYLZMDll4,465
220
222
  dstack/_internal/proxy/lib/testing/common.py,sha256=5e2VYboMqjBnUxkvidaWLoQ-uaBGh_hnURb_VJc38q4,1518
221
223
  dstack/_internal/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
- dstack/_internal/server/app.py,sha256=pPto7JaBEkwvPF2FR8sqDzwIyMovI_85xk6WXfnnCYU,11317
224
+ dstack/_internal/server/app.py,sha256=WoiFacXv8pfksEGhOQ1Urj7pZzLZKDD95vgxit5V1Ww,11581
223
225
  dstack/_internal/server/db.py,sha256=WjuqmjG3QAZmSMCeUaJ_ynbowlHuNAvYCZO649cTPHc,3210
224
226
  dstack/_internal/server/deps.py,sha256=31e8SU_ogPJWHIDLkgl7cuC_5V91xbJoLyAj17VanfM,670
225
227
  dstack/_internal/server/main.py,sha256=kztKhCYNoHSDyJJQScWfZXE0naNleJOCQULW6dd8SGw,109
226
- dstack/_internal/server/models.py,sha256=VKh_lfgGUlc0Xy_CGo02IDgwPRp3membAJg07jm27j4,27405
227
- dstack/_internal/server/settings.py,sha256=tEPw0xIltvW4TpLBA-OzKRM_PmvDuD4vuXCo7ITyzpo,3067
228
- dstack/_internal/server/background/__init__.py,sha256=jNDwTgQwKhK1NYl0RJaKU4mwKIMOSIxPTKVyhizU1PM,3436
228
+ dstack/_internal/server/models.py,sha256=skqZ0hvM3nB_rAeTVqsu2FPuDBy0CqyHLQnuoIXZ5wg,27770
229
+ dstack/_internal/server/settings.py,sha256=1iqXWgvvsr19jXX1javGdPj6UhOfOHuuXSXgmGtjO2A,3335
230
+ dstack/_internal/server/background/__init__.py,sha256=8kTbhEHCeXTibsOlHY1HwqIO6gGb4q8fUa2fcDrah1c,3893
229
231
  dstack/_internal/server/background/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
+ dstack/_internal/server/background/tasks/common.py,sha256=N7xSXbf2MoBWgbJ1e3AEzYBTf1Gn-pDXYND8Zr_YCJQ,970
230
233
  dstack/_internal/server/background/tasks/process_fleets.py,sha256=lKXUvN_b7DNjD3psHzyCt_JYsTxPFuQ86iXi8fj8GkM,3202
231
234
  dstack/_internal/server/background/tasks/process_gateways.py,sha256=KN5n9r0cKizJ3oGpeLsv3euZKZOMf-02X0Sv09GE8N8,7141
232
- dstack/_internal/server/background/tasks/process_instances.py,sha256=HaOTfcBcrwlRhHHbpeRflCcf3VYW-OkE6SB74SxvwXQ,37369
235
+ dstack/_internal/server/background/tasks/process_instances.py,sha256=xRV0tJbSPean2E09opTYLUH2Z4Xpm1Lw-o-LqPcecqc,37046
233
236
  dstack/_internal/server/background/tasks/process_metrics.py,sha256=BPv0S7pmMX91vObZiW51AJiNR0ULIj-OQlo5n97KISY,5328
234
- dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=DZctiMF2TXKbYeygoz--ZiC9MXVL1sQJgq0oqRIc7hg,3858
235
- dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=FAIwXKIOUbVM-svKo7aoAF9DdxIhcejQJfg6gs0z83k,30108
236
- dstack/_internal/server/background/tasks/process_runs.py,sha256=JWJqMzXXqvwQSxyKs4bKH2aBP8YQbiyO4tuwyMPVduk,16673
237
- dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=xv1aW2umlOdbdZn4TOvlhl6td3Uam378yIwosfSO9ks,27022
238
- dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=A8J6JabVih1nHl3Kgyaoh7eaKPywicZe7vx-4V_uvgk,4033
237
+ dstack/_internal/server/background/tasks/process_placement_groups.py,sha256=rLlSGEjSrJXcXHDDr_2mBXqSYmYz-4S2x4qz-iNxryo,3931
238
+ dstack/_internal/server/background/tasks/process_prometheus_metrics.py,sha256=Z3eMPv1gYaYzfLOLPu5Btv-RnF4HcxfxQbQhQ6Cg3pk,5089
239
+ dstack/_internal/server/background/tasks/process_running_jobs.py,sha256=ABocGGQOOlWi-pjqk2sZbLKW8LvVhKlJfrmRuneU9z0,31978
240
+ dstack/_internal/server/background/tasks/process_runs.py,sha256=qYPclhUHAXZd7VHl2Dz3ET8YLsdkvPLTcDKOVrSIaoQ,16735
241
+ dstack/_internal/server/background/tasks/process_submitted_jobs.py,sha256=qL587QyBCo6DjdYnWH5F15HbmbgY0HxazllPcJLsLrk,27211
242
+ dstack/_internal/server/background/tasks/process_terminating_jobs.py,sha256=0Z3Q409RwSxOL_pgK8JktBthjtESEUH3ahwTLsTdYPk,3800
239
243
  dstack/_internal/server/background/tasks/process_volumes.py,sha256=YafZml-b-bD7M6S0UmY-rLV-pIIX-SdzuyaErqxrnyk,4939
240
244
  dstack/_internal/server/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
245
  dstack/_internal/server/migrations/env.py,sha256=RuhcN-CST86VzMatjqBMdYcG0fGGMZl_o1YgZTL-WDw,2831
@@ -263,6 +267,7 @@ dstack/_internal/server/migrations/versions/555138b1f77f_change_instancemodel_fo
263
267
  dstack/_internal/server/migrations/versions/58aa5162dcc3_add_gatewaymodel_configuration.py,sha256=pT07eQypORZtWp6K9hwP-wq_K_Tx4EYeKJ9FghIHKyI,834
264
268
  dstack/_internal/server/migrations/versions/5ad8debc8fe6_fixes_for_psql.py,sha256=OoZKEtzkvLPb5v0CHeM_bhJn_I5ZxKtjXk7S1_I-wJI,9429
265
269
  dstack/_internal/server/migrations/versions/5ec538b70e71_replace_instansestatus.py,sha256=8mFsp2g5pmQm--jjBEgOiuYELS9_Lah66nbURd7sHCo,807
270
+ dstack/_internal/server/migrations/versions/60e444118b6d_add_jobprometheusmetrics.py,sha256=PKqFqe6x6bkO8hrv73fes4uyBpzsemqwp3c-i5XzaS8,1195
266
271
  dstack/_internal/server/migrations/versions/63c3f19cb184_add_jobterminationreason_inactivity_.py,sha256=UyNT3d8Osa2MpuODQRdmmbHlt-qT-wHNNOUTzUEcLLI,2512
267
272
  dstack/_internal/server/migrations/versions/686fb8341ea5_add_user_emails.py,sha256=0FlRf5Mis9ZIc7X6M9yqPtyFqR2SKCTUFfZeDbqAXBU,809
268
273
  dstack/_internal/server/migrations/versions/710e5b3fac8f_add_encryption.py,sha256=nBURp4A6TpT13H1ccH4WyzkU2GGy3uDGKCNG88cAciw,1827
@@ -273,6 +278,7 @@ dstack/_internal/server/migrations/versions/866ec1d67184_replace_retrypolicy_lim
273
278
  dstack/_internal/server/migrations/versions/91a12fff6c76_add_repocredsmodel.py,sha256=aN4X-SLhgFEr7UtHkBf2PbiB9QxfL61N9MysThaOw_w,1463
274
279
  dstack/_internal/server/migrations/versions/91ac5e543037_extend_repos_creds_column.py,sha256=PjMznHl1fc2ZDCWwcbPbrbq-rcSWRMnomre4Mg7wmr4,873
275
280
  dstack/_internal/server/migrations/versions/98cd9c8b5927_add_volumemodel.py,sha256=s77lNvH24LRj-IR5RHI2_s61GV_2SOdsPHR4RLT9MBo,2619
281
+ dstack/_internal/server/migrations/versions/98d1b92988bc_add_jobterminationreason_terminated_due_.py,sha256=6E-T41R61zaHmMzHzzmDVnTW4SwB9NGbAKzmUhHVYsg,4626
276
282
  dstack/_internal/server/migrations/versions/99b4c8c954ea_add_termination_reason_message.py,sha256=Bf4IorZ-REe-LGz9F_LLHGLo6r4fpvuBnO8VZmh5YKY,2271
277
283
  dstack/_internal/server/migrations/versions/9eea6af28e10_added_fail_reason_for_instancemodel.py,sha256=n0iWQ3L1DWQqPIT-IRs9TR74psf-ZDjcYvSIfn80etY,1027
278
284
  dstack/_internal/server/migrations/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -304,10 +310,11 @@ dstack/_internal/server/routers/backends.py,sha256=nocj-M0m54t_rpjZQBk15XRIVDpXI
304
310
  dstack/_internal/server/routers/fleets.py,sha256=Tmw4hlviCBuntQPpp4J8XyQZyoK2-4o41OlcEP4NNtg,4867
305
311
  dstack/_internal/server/routers/gateways.py,sha256=am5HnyWUydgUbEjIdjYBcob8CEIrx4bRtdj9kQhutkA,3149
306
312
  dstack/_internal/server/routers/instances.py,sha256=ELxXF4BiS9e4YCKFmBp8U4SsjP8eGmbj9Q4LiLfgsgY,1592
307
- dstack/_internal/server/routers/logs.py,sha256=-OO3KAjKJM3nTzva8xx_g9Wg3hfMRBuun10FN3SrJs8,886
308
- dstack/_internal/server/routers/metrics.py,sha256=WEICSvIbs1-8zCgxF9WqgsR_9p0afDX_HjNW4-1LCOk,1581
313
+ dstack/_internal/server/routers/logs.py,sha256=_Euk283LbhlwHibJTKM-7YcpbeQFtWBqMfbOry3PSkU,1159
314
+ dstack/_internal/server/routers/metrics.py,sha256=wyKAD8fvqzjeqBj1WqySHgwx1_f76Wmmu14DQCfhThI,2240
309
315
  dstack/_internal/server/routers/pools.py,sha256=3NnwGQVLp5GFMypaXNKFqPjop746EEi4LSPMmx5NKek,4889
310
316
  dstack/_internal/server/routers/projects.py,sha256=0R-w_6WXUbNo6fREAexFUQ3RoOJF2D_Iz35elKjym14,2717
317
+ dstack/_internal/server/routers/prometheus.py,sha256=yKIe07ctzjaW73lc-u3h47Jg-XOnZzq1MfHSkjH5IhU,1229
311
318
  dstack/_internal/server/routers/repos.py,sha256=NvVYnkoc_GHwiZ1_Z5xb76ml0RE8QnnpnuBzeUTB7n0,3456
312
319
  dstack/_internal/server/routers/runs.py,sha256=WVA3KwRU3KKgaH0FwMUuBgVh_-OhGYJzHzfebQx76jU,7057
313
320
  dstack/_internal/server/routers/secrets.py,sha256=50_qJCTYRpnGSlLyS93gqoV17wWewOVmM65PcG1bT_Y,856
@@ -330,39 +337,39 @@ dstack/_internal/server/schemas/secrets.py,sha256=mfqLSM7PqxVQ-GIWB6RfPRUOvSvvaR
330
337
  dstack/_internal/server/schemas/users.py,sha256=FuDqwRVe3mOmv497vOZKjI0a_d4Wt2g4ZiCJcyfHEKA,495
331
338
  dstack/_internal/server/schemas/volumes.py,sha256=9iwaQLMhA6aj9XmtdU_9jWVhpzNOtFbDByAe-WYfYh0,673
332
339
  dstack/_internal/server/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
333
- dstack/_internal/server/security/permissions.py,sha256=K756I8fnBLBrq4PZwz1ttt74HI0UWBSmjaIfMHN5d1s,4425
340
+ dstack/_internal/server/security/permissions.py,sha256=ZIUIP5HGk1KG7vGfpZCxP4LsMuKHAz64iOUsAC7FebY,4425
334
341
  dstack/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
- dstack/_internal/server/services/config.py,sha256=b7m2wkVjtXDR46WMgYLw2uun9orM9lxXjnDp53oeASM,29525
342
+ dstack/_internal/server/services/config.py,sha256=vy0zXfZ60AMrdF10ntiyp6RX5VzAjZBBOgy-HNPiaMU,30369
336
343
  dstack/_internal/server/services/docker.py,sha256=3EcYPiVsrNBGDQYOb60QJ241mzTT6lJROYQXIwt-8dk,5351
337
- dstack/_internal/server/services/fleets.py,sha256=h5LL8FGOZMOl0kzLycP36U6k3SWl_bSnSn7oFg8ubQY,28980
344
+ dstack/_internal/server/services/fleets.py,sha256=ny25DmvWzDynq-FQshzqc-TwhyUmQS-N8loUPQK9MTE,29040
338
345
  dstack/_internal/server/services/locking.py,sha256=UV5kc-BgROBuNDpBrp8jkcf-fHPOpHLc8JufL-8mbN8,2453
339
346
  dstack/_internal/server/services/logging.py,sha256=Nu1628kW2hqB__N0Eyr07wGWjVWxfyJnczonTJ72kSM,417
340
- dstack/_internal/server/services/logs.py,sha256=53pymPDaM9-xXHFzCyEHdvM49JPTpsLI2aPTSP5zaPo,20090
341
- dstack/_internal/server/services/metrics.py,sha256=_YmAQ_oCzzklgk_O5iSJDZJhRk9rBqx8REkPcRQUTAo,3490
347
+ dstack/_internal/server/services/metrics.py,sha256=1f_JV4PUqJvA1x5Bav7XeKAkCD9e3C5fc5exh3jjErw,5706
342
348
  dstack/_internal/server/services/offers.py,sha256=GIaICztEu4zbcpIGHvNsfMVYmPvoYg5zcQ0apHNdgBw,6954
343
349
  dstack/_internal/server/services/permissions.py,sha256=l7Ngdelmn65vjw13NcOdaC6lBYMRuSw6FbHzYwdK3nE,1005
344
350
  dstack/_internal/server/services/placement.py,sha256=DWZ8-iAE3o0J0xaHikuJYZzpuBiq7lj41LiAP1PfoEs,1773
345
- dstack/_internal/server/services/pools.py,sha256=yDlNJn219satSuoxRmlxDG-BPrK0j7MdmGNa-HMyCsk,28886
351
+ dstack/_internal/server/services/pools.py,sha256=-lF9jrAosNpRxRG3PnbzLWgwPFidGFccjF7tgKyC67A,28911
346
352
  dstack/_internal/server/services/projects.py,sha256=HWOnFOC6LmvbjDzRKADv7tXKIDWthbO11zrsHU7vkew,14709
353
+ dstack/_internal/server/services/prometheus.py,sha256=TeVLbv5v_cv_mq3W47WINlIQgK_cPf-O6JysOXPWiFo,3456
347
354
  dstack/_internal/server/services/repos.py,sha256=f9ztN7jz_2gvD9hXF5sJwWDVyG2-NHRfjIdSukowPh8,9342
348
- dstack/_internal/server/services/runs.py,sha256=3m9oYKq08QQF1GlaOa6_2nYp9SMYoqvfjVnO3-fpTGY,36045
355
+ dstack/_internal/server/services/runs.py,sha256=GhCRgWpMqmM9o7plNA9uQmF4ce2mT_fZcFAZKpD9mZ8,37028
349
356
  dstack/_internal/server/services/storage.py,sha256=6I0xI_3_RpJNbKZwHjDnjrEwXGdHfiaeb5li15T-M1I,1884
350
357
  dstack/_internal/server/services/users.py,sha256=L-exfxHdhj3TKX-gSjezHrYK6tnrt5qsQs-zZng1tUI,7123
351
- dstack/_internal/server/services/volumes.py,sha256=UX-fqC3c240aG6EbdtVsXrJQbkF0O06IFZNtg6bA_tE,14551
358
+ dstack/_internal/server/services/volumes.py,sha256=jBB6A0gdn9BLRycikLJeUkOWDmQaAhbyQJokd129zf0,14612
352
359
  dstack/_internal/server/services/backends/__init__.py,sha256=Q8Ju0Shf2RAlIdi1CapJNUKOdUAFeRnxhNYti6GZiww,14923
353
360
  dstack/_internal/server/services/backends/handlers.py,sha256=j-MhBxrpdepoDG7f2tApjFnE23RVO5I15-hxHyOWnew,3251
354
361
  dstack/_internal/server/services/backends/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
- dstack/_internal/server/services/backends/configurators/aws.py,sha256=NVwLd9Ww0S0gFT1A2BqwMxItXJVwkKkVd1kg0HiQhXc,7899
362
+ dstack/_internal/server/services/backends/configurators/aws.py,sha256=PyyzH38rIQd7xM7tGnQjqtybcvdFNvqhZf6EIqiWvW0,9175
356
363
  dstack/_internal/server/services/backends/configurators/azure.py,sha256=AANl9dp4RmNT9Q_-ipcLDFp7w5F_-gIxogLthAJWqZY,20206
357
364
  dstack/_internal/server/services/backends/configurators/base.py,sha256=GHS0eBCRptdfZN1xISqPgOEt46oYK6C9Hpb3b_c0OtA,2433
358
365
  dstack/_internal/server/services/backends/configurators/cudo.py,sha256=o5KIXuJLFfzoeUqAivvMhwLy4GWDbKR6E1J9egP8T9g,3102
359
366
  dstack/_internal/server/services/backends/configurators/datacrunch.py,sha256=9rZPns9GwHywXsBFh47sa3IAnh0h7U92SLlHQD1Mj9s,2849
360
- dstack/_internal/server/services/backends/configurators/gcp.py,sha256=Rf5vjaJx_V0_h8vP93KOOKAUTBaKJoVUL3WZmxm-7yU,8970
367
+ dstack/_internal/server/services/backends/configurators/gcp.py,sha256=EuwwcucFxLgffk58TvH-GYI39gOn4h2_Wz-fi91Jhao,8839
361
368
  dstack/_internal/server/services/backends/configurators/kubernetes.py,sha256=HtZQfxTrCf23fn3QX36Z5RNUo78edr00xxgcUJKVulk,2518
362
369
  dstack/_internal/server/services/backends/configurators/lambdalabs.py,sha256=yVFOnKTplxl-rGDUVUDUG5R5sl1qmxQwImdnaSoNqf0,3325
363
370
  dstack/_internal/server/services/backends/configurators/nebius.py,sha256=tPch1yC4Tftli-rqt36I4HfYjfvwYRP_irrBJFHdhHY,3240
364
371
  dstack/_internal/server/services/backends/configurators/oci.py,sha256=4gImMOmrRuiwVRF-UFagKSpxQlEhaP1aHOsxp17hm8I,7444
365
- dstack/_internal/server/services/backends/configurators/runpod.py,sha256=By74Rqk-pK8o21CZe5V8IMauQvSKs2Y3W20LxecSnmc,3261
372
+ dstack/_internal/server/services/backends/configurators/runpod.py,sha256=SXOWYu1DD17gUKHGJm5fxZd5m-VUj5i7sWpMlTxxSrs,2733
366
373
  dstack/_internal/server/services/backends/configurators/tensordock.py,sha256=GsTy96c59AMULHxNH_0e6BjvdsBtpS9IH8BO6Fgwl5Y,3267
367
374
  dstack/_internal/server/services/backends/configurators/vastai.py,sha256=i--Iq5a-1pxo58z1fCCYP3O3Vz_bJoVcA9eXTxi-YZE,3036
368
375
  dstack/_internal/server/services/backends/configurators/vultr.py,sha256=T2nDVLkWy9jRzbIjNdA1YDwvL-vWEfjbMaC6qa7IHyY,3018
@@ -371,29 +378,34 @@ dstack/_internal/server/services/encryption/keys/__init__.py,sha256=47DEQpj8HBSa
371
378
  dstack/_internal/server/services/encryption/keys/aes.py,sha256=2He1p2_Rg6hnCeLIGJo-Yfdsij7so_338oY49RXuL3Q,2276
372
379
  dstack/_internal/server/services/encryption/keys/base.py,sha256=mqumJiidoexUPoqxhQG6J_SpC1WGYwkdjKm1MUWnXo8,352
373
380
  dstack/_internal/server/services/encryption/keys/identity.py,sha256=ryb_YSV6u4c7W1OsVfEpzJvZCrR4zZYlzLw_GpjpD2Q,741
374
- dstack/_internal/server/services/gateways/__init__.py,sha256=ceTzXRWu-pVghze9New465Kn61POTnvpI3RtVIjLgKE,20660
381
+ dstack/_internal/server/services/gateways/__init__.py,sha256=qs1TldKYvGKtWELFnfot7ocOO_V3ETeyjJAQI1nwWfY,20722
375
382
  dstack/_internal/server/services/gateways/client.py,sha256=1PH9gUjRkHegp37B27pjBVoPFk64KjxcE30eEPBTLM0,7321
376
383
  dstack/_internal/server/services/gateways/connection.py,sha256=ot3lV85XdmCT45vBWeyj57nLPcLPNm316zu3jMyeWjA,5625
377
384
  dstack/_internal/server/services/gateways/pool.py,sha256=0LclTl1tyx-doS78LeaAKjr-SMp98zuwh5f9s06JSd0,1914
378
- dstack/_internal/server/services/jobs/__init__.py,sha256=zxKGDUo_6Sjoh3VGMQVrxQn9OkwgJQJXeKo3DZWkRI8,25283
385
+ dstack/_internal/server/services/jobs/__init__.py,sha256=euq5U73vEGWxDmNASHjnZpWRc5Kp2Dpgy_opMwUDeeU,25444
379
386
  dstack/_internal/server/services/jobs/configurators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
380
- dstack/_internal/server/services/jobs/configurators/base.py,sha256=I21dp1P9XC49NNJL_bfihwXfhFd6G-yQXYFYk-EJPEI,10306
381
- dstack/_internal/server/services/jobs/configurators/dev.py,sha256=2EEtfOpNXP5d9b3ZErE3dA3Co8aAAv1fbx9wAjRZpGY,2018
387
+ dstack/_internal/server/services/jobs/configurators/base.py,sha256=C733nLS-3OEm9UpTz14dC0-m6YSFfJjn0YCGxNWCie4,10531
388
+ dstack/_internal/server/services/jobs/configurators/dev.py,sha256=_QOExS0ifCZMp4hLYaCuyb-ASQgAegpDguGWNdF_TUA,1953
382
389
  dstack/_internal/server/services/jobs/configurators/service.py,sha256=FOWrLE-6YFSMuGqjOwYTLMV4FuIM5lCMDFjS0l0CoLI,929
383
- dstack/_internal/server/services/jobs/configurators/task.py,sha256=ojCgdMyGak8u00tdu-th6U6w0pGRENV1mPtajwzeA_s,1502
390
+ dstack/_internal/server/services/jobs/configurators/task.py,sha256=0-B3oO-61Eq4-mmlLmqJPliFKHhvvIV0tqc12slcQuA,1436
384
391
  dstack/_internal/server/services/jobs/configurators/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
385
392
  dstack/_internal/server/services/jobs/configurators/extensions/base.py,sha256=xJbHxaaSJ1zjn8zuuApP1Xt2uBaedPhhc-IY0NtDDJQ,418
386
393
  dstack/_internal/server/services/jobs/configurators/extensions/vscode.py,sha256=DAj8OEVLyL1x8Jko2EXKhnAkcSnlO1sJk6o6eiiVkDI,1611
394
+ dstack/_internal/server/services/logs/__init__.py,sha256=NAjO1KeYvuDznN2EkfAaJt9S6Y00fo_dl3ob3WmsdGQ,3088
395
+ dstack/_internal/server/services/logs/aws.py,sha256=949k8t9H9v_-aedDjDWkw8yPVyhZemmsszcDDEL5Tb4,13711
396
+ dstack/_internal/server/services/logs/base.py,sha256=7eCB6SPF9iWviv4vZ_34SvfM_Bvi9DeVj1t7TxmrXKs,1273
397
+ dstack/_internal/server/services/logs/filelog.py,sha256=2IAFQgLf5NwA1NTibe3ybn47TEddgUKZ_7b4B4yiQOY,3856
398
+ dstack/_internal/server/services/logs/gcp.py,sha256=xV-BJ4NcU8bRVAEXa0dmdYpqNy93dIKC6axo0viQi5c,6867
387
399
  dstack/_internal/server/services/proxy/__init__.py,sha256=aklmvGaGXISztQft-nH8R98WRU6x_L0Fx3RwVDhwt3g,85
388
400
  dstack/_internal/server/services/proxy/auth.py,sha256=AVhDCnk9KvxJ7Jsd8Xmotl_29V4lNuBw8mQNBhx90Ws,485
389
401
  dstack/_internal/server/services/proxy/deps.py,sha256=u4dHHKBlTgC8Fnnl3onErgE1HGKFwyZTwvq0uT6IdQ4,846
390
402
  dstack/_internal/server/services/proxy/repo.py,sha256=2Uy90hFeLlQBqqId9Y2tn4mJO3bie9v6FdVP0y5Z9UU,7195
391
403
  dstack/_internal/server/services/proxy/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
- dstack/_internal/server/services/proxy/routers/service_proxy.py,sha256=8rsuenv9LUlFJghV8Ly4vewGmc4pDdVTyuU0xiNLuVQ,1581
404
+ dstack/_internal/server/services/proxy/routers/service_proxy.py,sha256=5oB-SX8f_f32tTs5aJe9ZuMycHAyVTQDO9xJcFmUKCs,1953
393
405
  dstack/_internal/server/services/proxy/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
394
406
  dstack/_internal/server/services/proxy/services/service_proxy.py,sha256=4JrSxHqhBYqU1oENii89Db-bzkFWExYrOy-0mNEhWBs,4879
395
407
  dstack/_internal/server/services/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
- dstack/_internal/server/services/runner/client.py,sha256=lQBQoUIMtKviSSQV9rx8VKfWXlRswGJOEI0TF7QV_oA,14961
408
+ dstack/_internal/server/services/runner/client.py,sha256=O6bZkSZJ_eqO0V8HU0-YAa46tbNuRHAy7ncMgcSh6d4,15413
397
409
  dstack/_internal/server/services/runner/ssh.py,sha256=H-X0015ZPwYq5tc31ytFF1uNaUAr9itAsABI2oPJWrk,5017
398
410
  dstack/_internal/server/services/services/__init__.py,sha256=-kbk6Qb0mGImhNtYhG7JRsmyc0rKGl0A4rRuN1Wq2bA,10617
399
411
  dstack/_internal/server/services/services/autoscalers.py,sha256=0o_w9La-ex_P3VKG88w_XN3hkLkzryv5l1cH3pkZyAE,4315
@@ -423,10 +435,10 @@ dstack/_internal/server/statics/e467d7d60aae81ab198b.svg,sha256=_XHc9mfQZgGkcy4h
423
435
  dstack/_internal/server/statics/eb9b344b73818fe2b71a.png,sha256=2H14eOCQRyZhFGJ1Kn2LH1j70kTF1Qop4vH-tiKqyPI,85
424
436
  dstack/_internal/server/statics/f517dd626eb964120de0.png,sha256=4QQuNa8SqmcZ67HK6739OHCyjnAJseU1bkcn454KRQs,159
425
437
  dstack/_internal/server/statics/f958aecddee5d8e3222c.png,sha256=8CoZkVNgRfOAe62X1dU-AZDvwh_nESKaQblEmaX2Xrs,87
426
- dstack/_internal/server/statics/index.html,sha256=muVBl2rWgBSginZYqpj6UUYul4uP5yn3-17Im1aEdyM,10468
427
- dstack/_internal/server/statics/main-2ac66bfcbd2e39830b88.js,sha256=-Wm36zACnQ7vd0xw1HVxiJ_mD1U-FbCMJqR-pY5vNcQ,6203467
428
- dstack/_internal/server/statics/main-2ac66bfcbd2e39830b88.js.map,sha256=TpUtWdd0O_j1Ylrw9950x2F9CL-ZsovzXWD4M74Qy1w,8137484
429
- dstack/_internal/server/statics/main-ad5150a441de98cd8987.css,sha256=yI_fXTjWkI4AxHPG0NnFIAJbcX1kzLskED0wt2h0HuI,1296028
438
+ dstack/_internal/server/statics/index.html,sha256=RfIoWz_lEtf_5hLEfRd9aSlDOG9njajkOlo1k4JNsQI,10468
439
+ dstack/_internal/server/statics/main-4eb116b97819badd1e2c.js,sha256=I3ITWBhxKLM5EHGr0RT_2ldQMMP4lLjVY_rlP6PeCzE,6201517
440
+ dstack/_internal/server/statics/main-4eb116b97819badd1e2c.js.map,sha256=R8hT6YsdRWW1yER9NNwu11tb-YU94BF2LprPkMJcCKo,8138204
441
+ dstack/_internal/server/statics/main-da9f8c06a69c20dac23e.css,sha256=2ObS4Rg6yWkbk7nQqw-lnLVdYC3L8X5N7xZMKcavMWg,1296312
430
442
  dstack/_internal/server/statics/manifest.json,sha256=430w2BoWVmYYVr14lDvUxx-ROPt3VjigzeMqfLeiSCM,340
431
443
  dstack/_internal/server/statics/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
432
444
  dstack/_internal/server/statics/assets/android-chrome-144x144.png,sha256=tB3V-95O-VVEoawN5V1XFoMQRSK0I6gthraV8bATGaw,23414
@@ -498,12 +510,13 @@ dstack/_internal/server/statics/assets/mstile-310x310.png,sha256=2URcB82M6AHrJcQ
498
510
  dstack/_internal/server/statics/assets/mstile-70x70.png,sha256=Uh-iXux5J5EkcBPRHbvJggmxxL5i7PavtazOv4hflCg,9034
499
511
  dstack/_internal/server/statics/assets/yandex-browser-50x50.png,sha256=GGaavXItFc_V5P2G2_MTLFtGDMatissn8YkdBMyGv54,5403
500
512
  dstack/_internal/server/statics/assets/yandex-browser-manifest.json,sha256=wQcuGCfkNsSmCXGg2IwxcwdykLSIx7xL3Y_WtmYYLq0,147
513
+ dstack/_internal/server/statics/static/media/entraID.d65d1f3e9486a8e56d24fc07b3230885.svg,sha256=_v0ZwN0Yi2FB4XNlplXWZ-jjOtFIFabQTcC2gyPIRE4,1302
501
514
  dstack/_internal/server/statics/static/media/github.1f7102513534c83a9d8d735d2b8c12a2.svg,sha256=mNW9cuKg4s5dYQv8ZMzPsYyLJgxUg4jYBTape-pIy8c,2179
502
515
  dstack/_internal/server/statics/static/media/logo.f602feeb138844eda97c8cb641461448.svg,sha256=z1mS8Qo_NNRDObJ41uZfbZA0ZieZUVTnROuJjoiQabE,16373
503
516
  dstack/_internal/server/statics/static/media/okta.12f178e6873a1100965f2a4dbd18fcec.svg,sha256=KqFI05gQM135zC1plF1WBRF2F7CyKL7km97WKsZjAHI,319
504
517
  dstack/_internal/server/statics/static/media/theme.3994c817bb7dda191c1c9640dee0bf42.svg,sha256=ZxFFBVZWuRLqmWH4zhwGLNtKjOzHj-5MGJRunFAtu1I,561
505
518
  dstack/_internal/server/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
506
- dstack/_internal/server/testing/common.py,sha256=xwIk9mNec_9OBvJYw_RH9kdOou0Hs8S0qxMor9SH2x4,28949
519
+ dstack/_internal/server/testing/common.py,sha256=twHKYVCN4iW7eb__wEyyMeIr5Rs2oSzrEqUS8o8-b10,30042
507
520
  dstack/_internal/server/testing/conf.py,sha256=-zhujfFjTHNfQDOK-hBck32By11c_kC0OeinB3esQGg,1902
508
521
  dstack/_internal/server/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
509
522
  dstack/_internal/server/utils/common.py,sha256=PbjXtqYy1taKXpyG5ys8cIrz9MXqc9dBAsR_9D1brrk,1414
@@ -524,17 +537,17 @@ dstack/_internal/utils/path.py,sha256=YRjmRGe7TQFwsmJBHMjOQhOZo5bieVCVbxOT5J_cbp
524
537
  dstack/_internal/utils/random_names.py,sha256=lVyzAmXhaSf2bAuvRFQ_ihLy42in1ydN4gJYsMw4GG8,3537
525
538
  dstack/_internal/utils/ssh.py,sha256=ylZfj9ef_IUCvNlghx5uugBnctA6AH35UBFKPYOo6po,11794
526
539
  dstack/api/__init__.py,sha256=oiBoHhNCHiA2nDrRYUVA1DBCvj49qHlybBOA8gygMc0,1370
527
- dstack/api/utils.py,sha256=rS8i4fSpmJd3RQMDoALC5QPak_gnFPdmYDbgdFh864g,4082
540
+ dstack/api/utils.py,sha256=_la3CRk1vgrPGkInPI1SOr33e8Jvh8ziJC32fjvKnaU,4188
528
541
  dstack/api/_public/__init__.py,sha256=mieMqlAjTHkbSzA-YJmObGG58f_z0QkbyIfF_UzHEDM,3506
529
542
  dstack/api/_public/backends.py,sha256=IBeotauJzlte379LzRM6ByZCl_98QemGZsm3p_WX98k,1056
530
543
  dstack/api/_public/pools.py,sha256=wlTai0px6aQNeKyL-6nOil6DCj-GdozqqDGmnTg4ubw,1033
531
544
  dstack/api/_public/repos.py,sha256=LYWy1W3Z-2y_D82Jln6YzU2F_asPULGJq1GM9HAAMIc,6173
532
545
  dstack/api/_public/resources.py,sha256=lTQM2nb7_QB2RCwmpQlBkYkpiN_aWjgF78wI7Op_RlQ,2947
533
- dstack/api/_public/runs.py,sha256=3527ziltD9UNTDPMkaHHUXXQog2VLFXKQ0zgmRsnCb4,24718
546
+ dstack/api/_public/runs.py,sha256=Hmdpv7UlcTa19lAazmER2aeac20xDD9S5Gwm4OihQpE,24857
534
547
  dstack/api/huggingface/__init__.py,sha256=oIrEij3wttLZ1yrywEGvCMd6zswMQrX5pPjrqdSi0UA,2201
535
548
  dstack/api/server/__init__.py,sha256=1Sw1bB8NItIFWlL1bdeUN1Tuwu3uaYOJWFrg1c4VULY,5801
536
549
  dstack/api/server/_backends.py,sha256=mMePYgFMHAUma3Gycx54VsaxAL_IFhBRcI4H4eWWMg0,1908
537
- dstack/api/server/_fleets.py,sha256=GfM8IABpDGSi68SV7FOmpO0wXtEFx7kFeK9AfEm_8o0,5008
550
+ dstack/api/server/_fleets.py,sha256=pmU8uv6WgBeoYvSMmPKfXYmrDnBcjXK2S1M3xiA47vQ,5148
538
551
  dstack/api/server/_gateways.py,sha256=_OcFOOxUdh4YIA15ZNQQT6mfj0cSKP2jJ_bQXxugS_w,2568
539
552
  dstack/api/server/_group.py,sha256=f9a_YvwZ7s1vDTQhOWHLwm3kO84C5R_zXToD4cxAnvY,432
540
553
  dstack/api/server/_logs.py,sha256=ng8QvFAIaoVOVChTK6Wuu5BeM6y7gAdx30KEYRsn9xA,500
@@ -542,7 +555,7 @@ dstack/api/server/_metrics.py,sha256=OPb8sLhI_U605sHOPrELgy0_6cNFLJVfpvr-qkEukRM
542
555
  dstack/api/server/_pools.py,sha256=PSs8R4FAKZk-jtD4GmATceMyipnasOy2XEg-8lmiN28,2715
543
556
  dstack/api/server/_projects.py,sha256=g6kNSU6jer8u7Kaut1I0Ft4wRMLBBCQShJf3fOB63hQ,1440
544
557
  dstack/api/server/_repos.py,sha256=gf9fAQw3rzqfPGq-uT8I2Ju_Zn6G4aWTKis8gb8Polc,1885
545
- dstack/api/server/_runs.py,sha256=rhgmP7JM_Rqtd2jbo1V5Fx9xb5A6vRbvIds0FZQ_SC4,7784
558
+ dstack/api/server/_runs.py,sha256=XSC8X6QDC61R7lpcqchjczk_Y5ONLEqwWGVJdjvzugo,8011
546
559
  dstack/api/server/_secrets.py,sha256=VqLfrIcmBJtPxNDRkXTG44H5SWoY788YJapScUukvdY,1576
547
560
  dstack/api/server/_users.py,sha256=XzhgGKc5Tsr0-xkz3T6rGyWZ1tO7aYNhLux2eE7dAoY,1738
548
561
  dstack/api/server/_volumes.py,sha256=jidkfa35JjKCzRUyafC8rhLd0QpCi6WXg4DbmD8TDoA,1790
@@ -568,6 +581,8 @@ tests/_internal/core/backends/aws/test_resources.py,sha256=0Qz9YVjN874UWaZPFkVX9
568
581
  tests/_internal/core/backends/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
569
582
  tests/_internal/core/backends/azure/test_compute.py,sha256=PkckOfdGyVjOfqbE0uOUD92MlltKXxkAw0Wu1IbOVMQ,2134
570
583
  tests/_internal/core/backends/azure/test_resources.py,sha256=Bi3g0BgtOiTMC1vuU7rtELsey5E-5jmB30vk-jEJF9M,1715
584
+ tests/_internal/core/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
585
+ tests/_internal/core/backends/base/test_compute.py,sha256=LkeECcBu5SPNbysLHJWDGS_8mTbSZ1L5-ZD0Dh4Fv18,2118
571
586
  tests/_internal/core/backends/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
572
587
  tests/_internal/core/backends/gcp/test_resources.py,sha256=7nkVM9w-cVZov1M6SmOKm5W-JhooQCIgph4i-MGZx3c,1638
573
588
  tests/_internal/core/backends/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -604,7 +619,7 @@ tests/_internal/proxy/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
604
619
  tests/_internal/proxy/lib/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
605
620
  tests/_internal/proxy/lib/routers/test_model_proxy.py,sha256=xPCQ9MGBNvRH8rhKZkvkcugxPzluySgErWXE3QsoPjg,8926
606
621
  tests/_internal/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
607
- tests/_internal/server/conftest.py,sha256=jUinigvS7Ryy-9hGzTIBkgm8vs55m_y1VLa9edEhrp4,1491
622
+ tests/_internal/server/conftest.py,sha256=5FbBihFl5tznVw0XjwSqI5P32jV12_i75UBt80V7wxo,1522
608
623
  tests/_internal/server/test_app.py,sha256=nIDp8nlWBaW6yQRhGtQZAwOVM55maF8vLw1YqYXIUTQ,605
609
624
  tests/_internal/server/test_migrations.py,sha256=8MV1uVSCY-UG_dG6M4a7ekSsGi9CqHjobopc-H5-WKg,2107
610
625
  tests/_internal/server/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -614,22 +629,24 @@ tests/_internal/server/background/tasks/test_process_gateways.py,sha256=h7jzDFQp
614
629
  tests/_internal/server/background/tasks/test_process_instances.py,sha256=-ATbgOT8XAeqGmPn4XPlSJzxnrm0haAJhX13nWOBOtM,24816
615
630
  tests/_internal/server/background/tasks/test_process_metrics.py,sha256=eirq386mVZqX_PqctuX7CxO38Prwy8RH2UesYXo3CnQ,5083
616
631
  tests/_internal/server/background/tasks/test_process_placement_groups.py,sha256=shHqZvS8QoNwQe8J29-aHk2X2HqX-gsxcQiZevU8yuY,1528
617
- tests/_internal/server/background/tasks/test_process_running_jobs.py,sha256=zm0eGL3MY5H7YAZuKO0fTqyU0Tb-W2lGniHN6XwOXoE,25542
632
+ tests/_internal/server/background/tasks/test_process_prometheus_metrics.py,sha256=4qZ-nqlqYNJ2zrhD8f_HWxRvENDSCKLpV7xTIgTe_9U,7285
633
+ tests/_internal/server/background/tasks/test_process_running_jobs.py,sha256=Xh2fTsQdlurxQlIFTaMedIUTwzELr-b7zWQ-Gi0dvKc,30440
618
634
  tests/_internal/server/background/tasks/test_process_runs.py,sha256=Yv6f2CDZ-ejDGo7uOKyyAGxYLsvqyjNo4Zw1cCQbjgM,14489
619
635
  tests/_internal/server/background/tasks/test_process_submitted_jobs.py,sha256=Sf4aDa1ZYw5Sz3xAw8K0hoI-VDesv7Ew3gZdAzQvj_4,24451
620
636
  tests/_internal/server/background/tasks/test_process_submitted_volumes.py,sha256=njfRDdDzVtDL8rech_004Wf5z5PpoQVWFufKh1yUyYY,2171
621
637
  tests/_internal/server/background/tasks/test_process_terminating_jobs.py,sha256=VZsfP1NVxkcLSNWfEXDFe_vQZUQfuG0B5i-krXKP_IQ,14147
622
638
  tests/_internal/server/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
623
- tests/_internal/server/routers/test_backends.py,sha256=4bY8oMMKB3xIRWUfVIUcI4dhDz1ukcpEeWOLllxmPUw,65231
624
- tests/_internal/server/routers/test_fleets.py,sha256=ap3Jjg2iiwuklosu2_-xx-cJBlM6uZN5CQfGudORPf0,35105
639
+ tests/_internal/server/routers/test_backends.py,sha256=d95ZS97zSRHdmmDTxIPzYQWU-hb2_DvlNo2lcF0NNzw,65273
640
+ tests/_internal/server/routers/test_fleets.py,sha256=aiWfsXgJCePVLHCuvaBb99E3uC-cXZ_eqoRBezhzzZo,35201
625
641
  tests/_internal/server/routers/test_gateways.py,sha256=bb0pzm7uu1X3V8755b7ZZUHPSLk0Rd6CjoMCdionWVA,23535
626
642
  tests/_internal/server/routers/test_instances.py,sha256=BAWSCjXhe4N1px6BvPEcdAKrQHL5CkrHWvuGrzPRapc,9516
627
- tests/_internal/server/routers/test_logs.py,sha256=ADugQZhT2wvZlhnTQUaSkUFbL-kpW2s0qf29onxH7vA,3981
628
- tests/_internal/server/routers/test_metrics.py,sha256=NSdb_x_1Nwsqgrf6KXBf257qd29CXcSN30yk_BQx2CE,5923
643
+ tests/_internal/server/routers/test_logs.py,sha256=NZwyJlgjMOGq4XEx7-VDjTpniYPhZpsbZvB0dTawaog,3989
644
+ tests/_internal/server/routers/test_metrics.py,sha256=dCMG9PFu1NSsU48kZJoImwOTiXQUblpk4m3OwQjAijg,6552
629
645
  tests/_internal/server/routers/test_pools.py,sha256=QQ00pqFVUCo1bSfwWcA2UztyI6Fr0bfU1rj_TnEnVG0,25275
630
646
  tests/_internal/server/routers/test_projects.py,sha256=Pa_YL9lYhYt06TFmuZFEf9pxc-K3fM9L29ULf4gCELw,23950
647
+ tests/_internal/server/routers/test_prometheus.py,sha256=4UJuEbvzzlhHr82Td5TcK8wXUyiJi2cWe4eLSd0c-dI,11386
631
648
  tests/_internal/server/routers/test_repos.py,sha256=4O4mCDlAPh8xJU_XWtwLhFWRkoTxXvZC1N2DLPyz2AI,17225
632
- tests/_internal/server/routers/test_runs.py,sha256=t6tuvN8JHKSKgd_PRTlPo3VzsJ3aE_EmW9f8cczxQ4M,71547
649
+ tests/_internal/server/routers/test_runs.py,sha256=l5i0hgBs0MYHEdrhDTp7-S7KuUM98ygUf4_u-7RYE1Q,72150
633
650
  tests/_internal/server/routers/test_server.py,sha256=ROkuRNNJEkMQuK8guZ3Qy3iRRfiWvPIJJJDc09BI0D4,489
634
651
  tests/_internal/server/routers/test_users.py,sha256=5QSLvfn9SroGsZoBGmSTEaaqJcdEO8EUUy_YuvLL8ss,12787
635
652
  tests/_internal/server/routers/test_volumes.py,sha256=fVv7sVo9POFImal9Mlkaw8CJOAR67S_eYHxIReHebBU,16241
@@ -637,7 +654,8 @@ tests/_internal/server/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
637
654
  tests/_internal/server/services/test_config.py,sha256=KfPyYSSsLaQszBAgqYeM2Tt5YkRiV-at0ik86ecdrtE,5168
638
655
  tests/_internal/server/services/test_docker.py,sha256=QsnoVJUnvzcd1Tpw0UtKXtDSCr9nh_jmtVSkOi7J4ug,5628
639
656
  tests/_internal/server/services/test_fleets.py,sha256=WqK9Bs3Nfew45n4WunZhvIvCw0VHJ2w5t0-4CakxFgU,8222
640
- tests/_internal/server/services/test_logs.py,sha256=QmaI07u9O0czwH8J2eZO3mOYnutAtIrDTUrF9CJLdwU,29647
657
+ tests/_internal/server/services/test_logs.py,sha256=z1t2rKe-egRLfK78sH6SCMB2ULwh3F8XgaB1np6qb88,29754
658
+ tests/_internal/server/services/test_metrics.py,sha256=Ffd22qvMMXG_h-uOgr3K1_ZPDwGWVMcgOdgvWvUssmE,5634
641
659
  tests/_internal/server/services/test_offers.py,sha256=t0nQNjjm-fvIqHIOA_99hokrdTXwpYrgzjaQjqJXs8w,7814
642
660
  tests/_internal/server/services/test_pools.py,sha256=aPF4R6_VCeDR4AcjQ0H2J1BKivoVs-JUNQBJZ-IYdPg,7436
643
661
  tests/_internal/server/services/test_repos.py,sha256=o2D0xmOPYaiwDq6nNJNtqYMSuSz_xKJ_ZChVOvWIhJY,14289
@@ -669,9 +687,9 @@ tests/_internal/utils/test_path.py,sha256=rzS-1YCxsFUocBe42dghLOMFNymPruGrA7bqFZ
669
687
  tests/_internal/utils/test_ssh.py,sha256=V-cBFPhD--9eM9d1uQQgpj2gnYLA3c43f4cX9uJ6E-U,1743
670
688
  tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
671
689
  tests/api/test_utils.py,sha256=SSSqHcNE5cZVqDq4n2sKZthRoXaZ_Bx7z1AAN5xTM9s,391
672
- dstack-0.18.42.dist-info/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
673
- dstack-0.18.42.dist-info/METADATA,sha256=vSyb16zzc0XeDvb0drJPn91GJqIajnyIKNc8RY3THtE,17690
674
- dstack-0.18.42.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
675
- dstack-0.18.42.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
676
- dstack-0.18.42.dist-info/top_level.txt,sha256=3BrIO1zrqxT9P20ymhRM6k15meZXzbPL6ykBlDZG2_k,13
677
- dstack-0.18.42.dist-info/RECORD,,
690
+ dstack-0.18.44.dist-info/LICENSE.md,sha256=qDABaRGjSKVOib1U8viw2P_96sIK7Puo426784oD9f8,15976
691
+ dstack-0.18.44.dist-info/METADATA,sha256=0k_MJce8Z7jYZKDI2VVaKLWq_FFneOWj7cSjauehGjo,18232
692
+ dstack-0.18.44.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
693
+ dstack-0.18.44.dist-info/entry_points.txt,sha256=GnLrMS8hx3rWAySQjA7tPNhtixV6a-brRkmal1PKoHc,58
694
+ dstack-0.18.44.dist-info/top_level.txt,sha256=3BrIO1zrqxT9P20ymhRM6k15meZXzbPL6ykBlDZG2_k,13
695
+ dstack-0.18.44.dist-info/RECORD,,
File without changes
@@ -0,0 +1,56 @@
1
+ import re
2
+
3
+ from dstack._internal.core.backends.base.compute import (
4
+ generate_unique_backend_name,
5
+ generate_unique_gateway_instance_name,
6
+ generate_unique_instance_name,
7
+ generate_unique_volume_name,
8
+ )
9
+ from dstack._internal.server.testing.common import (
10
+ get_gateway_compute_configuration,
11
+ get_instance_configuration,
12
+ get_volume,
13
+ )
14
+
15
+
16
+ class TestGenerateUniqueInstanceName:
17
+ def test_generates_name(self):
18
+ configuration = get_instance_configuration(
19
+ project_name="project1", instance_name="my-instance"
20
+ )
21
+ name = generate_unique_instance_name(configuration, 60)
22
+ assert re.match(r"^dstack-project1-my-instance-[a-z0-9]{8}$", name)
23
+
24
+
25
+ class TestGenerateUniqueGatewayInstanceName:
26
+ def test_generates_name(self):
27
+ configuration = get_gateway_compute_configuration(
28
+ project_name="project1", instance_name="my-gateway"
29
+ )
30
+ name = generate_unique_gateway_instance_name(configuration, 60)
31
+ assert re.match(r"^dstack-project1-my-gateway-[a-z0-9]{8}$", name)
32
+
33
+
34
+ class TestGenerateUniqueVolumeName:
35
+ def test_generates_name(self):
36
+ volume = get_volume(project_name="project1", name="my-volume")
37
+ name = generate_unique_volume_name(volume, 60)
38
+ assert re.match(r"^dstack-project1-my-volume-[a-z0-9]{8}$", name)
39
+
40
+
41
+ class TestGenerateUniqueBackendName:
42
+ def test_generates_name_with_project(self):
43
+ name = generate_unique_backend_name("instance", "project", 60)
44
+ assert re.match(r"^dstack-project-instance-[a-z0-9]{8}$", name)
45
+
46
+ def test_generates_name_without_project(self):
47
+ name = generate_unique_backend_name("instance", None, 60)
48
+ assert re.match(r"^dstack-instance-[a-z0-9]{8}$", name)
49
+
50
+ def test_truncates_long_names(self):
51
+ name = generate_unique_backend_name("a" * 100, "project", 30)
52
+ assert re.match(r"^dstack-project-aaaaaa-[a-z0-9]{8}$", name)
53
+
54
+ def test_validates_project_name(self):
55
+ name = generate_unique_backend_name("instance", "invalid_project!@", 60)
56
+ assert re.match(r"^dstack-instance-[a-z0-9]{8}$", name)