lightning-sdk 2025.10.22__py3-none-any.whl → 2025.10.27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. lightning_sdk/__init__.py +1 -1
  2. lightning_sdk/api/job_api.py +4 -1
  3. lightning_sdk/api/mmt_api.py +4 -1
  4. lightning_sdk/cli/entrypoint.py +3 -0
  5. lightning_sdk/cli/groups.py +7 -0
  6. lightning_sdk/cli/license/__init__.py +14 -0
  7. lightning_sdk/cli/license/get.py +15 -0
  8. lightning_sdk/cli/license/list.py +45 -0
  9. lightning_sdk/cli/license/set.py +13 -0
  10. lightning_sdk/cli/studio/create.py +1 -1
  11. lightning_sdk/cli/utils/handle_machine_and_gpus_args.py +1 -3
  12. lightning_sdk/job/base.py +7 -0
  13. lightning_sdk/job/job.py +8 -0
  14. lightning_sdk/job/v1.py +3 -0
  15. lightning_sdk/job/v2.py +4 -0
  16. lightning_sdk/lightning_cloud/openapi/__init__.py +6 -0
  17. lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py +182 -0
  18. lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +117 -0
  19. lightning_sdk/lightning_cloud/openapi/models/__init__.py +6 -0
  20. lightning_sdk/lightning_cloud/openapi/models/update1.py +27 -1
  21. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +27 -1
  22. lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +27 -1
  23. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metric.py +201 -0
  24. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_metrics_response.py +123 -0
  25. lightning_sdk/lightning_cloud/openapi/models/v1_list_platform_notifications_response.py +123 -0
  26. lightning_sdk/lightning_cloud/openapi/models/v1_platform_notification.py +279 -0
  27. lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_request.py +97 -0
  28. lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_response.py +123 -0
  29. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +105 -131
  30. lightning_sdk/machine.py +3 -0
  31. lightning_sdk/mmt/base.py +7 -0
  32. lightning_sdk/mmt/mmt.py +8 -0
  33. lightning_sdk/mmt/v1.py +3 -1
  34. lightning_sdk/mmt/v2.py +4 -0
  35. lightning_sdk/pipeline/steps.py +6 -0
  36. lightning_sdk/plugin.py +4 -0
  37. lightning_sdk/studio.py +45 -11
  38. lightning_sdk/utils/config.py +18 -3
  39. lightning_sdk/utils/resolve.py +6 -1
  40. {lightning_sdk-2025.10.22.dist-info → lightning_sdk-2025.10.27.dist-info}/METADATA +1 -1
  41. {lightning_sdk-2025.10.22.dist-info → lightning_sdk-2025.10.27.dist-info}/RECORD +45 -35
  42. {lightning_sdk-2025.10.22.dist-info → lightning_sdk-2025.10.27.dist-info}/LICENSE +0 -0
  43. {lightning_sdk-2025.10.22.dist-info → lightning_sdk-2025.10.27.dist-info}/WHEEL +0 -0
  44. {lightning_sdk-2025.10.22.dist-info → lightning_sdk-2025.10.27.dist-info}/entry_points.txt +0 -0
  45. {lightning_sdk-2025.10.22.dist-info → lightning_sdk-2025.10.27.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,123 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ external/v1/auth_service.proto
5
+
6
+ No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501
7
+
8
+ OpenAPI spec version: version not set
9
+
10
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
11
+
12
+ NOTE
13
+ ----
14
+ standard swagger-codegen-cli for this python client has been modified
15
+ by custom templates. The purpose of these templates is to include
16
+ typing information in the API and Model code. Please refer to the
17
+ main grid repository for more info
18
+ """
19
+
20
+ import pprint
21
+ import re # noqa: F401
22
+
23
+ from typing import TYPE_CHECKING
24
+
25
+ import six
26
+
27
+ if TYPE_CHECKING:
28
+ from datetime import datetime
29
+ from lightning_sdk.lightning_cloud.openapi.models import *
30
+
31
+ class V1ResetAPIKeyResponse(object):
32
+ """NOTE: This class is auto generated by the swagger code generator program.
33
+
34
+ Do not edit the class manually.
35
+ """
36
+ """
37
+ Attributes:
38
+ swagger_types (dict): The key is attribute name
39
+ and the value is attribute type.
40
+ attribute_map (dict): The key is attribute name
41
+ and the value is json key in definition.
42
+ """
43
+ swagger_types = {
44
+ 'api_key': 'str'
45
+ }
46
+
47
+ attribute_map = {
48
+ 'api_key': 'apiKey'
49
+ }
50
+
51
+ def __init__(self, api_key: 'str' =None): # noqa: E501
52
+ """V1ResetAPIKeyResponse - a model defined in Swagger""" # noqa: E501
53
+ self._api_key = None
54
+ self.discriminator = None
55
+ if api_key is not None:
56
+ self.api_key = api_key
57
+
58
+ @property
59
+ def api_key(self) -> 'str':
60
+ """Gets the api_key of this V1ResetAPIKeyResponse. # noqa: E501
61
+
62
+
63
+ :return: The api_key of this V1ResetAPIKeyResponse. # noqa: E501
64
+ :rtype: str
65
+ """
66
+ return self._api_key
67
+
68
+ @api_key.setter
69
+ def api_key(self, api_key: 'str'):
70
+ """Sets the api_key of this V1ResetAPIKeyResponse.
71
+
72
+
73
+ :param api_key: The api_key of this V1ResetAPIKeyResponse. # noqa: E501
74
+ :type: str
75
+ """
76
+
77
+ self._api_key = api_key
78
+
79
+ def to_dict(self) -> dict:
80
+ """Returns the model properties as a dict"""
81
+ result = {}
82
+
83
+ for attr, _ in six.iteritems(self.swagger_types):
84
+ value = getattr(self, attr)
85
+ if isinstance(value, list):
86
+ result[attr] = list(map(
87
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
88
+ value
89
+ ))
90
+ elif hasattr(value, "to_dict"):
91
+ result[attr] = value.to_dict()
92
+ elif isinstance(value, dict):
93
+ result[attr] = dict(map(
94
+ lambda item: (item[0], item[1].to_dict())
95
+ if hasattr(item[1], "to_dict") else item,
96
+ value.items()
97
+ ))
98
+ else:
99
+ result[attr] = value
100
+ if issubclass(V1ResetAPIKeyResponse, dict):
101
+ for key, value in self.items():
102
+ result[key] = value
103
+
104
+ return result
105
+
106
+ def to_str(self) -> str:
107
+ """Returns the string representation of the model"""
108
+ return pprint.pformat(self.to_dict())
109
+
110
+ def __repr__(self) -> str:
111
+ """For `print` and `pprint`"""
112
+ return self.to_str()
113
+
114
+ def __eq__(self, other: 'V1ResetAPIKeyResponse') -> bool:
115
+ """Returns true if both objects are equal"""
116
+ if not isinstance(other, V1ResetAPIKeyResponse):
117
+ return False
118
+
119
+ return self.__dict__ == other.__dict__
120
+
121
+ def __ne__(self, other: 'V1ResetAPIKeyResponse') -> bool:
122
+ """Returns true if both objects are not equal"""
123
+ return not self == other
@@ -63,7 +63,6 @@ class V1UserFeatures(object):
63
63
  'deployment_persistent_disk': 'bool',
64
64
  'drive_v2': 'bool',
65
65
  'enterprise_compute_admin': 'bool',
66
- 'f227': 'bool',
67
66
  'f234': 'bool',
68
67
  'f236': 'bool',
69
68
  'f239': 'bool',
@@ -72,25 +71,25 @@ class V1UserFeatures(object):
72
71
  'f243': 'bool',
73
72
  'f245': 'bool',
74
73
  'f247': 'bool',
75
- 'f248': 'bool',
76
74
  'f250': 'bool',
77
75
  'f252': 'bool',
78
76
  'f253': 'bool',
79
77
  'f254': 'bool',
80
78
  'f255': 'bool',
81
- 'f257': 'bool',
82
79
  'f258': 'bool',
83
80
  'f259': 'bool',
84
81
  'f260': 'bool',
85
82
  'f261': 'bool',
86
83
  'f262': 'bool',
87
84
  'f263': 'bool',
88
- 'f264': 'bool',
89
85
  'f265': 'bool',
90
86
  'f266': 'bool',
87
+ 'f267': 'bool',
88
+ 'f268': 'bool',
89
+ 'f269': 'bool',
90
+ 'f270': 'bool',
91
91
  'fair_share': 'bool',
92
92
  'featured_studios_admin': 'bool',
93
- 'gcs_connections_optimized': 'bool',
94
93
  'job_artifacts_v2': 'bool',
95
94
  'kubernetes_cluster_ui': 'bool',
96
95
  'kubernetes_clusters': 'bool',
@@ -155,7 +154,6 @@ class V1UserFeatures(object):
155
154
  'deployment_persistent_disk': 'deploymentPersistentDisk',
156
155
  'drive_v2': 'driveV2',
157
156
  'enterprise_compute_admin': 'enterpriseComputeAdmin',
158
- 'f227': 'f227',
159
157
  'f234': 'f234',
160
158
  'f236': 'f236',
161
159
  'f239': 'f239',
@@ -164,25 +162,25 @@ class V1UserFeatures(object):
164
162
  'f243': 'f243',
165
163
  'f245': 'f245',
166
164
  'f247': 'f247',
167
- 'f248': 'f248',
168
165
  'f250': 'f250',
169
166
  'f252': 'f252',
170
167
  'f253': 'f253',
171
168
  'f254': 'f254',
172
169
  'f255': 'f255',
173
- 'f257': 'f257',
174
170
  'f258': 'f258',
175
171
  'f259': 'f259',
176
172
  'f260': 'f260',
177
173
  'f261': 'f261',
178
174
  'f262': 'f262',
179
175
  'f263': 'f263',
180
- 'f264': 'f264',
181
176
  'f265': 'f265',
182
177
  'f266': 'f266',
178
+ 'f267': 'f267',
179
+ 'f268': 'f268',
180
+ 'f269': 'f269',
181
+ 'f270': 'f270',
183
182
  'fair_share': 'fairShare',
184
183
  'featured_studios_admin': 'featuredStudiosAdmin',
185
- 'gcs_connections_optimized': 'gcsConnectionsOptimized',
186
184
  'job_artifacts_v2': 'jobArtifactsV2',
187
185
  'kubernetes_cluster_ui': 'kubernetesClusterUi',
188
186
  'kubernetes_clusters': 'kubernetesClusters',
@@ -224,7 +222,7 @@ class V1UserFeatures(object):
224
222
  'writable_s3_connections': 'writableS3Connections'
225
223
  }
226
224
 
227
- def __init__(self, affiliate_links: 'bool' =None, agents_v2: 'bool' =None, ai_hub_monetization: 'bool' =None, auto_fast_load: 'bool' =None, b2c_experience: 'bool' =None, byo_machine_type: 'bool' =None, cap_add: 'list[str]' =None, cap_drop: 'list[str]' =None, capacity_reservation_byoc: 'bool' =None, capacity_reservation_dry_run: 'bool' =None, chat_models: 'bool' =None, cloudspace_schedules: 'bool' =None, code_tab: 'bool' =None, collab_screen_sharing: 'bool' =None, control_center_monitoring: 'bool' =None, cost_attribution_settings: 'bool' =None, custom_app_domain: 'bool' =None, datasets: 'bool' =None, default_one_cluster: 'bool' =None, deployment_persistent_disk: 'bool' =None, drive_v2: 'bool' =None, enterprise_compute_admin: 'bool' =None, f227: 'bool' =None, f234: 'bool' =None, f236: 'bool' =None, f239: 'bool' =None, f240: 'bool' =None, f241: 'bool' =None, f243: 'bool' =None, f245: 'bool' =None, f247: 'bool' =None, f248: 'bool' =None, f250: 'bool' =None, f252: 'bool' =None, f253: 'bool' =None, f254: 'bool' =None, f255: 'bool' =None, f257: 'bool' =None, f258: 'bool' =None, f259: 'bool' =None, f260: 'bool' =None, f261: 'bool' =None, f262: 'bool' =None, f263: 'bool' =None, f264: 'bool' =None, f265: 'bool' =None, f266: 'bool' =None, fair_share: 'bool' =None, featured_studios_admin: 'bool' =None, gcs_connections_optimized: 'bool' =None, job_artifacts_v2: 'bool' =None, kubernetes_cluster_ui: 'bool' =None, kubernetes_clusters: 'bool' =None, landing_studios: 'bool' =None, lit_logger: 'bool' =None, marketplace: 'bool' =None, mmt_fault_tolerance: 'bool' =None, mmt_strategy_selector: 'bool' =None, model_api_dashboard: 'bool' =None, multiple_studio_versions: 'bool' =None, nerf_fs_nonpaying: 'bool' =None, org_level_member_permissions: 'bool' =None, org_usage_limits: 'bool' =None, persistent_disk: 'bool' =None, plugin_distributed: 'bool' =None, plugin_inference: 'bool' =None, plugin_label_studio: 'bool' =None, plugin_langflow: 'bool' =None, plugin_python_profiler: 'bool' =None, plugin_sweeps: 'bool' =None, pricing_updates: 'bool' =None, product_generator: 'bool' =None, product_license: 'bool' =None, project_selector: 'bool' =None, publish_pipelines: 'bool' =None, reserved_machines_tab: 'bool' =None, restartable_jobs: 'bool' =None, runnable_public_studio_page: 'bool' =None, security_docs: 'bool' =None, show_dev_admin: 'bool' =None, slurm: 'bool' =None, specialised_studios: 'bool' =None, storage_overuse_deletion: 'bool' =None, studio_config: 'bool' =None, studio_sharing_v2: 'bool' =None, studio_version_visibility: 'bool' =None, vultr: 'bool' =None, weka: 'bool' =None, writable_s3_connections: 'bool' =None): # noqa: E501
225
+ def __init__(self, affiliate_links: 'bool' =None, agents_v2: 'bool' =None, ai_hub_monetization: 'bool' =None, auto_fast_load: 'bool' =None, b2c_experience: 'bool' =None, byo_machine_type: 'bool' =None, cap_add: 'list[str]' =None, cap_drop: 'list[str]' =None, capacity_reservation_byoc: 'bool' =None, capacity_reservation_dry_run: 'bool' =None, chat_models: 'bool' =None, cloudspace_schedules: 'bool' =None, code_tab: 'bool' =None, collab_screen_sharing: 'bool' =None, control_center_monitoring: 'bool' =None, cost_attribution_settings: 'bool' =None, custom_app_domain: 'bool' =None, datasets: 'bool' =None, default_one_cluster: 'bool' =None, deployment_persistent_disk: 'bool' =None, drive_v2: 'bool' =None, enterprise_compute_admin: 'bool' =None, f234: 'bool' =None, f236: 'bool' =None, f239: 'bool' =None, f240: 'bool' =None, f241: 'bool' =None, f243: 'bool' =None, f245: 'bool' =None, f247: 'bool' =None, f250: 'bool' =None, f252: 'bool' =None, f253: 'bool' =None, f254: 'bool' =None, f255: 'bool' =None, f258: 'bool' =None, f259: 'bool' =None, f260: 'bool' =None, f261: 'bool' =None, f262: 'bool' =None, f263: 'bool' =None, f265: 'bool' =None, f266: 'bool' =None, f267: 'bool' =None, f268: 'bool' =None, f269: 'bool' =None, f270: 'bool' =None, fair_share: 'bool' =None, featured_studios_admin: 'bool' =None, job_artifacts_v2: 'bool' =None, kubernetes_cluster_ui: 'bool' =None, kubernetes_clusters: 'bool' =None, landing_studios: 'bool' =None, lit_logger: 'bool' =None, marketplace: 'bool' =None, mmt_fault_tolerance: 'bool' =None, mmt_strategy_selector: 'bool' =None, model_api_dashboard: 'bool' =None, multiple_studio_versions: 'bool' =None, nerf_fs_nonpaying: 'bool' =None, org_level_member_permissions: 'bool' =None, org_usage_limits: 'bool' =None, persistent_disk: 'bool' =None, plugin_distributed: 'bool' =None, plugin_inference: 'bool' =None, plugin_label_studio: 'bool' =None, plugin_langflow: 'bool' =None, plugin_python_profiler: 'bool' =None, plugin_sweeps: 'bool' =None, pricing_updates: 'bool' =None, product_generator: 'bool' =None, product_license: 'bool' =None, project_selector: 'bool' =None, publish_pipelines: 'bool' =None, reserved_machines_tab: 'bool' =None, restartable_jobs: 'bool' =None, runnable_public_studio_page: 'bool' =None, security_docs: 'bool' =None, show_dev_admin: 'bool' =None, slurm: 'bool' =None, specialised_studios: 'bool' =None, storage_overuse_deletion: 'bool' =None, studio_config: 'bool' =None, studio_sharing_v2: 'bool' =None, studio_version_visibility: 'bool' =None, vultr: 'bool' =None, weka: 'bool' =None, writable_s3_connections: 'bool' =None): # noqa: E501
228
226
  """V1UserFeatures - a model defined in Swagger""" # noqa: E501
229
227
  self._affiliate_links = None
230
228
  self._agents_v2 = None
@@ -248,7 +246,6 @@ class V1UserFeatures(object):
248
246
  self._deployment_persistent_disk = None
249
247
  self._drive_v2 = None
250
248
  self._enterprise_compute_admin = None
251
- self._f227 = None
252
249
  self._f234 = None
253
250
  self._f236 = None
254
251
  self._f239 = None
@@ -257,25 +254,25 @@ class V1UserFeatures(object):
257
254
  self._f243 = None
258
255
  self._f245 = None
259
256
  self._f247 = None
260
- self._f248 = None
261
257
  self._f250 = None
262
258
  self._f252 = None
263
259
  self._f253 = None
264
260
  self._f254 = None
265
261
  self._f255 = None
266
- self._f257 = None
267
262
  self._f258 = None
268
263
  self._f259 = None
269
264
  self._f260 = None
270
265
  self._f261 = None
271
266
  self._f262 = None
272
267
  self._f263 = None
273
- self._f264 = None
274
268
  self._f265 = None
275
269
  self._f266 = None
270
+ self._f267 = None
271
+ self._f268 = None
272
+ self._f269 = None
273
+ self._f270 = None
276
274
  self._fair_share = None
277
275
  self._featured_studios_admin = None
278
- self._gcs_connections_optimized = None
279
276
  self._job_artifacts_v2 = None
280
277
  self._kubernetes_cluster_ui = None
281
278
  self._kubernetes_clusters = None
@@ -360,8 +357,6 @@ class V1UserFeatures(object):
360
357
  self.drive_v2 = drive_v2
361
358
  if enterprise_compute_admin is not None:
362
359
  self.enterprise_compute_admin = enterprise_compute_admin
363
- if f227 is not None:
364
- self.f227 = f227
365
360
  if f234 is not None:
366
361
  self.f234 = f234
367
362
  if f236 is not None:
@@ -378,8 +373,6 @@ class V1UserFeatures(object):
378
373
  self.f245 = f245
379
374
  if f247 is not None:
380
375
  self.f247 = f247
381
- if f248 is not None:
382
- self.f248 = f248
383
376
  if f250 is not None:
384
377
  self.f250 = f250
385
378
  if f252 is not None:
@@ -390,8 +383,6 @@ class V1UserFeatures(object):
390
383
  self.f254 = f254
391
384
  if f255 is not None:
392
385
  self.f255 = f255
393
- if f257 is not None:
394
- self.f257 = f257
395
386
  if f258 is not None:
396
387
  self.f258 = f258
397
388
  if f259 is not None:
@@ -404,18 +395,22 @@ class V1UserFeatures(object):
404
395
  self.f262 = f262
405
396
  if f263 is not None:
406
397
  self.f263 = f263
407
- if f264 is not None:
408
- self.f264 = f264
409
398
  if f265 is not None:
410
399
  self.f265 = f265
411
400
  if f266 is not None:
412
401
  self.f266 = f266
402
+ if f267 is not None:
403
+ self.f267 = f267
404
+ if f268 is not None:
405
+ self.f268 = f268
406
+ if f269 is not None:
407
+ self.f269 = f269
408
+ if f270 is not None:
409
+ self.f270 = f270
413
410
  if fair_share is not None:
414
411
  self.fair_share = fair_share
415
412
  if featured_studios_admin is not None:
416
413
  self.featured_studios_admin = featured_studios_admin
417
- if gcs_connections_optimized is not None:
418
- self.gcs_connections_optimized = gcs_connections_optimized
419
414
  if job_artifacts_v2 is not None:
420
415
  self.job_artifacts_v2 = job_artifacts_v2
421
416
  if kubernetes_cluster_ui is not None:
@@ -957,27 +952,6 @@ class V1UserFeatures(object):
957
952
 
958
953
  self._enterprise_compute_admin = enterprise_compute_admin
959
954
 
960
- @property
961
- def f227(self) -> 'bool':
962
- """Gets the f227 of this V1UserFeatures. # noqa: E501
963
-
964
-
965
- :return: The f227 of this V1UserFeatures. # noqa: E501
966
- :rtype: bool
967
- """
968
- return self._f227
969
-
970
- @f227.setter
971
- def f227(self, f227: 'bool'):
972
- """Sets the f227 of this V1UserFeatures.
973
-
974
-
975
- :param f227: The f227 of this V1UserFeatures. # noqa: E501
976
- :type: bool
977
- """
978
-
979
- self._f227 = f227
980
-
981
955
  @property
982
956
  def f234(self) -> 'bool':
983
957
  """Gets the f234 of this V1UserFeatures. # noqa: E501
@@ -1146,27 +1120,6 @@ class V1UserFeatures(object):
1146
1120
 
1147
1121
  self._f247 = f247
1148
1122
 
1149
- @property
1150
- def f248(self) -> 'bool':
1151
- """Gets the f248 of this V1UserFeatures. # noqa: E501
1152
-
1153
-
1154
- :return: The f248 of this V1UserFeatures. # noqa: E501
1155
- :rtype: bool
1156
- """
1157
- return self._f248
1158
-
1159
- @f248.setter
1160
- def f248(self, f248: 'bool'):
1161
- """Sets the f248 of this V1UserFeatures.
1162
-
1163
-
1164
- :param f248: The f248 of this V1UserFeatures. # noqa: E501
1165
- :type: bool
1166
- """
1167
-
1168
- self._f248 = f248
1169
-
1170
1123
  @property
1171
1124
  def f250(self) -> 'bool':
1172
1125
  """Gets the f250 of this V1UserFeatures. # noqa: E501
@@ -1272,27 +1225,6 @@ class V1UserFeatures(object):
1272
1225
 
1273
1226
  self._f255 = f255
1274
1227
 
1275
- @property
1276
- def f257(self) -> 'bool':
1277
- """Gets the f257 of this V1UserFeatures. # noqa: E501
1278
-
1279
-
1280
- :return: The f257 of this V1UserFeatures. # noqa: E501
1281
- :rtype: bool
1282
- """
1283
- return self._f257
1284
-
1285
- @f257.setter
1286
- def f257(self, f257: 'bool'):
1287
- """Sets the f257 of this V1UserFeatures.
1288
-
1289
-
1290
- :param f257: The f257 of this V1UserFeatures. # noqa: E501
1291
- :type: bool
1292
- """
1293
-
1294
- self._f257 = f257
1295
-
1296
1228
  @property
1297
1229
  def f258(self) -> 'bool':
1298
1230
  """Gets the f258 of this V1UserFeatures. # noqa: E501
@@ -1419,27 +1351,6 @@ class V1UserFeatures(object):
1419
1351
 
1420
1352
  self._f263 = f263
1421
1353
 
1422
- @property
1423
- def f264(self) -> 'bool':
1424
- """Gets the f264 of this V1UserFeatures. # noqa: E501
1425
-
1426
-
1427
- :return: The f264 of this V1UserFeatures. # noqa: E501
1428
- :rtype: bool
1429
- """
1430
- return self._f264
1431
-
1432
- @f264.setter
1433
- def f264(self, f264: 'bool'):
1434
- """Sets the f264 of this V1UserFeatures.
1435
-
1436
-
1437
- :param f264: The f264 of this V1UserFeatures. # noqa: E501
1438
- :type: bool
1439
- """
1440
-
1441
- self._f264 = f264
1442
-
1443
1354
  @property
1444
1355
  def f265(self) -> 'bool':
1445
1356
  """Gets the f265 of this V1UserFeatures. # noqa: E501
@@ -1482,6 +1393,90 @@ class V1UserFeatures(object):
1482
1393
 
1483
1394
  self._f266 = f266
1484
1395
 
1396
+ @property
1397
+ def f267(self) -> 'bool':
1398
+ """Gets the f267 of this V1UserFeatures. # noqa: E501
1399
+
1400
+
1401
+ :return: The f267 of this V1UserFeatures. # noqa: E501
1402
+ :rtype: bool
1403
+ """
1404
+ return self._f267
1405
+
1406
+ @f267.setter
1407
+ def f267(self, f267: 'bool'):
1408
+ """Sets the f267 of this V1UserFeatures.
1409
+
1410
+
1411
+ :param f267: The f267 of this V1UserFeatures. # noqa: E501
1412
+ :type: bool
1413
+ """
1414
+
1415
+ self._f267 = f267
1416
+
1417
+ @property
1418
+ def f268(self) -> 'bool':
1419
+ """Gets the f268 of this V1UserFeatures. # noqa: E501
1420
+
1421
+
1422
+ :return: The f268 of this V1UserFeatures. # noqa: E501
1423
+ :rtype: bool
1424
+ """
1425
+ return self._f268
1426
+
1427
+ @f268.setter
1428
+ def f268(self, f268: 'bool'):
1429
+ """Sets the f268 of this V1UserFeatures.
1430
+
1431
+
1432
+ :param f268: The f268 of this V1UserFeatures. # noqa: E501
1433
+ :type: bool
1434
+ """
1435
+
1436
+ self._f268 = f268
1437
+
1438
+ @property
1439
+ def f269(self) -> 'bool':
1440
+ """Gets the f269 of this V1UserFeatures. # noqa: E501
1441
+
1442
+
1443
+ :return: The f269 of this V1UserFeatures. # noqa: E501
1444
+ :rtype: bool
1445
+ """
1446
+ return self._f269
1447
+
1448
+ @f269.setter
1449
+ def f269(self, f269: 'bool'):
1450
+ """Sets the f269 of this V1UserFeatures.
1451
+
1452
+
1453
+ :param f269: The f269 of this V1UserFeatures. # noqa: E501
1454
+ :type: bool
1455
+ """
1456
+
1457
+ self._f269 = f269
1458
+
1459
+ @property
1460
+ def f270(self) -> 'bool':
1461
+ """Gets the f270 of this V1UserFeatures. # noqa: E501
1462
+
1463
+
1464
+ :return: The f270 of this V1UserFeatures. # noqa: E501
1465
+ :rtype: bool
1466
+ """
1467
+ return self._f270
1468
+
1469
+ @f270.setter
1470
+ def f270(self, f270: 'bool'):
1471
+ """Sets the f270 of this V1UserFeatures.
1472
+
1473
+
1474
+ :param f270: The f270 of this V1UserFeatures. # noqa: E501
1475
+ :type: bool
1476
+ """
1477
+
1478
+ self._f270 = f270
1479
+
1485
1480
  @property
1486
1481
  def fair_share(self) -> 'bool':
1487
1482
  """Gets the fair_share of this V1UserFeatures. # noqa: E501
@@ -1524,27 +1519,6 @@ class V1UserFeatures(object):
1524
1519
 
1525
1520
  self._featured_studios_admin = featured_studios_admin
1526
1521
 
1527
- @property
1528
- def gcs_connections_optimized(self) -> 'bool':
1529
- """Gets the gcs_connections_optimized of this V1UserFeatures. # noqa: E501
1530
-
1531
-
1532
- :return: The gcs_connections_optimized of this V1UserFeatures. # noqa: E501
1533
- :rtype: bool
1534
- """
1535
- return self._gcs_connections_optimized
1536
-
1537
- @gcs_connections_optimized.setter
1538
- def gcs_connections_optimized(self, gcs_connections_optimized: 'bool'):
1539
- """Sets the gcs_connections_optimized of this V1UserFeatures.
1540
-
1541
-
1542
- :param gcs_connections_optimized: The gcs_connections_optimized of this V1UserFeatures. # noqa: E501
1543
- :type: bool
1544
- """
1545
-
1546
- self._gcs_connections_optimized = gcs_connections_optimized
1547
-
1548
1522
  @property
1549
1523
  def job_artifacts_v2(self) -> 'bool':
1550
1524
  """Gets the job_artifacts_v2 of this V1UserFeatures. # noqa: E501
lightning_sdk/machine.py CHANGED
@@ -218,3 +218,6 @@ Machine.H200 = Machine(name="H200", slug="lit-h200x-1", family="H200", accelerat
218
218
  Machine.H200_X_8 = Machine(name="H200_X_8", slug="lit-h200x-8", family="H200", accelerator_count=8)
219
219
  # available B200 machines
220
220
  Machine.B200_X_8 = Machine(name="B200_X_8", slug="lit-b200x-8", family="B200", accelerator_count=8)
221
+
222
+
223
+ DEFAULT_MACHINE = Machine.CPU.name
lightning_sdk/mmt/base.py CHANGED
@@ -75,6 +75,7 @@ class _BaseMMT(_BaseJob):
75
75
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
76
76
  artifacts_remote: Optional[str] = None, # deprecated in favor of path_mappings
77
77
  cluster: Optional[str] = None, # deprecated in favor of cloud_account
78
+ reuse_snapshot: bool = True,
78
79
  ) -> "_BaseMMT":
79
80
  """Run async workloads using a docker image across multiple machines.
80
81
 
@@ -119,6 +120,8 @@ class _BaseMMT(_BaseJob):
119
120
  Irrelevant for most machines, required for some of the top-end machines on GCP.
120
121
  If in doubt, set it. Won't have an effect on machines not requiring it.
121
122
  Defaults to 3h
123
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
124
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
122
125
  """
123
126
  from lightning_sdk.lightning_cloud.openapi.rest import ApiException
124
127
  from lightning_sdk.studio import Studio
@@ -214,6 +217,7 @@ class _BaseMMT(_BaseJob):
214
217
  artifacts_local=artifacts_local,
215
218
  artifacts_remote=artifacts_remote,
216
219
  max_runtime=max_runtime,
220
+ reuse_snapshot=reuse_snapshot,
217
221
  )
218
222
  return inst
219
223
 
@@ -236,6 +240,7 @@ class _BaseMMT(_BaseJob):
236
240
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
237
241
  artifacts_remote: Optional[str] = None, # deprecated in favor of path_mappings
238
242
  max_runtime: Optional[int] = None,
243
+ reuse_snapshot: bool = True,
239
244
  ) -> None:
240
245
  """Submit a new multi-machine job to the Lightning AI platform.
241
246
 
@@ -271,6 +276,8 @@ class _BaseMMT(_BaseJob):
271
276
  Irrelevant for most machines, required for some of the top-end machines on GCP.
272
277
  If in doubt, set it. Won't have an effect on machines not requiring it.
273
278
  Defaults to 3h
279
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
280
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
274
281
  """
275
282
 
276
283
  @property
lightning_sdk/mmt/mmt.py CHANGED
@@ -102,6 +102,7 @@ class MMT(_BaseMMT):
102
102
  artifacts_local: Optional[str] = None,
103
103
  artifacts_remote: Optional[str] = None,
104
104
  cluster: Optional[str] = None, # deprecated in favor of cloud_account
105
+ reuse_snapshot: bool = True,
105
106
  ) -> "MMT":
106
107
  """Run async workloads using a docker image across multiple machines.
107
108
 
@@ -141,6 +142,8 @@ class MMT(_BaseMMT):
141
142
  }
142
143
  If the path inside the connection is omitted it's assumed to be the root path of that connection.
143
144
  Only applicable when submitting docker jobs.
145
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
146
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
144
147
  """
145
148
  ret_val = super().run(
146
149
  name=name,
@@ -164,6 +167,7 @@ class MMT(_BaseMMT):
164
167
  artifacts_remote=artifacts_remote,
165
168
  cluster=cluster, # deprecated in favor of cloud_account
166
169
  max_runtime=max_runtime,
170
+ reuse_snapshot=reuse_snapshot,
167
171
  )
168
172
  # required for typing with "MMT"
169
173
  assert isinstance(ret_val, cls)
@@ -191,6 +195,7 @@ class MMT(_BaseMMT):
191
195
  max_runtime: Optional[int] = None,
192
196
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
193
197
  artifacts_remote: Optional[str] = None, # deprecated in favor of path_mappings
198
+ reuse_snapshot: bool = True,
194
199
  ) -> "MMT":
195
200
  """Submit a new multi-machine job to the Lightning AI platform.
196
201
 
@@ -231,6 +236,8 @@ class MMT(_BaseMMT):
231
236
  Irrelevant for most machines, required for some of the top-end machines on GCP.
232
237
  If in doubt, set it. Won't have an effect on machines not requiring it.
233
238
  Defaults to 3h
239
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
240
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
234
241
  """
235
242
  self._job = self._internal_mmt._submit(
236
243
  num_machines=num_machines,
@@ -249,6 +256,7 @@ class MMT(_BaseMMT):
249
256
  artifacts_local=artifacts_local,
250
257
  artifacts_remote=artifacts_remote,
251
258
  max_runtime=max_runtime,
259
+ reuse_snapshot=reuse_snapshot,
252
260
  )
253
261
  return self
254
262
 
lightning_sdk/mmt/v1.py CHANGED
@@ -58,6 +58,7 @@ class _MMTV1(_BaseMMT):
58
58
  max_runtime: Optional[int] = None,
59
59
  artifacts_local: Optional[str] = None,
60
60
  artifacts_remote: Optional[str] = None,
61
+ reuse_snapshot: bool = True,
61
62
  ) -> "_MMTV1":
62
63
  """Submit a new multi-machine job to the Lightning AI platform.
63
64
 
@@ -96,7 +97,8 @@ class _MMTV1(_BaseMMT):
96
97
  Irrelevant for most machines, required for some of the top-end machines on GCP.
97
98
  If in doubt, set it. Won't have an effect on machines not requiring it.
98
99
  Defaults to 3h
99
-
100
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
101
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
100
102
  """
101
103
  raise NotImplementedError("Cannot submit new mmts with MMTV1!")
102
104
 
lightning_sdk/mmt/v2.py CHANGED
@@ -58,6 +58,7 @@ class _MMTV2(_BaseMMT):
58
58
  max_runtime: Optional[int] = None,
59
59
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
60
60
  artifacts_remote: Optional[str] = None, # deprecated in favor of path_mappings
61
+ reuse_snapshot: bool = True,
61
62
  ) -> "_MMTV2":
62
63
  """Submit a new multi-machine job to the Lightning AI platform.
63
64
 
@@ -98,6 +99,8 @@ class _MMTV2(_BaseMMT):
98
99
  Irrelevant for most machines, required for some of the top-end machines on GCP.
99
100
  If in doubt, set it. Won't have an effect on machines not requiring it.
100
101
  Defaults to 3h
102
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
103
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
101
104
  """
102
105
  # Command is required if Studio is provided to know what to run
103
106
  # Image is mutually exclusive with Studio
@@ -141,6 +144,7 @@ class _MMTV2(_BaseMMT):
141
144
  artifacts_local=artifacts_local,
142
145
  artifacts_remote=artifacts_remote,
143
146
  max_runtime=max_runtime,
147
+ reuse_snapshot=reuse_snapshot,
144
148
  )
145
149
  self._job = submitted
146
150
  self._name = submitted.name