lightning-sdk 2025.10.23__py3-none-any.whl → 2025.10.31__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 (46) hide show
  1. lightning_sdk/__init__.py +1 -1
  2. lightning_sdk/api/deployment_api.py +16 -0
  3. lightning_sdk/api/mmt_api.py +4 -1
  4. lightning_sdk/api/teamspace_api.py +1 -1
  5. lightning_sdk/cli/legacy/deploy/_auth.py +1 -2
  6. lightning_sdk/cli/utils/teamspace_selection.py +4 -5
  7. lightning_sdk/deployment/deployment.py +2 -1
  8. lightning_sdk/lightning_cloud/openapi/__init__.py +8 -0
  9. lightning_sdk/lightning_cloud/openapi/api/__init__.py +1 -0
  10. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +234 -0
  11. lightning_sdk/lightning_cloud/openapi/api/markets_service_api.py +145 -0
  12. lightning_sdk/lightning_cloud/openapi/models/__init__.py +7 -0
  13. lightning_sdk/lightning_cloud/openapi/models/message_id_actions_body.py +201 -0
  14. lightning_sdk/lightning_cloud/openapi/models/project_id_storagetransfers_body.py +27 -1
  15. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +27 -1
  16. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +27 -1
  17. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +1 -0
  18. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +27 -1
  19. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +27 -1
  20. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
  21. lightning_sdk/lightning_cloud/openapi/models/v1_get_market_pricing_response.py +201 -0
  22. lightning_sdk/lightning_cloud/openapi/models/v1_incident_type.py +1 -0
  23. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_aws_config.py +279 -0
  24. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +253 -0
  25. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +53 -1
  26. lightning_sdk/lightning_cloud/openapi/models/v1_list_conversation_message_actions_response.py +123 -0
  27. lightning_sdk/lightning_cloud/openapi/models/v1_market_price.py +149 -0
  28. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +27 -1
  29. lightning_sdk/lightning_cloud/openapi/models/v1_message_action.py +279 -0
  30. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +27 -1
  31. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +27 -1
  32. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +79 -183
  33. lightning_sdk/mmt/base.py +7 -0
  34. lightning_sdk/mmt/mmt.py +8 -0
  35. lightning_sdk/mmt/v1.py +3 -1
  36. lightning_sdk/mmt/v2.py +4 -0
  37. lightning_sdk/pipeline/steps.py +6 -1
  38. lightning_sdk/plugin.py +4 -0
  39. lightning_sdk/studio.py +7 -2
  40. lightning_sdk/utils/logging.py +72 -0
  41. {lightning_sdk-2025.10.23.dist-info → lightning_sdk-2025.10.31.dist-info}/METADATA +1 -1
  42. {lightning_sdk-2025.10.23.dist-info → lightning_sdk-2025.10.31.dist-info}/RECORD +46 -37
  43. {lightning_sdk-2025.10.23.dist-info → lightning_sdk-2025.10.31.dist-info}/LICENSE +0 -0
  44. {lightning_sdk-2025.10.23.dist-info → lightning_sdk-2025.10.31.dist-info}/WHEEL +0 -0
  45. {lightning_sdk-2025.10.23.dist-info → lightning_sdk-2025.10.31.dist-info}/entry_points.txt +0 -0
  46. {lightning_sdk-2025.10.23.dist-info → lightning_sdk-2025.10.31.dist-info}/top_level.txt +0 -0
@@ -57,10 +57,8 @@ class V1UserFeatures(object):
57
57
  'collab_screen_sharing': 'bool',
58
58
  'control_center_monitoring': 'bool',
59
59
  'cost_attribution_settings': 'bool',
60
- 'custom_app_domain': 'bool',
61
60
  'datasets': 'bool',
62
61
  'default_one_cluster': 'bool',
63
- 'deployment_persistent_disk': 'bool',
64
62
  'drive_v2': 'bool',
65
63
  'enterprise_compute_admin': 'bool',
66
64
  'f234': 'bool',
@@ -78,16 +76,16 @@ class V1UserFeatures(object):
78
76
  'f255': 'bool',
79
77
  'f258': 'bool',
80
78
  'f259': 'bool',
81
- 'f260': 'bool',
82
79
  'f261': 'bool',
83
80
  'f262': 'bool',
84
- 'f263': 'bool',
85
81
  'f265': 'bool',
86
82
  'f266': 'bool',
87
- 'f267': 'bool',
88
83
  'f268': 'bool',
89
84
  'f269': 'bool',
90
85
  'f270': 'bool',
86
+ 'f271': 'bool',
87
+ 'f272': 'bool',
88
+ 'f273': 'bool',
91
89
  'fair_share': 'bool',
92
90
  'featured_studios_admin': 'bool',
93
91
  'job_artifacts_v2': 'bool',
@@ -98,7 +96,6 @@ class V1UserFeatures(object):
98
96
  'marketplace': 'bool',
99
97
  'mmt_fault_tolerance': 'bool',
100
98
  'mmt_strategy_selector': 'bool',
101
- 'model_api_dashboard': 'bool',
102
99
  'multiple_studio_versions': 'bool',
103
100
  'nerf_fs_nonpaying': 'bool',
104
101
  'org_level_member_permissions': 'bool',
@@ -124,7 +121,6 @@ class V1UserFeatures(object):
124
121
  'specialised_studios': 'bool',
125
122
  'storage_overuse_deletion': 'bool',
126
123
  'studio_config': 'bool',
127
- 'studio_sharing_v2': 'bool',
128
124
  'studio_version_visibility': 'bool',
129
125
  'vultr': 'bool',
130
126
  'weka': 'bool',
@@ -148,10 +144,8 @@ class V1UserFeatures(object):
148
144
  'collab_screen_sharing': 'collabScreenSharing',
149
145
  'control_center_monitoring': 'controlCenterMonitoring',
150
146
  'cost_attribution_settings': 'costAttributionSettings',
151
- 'custom_app_domain': 'customAppDomain',
152
147
  'datasets': 'datasets',
153
148
  'default_one_cluster': 'defaultOneCluster',
154
- 'deployment_persistent_disk': 'deploymentPersistentDisk',
155
149
  'drive_v2': 'driveV2',
156
150
  'enterprise_compute_admin': 'enterpriseComputeAdmin',
157
151
  'f234': 'f234',
@@ -169,16 +163,16 @@ class V1UserFeatures(object):
169
163
  'f255': 'f255',
170
164
  'f258': 'f258',
171
165
  'f259': 'f259',
172
- 'f260': 'f260',
173
166
  'f261': 'f261',
174
167
  'f262': 'f262',
175
- 'f263': 'f263',
176
168
  'f265': 'f265',
177
169
  'f266': 'f266',
178
- 'f267': 'f267',
179
170
  'f268': 'f268',
180
171
  'f269': 'f269',
181
172
  'f270': 'f270',
173
+ 'f271': 'f271',
174
+ 'f272': 'f272',
175
+ 'f273': 'f273',
182
176
  'fair_share': 'fairShare',
183
177
  'featured_studios_admin': 'featuredStudiosAdmin',
184
178
  'job_artifacts_v2': 'jobArtifactsV2',
@@ -189,7 +183,6 @@ class V1UserFeatures(object):
189
183
  'marketplace': 'marketplace',
190
184
  'mmt_fault_tolerance': 'mmtFaultTolerance',
191
185
  'mmt_strategy_selector': 'mmtStrategySelector',
192
- 'model_api_dashboard': 'modelApiDashboard',
193
186
  'multiple_studio_versions': 'multipleStudioVersions',
194
187
  'nerf_fs_nonpaying': 'nerfFsNonpaying',
195
188
  'org_level_member_permissions': 'orgLevelMemberPermissions',
@@ -215,14 +208,13 @@ class V1UserFeatures(object):
215
208
  'specialised_studios': 'specialisedStudios',
216
209
  'storage_overuse_deletion': 'storageOveruseDeletion',
217
210
  'studio_config': 'studioConfig',
218
- 'studio_sharing_v2': 'studioSharingV2',
219
211
  'studio_version_visibility': 'studioVersionVisibility',
220
212
  'vultr': 'vultr',
221
213
  'weka': 'weka',
222
214
  'writable_s3_connections': 'writableS3Connections'
223
215
  }
224
216
 
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
217
+ 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, datasets: 'bool' =None, default_one_cluster: '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, f261: 'bool' =None, f262: 'bool' =None, f265: 'bool' =None, f266: 'bool' =None, f268: 'bool' =None, f269: 'bool' =None, f270: 'bool' =None, f271: 'bool' =None, f272: 'bool' =None, f273: '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, 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_version_visibility: 'bool' =None, vultr: 'bool' =None, weka: 'bool' =None, writable_s3_connections: 'bool' =None): # noqa: E501
226
218
  """V1UserFeatures - a model defined in Swagger""" # noqa: E501
227
219
  self._affiliate_links = None
228
220
  self._agents_v2 = None
@@ -240,10 +232,8 @@ class V1UserFeatures(object):
240
232
  self._collab_screen_sharing = None
241
233
  self._control_center_monitoring = None
242
234
  self._cost_attribution_settings = None
243
- self._custom_app_domain = None
244
235
  self._datasets = None
245
236
  self._default_one_cluster = None
246
- self._deployment_persistent_disk = None
247
237
  self._drive_v2 = None
248
238
  self._enterprise_compute_admin = None
249
239
  self._f234 = None
@@ -261,16 +251,16 @@ class V1UserFeatures(object):
261
251
  self._f255 = None
262
252
  self._f258 = None
263
253
  self._f259 = None
264
- self._f260 = None
265
254
  self._f261 = None
266
255
  self._f262 = None
267
- self._f263 = None
268
256
  self._f265 = None
269
257
  self._f266 = None
270
- self._f267 = None
271
258
  self._f268 = None
272
259
  self._f269 = None
273
260
  self._f270 = None
261
+ self._f271 = None
262
+ self._f272 = None
263
+ self._f273 = None
274
264
  self._fair_share = None
275
265
  self._featured_studios_admin = None
276
266
  self._job_artifacts_v2 = None
@@ -281,7 +271,6 @@ class V1UserFeatures(object):
281
271
  self._marketplace = None
282
272
  self._mmt_fault_tolerance = None
283
273
  self._mmt_strategy_selector = None
284
- self._model_api_dashboard = None
285
274
  self._multiple_studio_versions = None
286
275
  self._nerf_fs_nonpaying = None
287
276
  self._org_level_member_permissions = None
@@ -307,7 +296,6 @@ class V1UserFeatures(object):
307
296
  self._specialised_studios = None
308
297
  self._storage_overuse_deletion = None
309
298
  self._studio_config = None
310
- self._studio_sharing_v2 = None
311
299
  self._studio_version_visibility = None
312
300
  self._vultr = None
313
301
  self._weka = None
@@ -345,14 +333,10 @@ class V1UserFeatures(object):
345
333
  self.control_center_monitoring = control_center_monitoring
346
334
  if cost_attribution_settings is not None:
347
335
  self.cost_attribution_settings = cost_attribution_settings
348
- if custom_app_domain is not None:
349
- self.custom_app_domain = custom_app_domain
350
336
  if datasets is not None:
351
337
  self.datasets = datasets
352
338
  if default_one_cluster is not None:
353
339
  self.default_one_cluster = default_one_cluster
354
- if deployment_persistent_disk is not None:
355
- self.deployment_persistent_disk = deployment_persistent_disk
356
340
  if drive_v2 is not None:
357
341
  self.drive_v2 = drive_v2
358
342
  if enterprise_compute_admin is not None:
@@ -387,26 +371,26 @@ class V1UserFeatures(object):
387
371
  self.f258 = f258
388
372
  if f259 is not None:
389
373
  self.f259 = f259
390
- if f260 is not None:
391
- self.f260 = f260
392
374
  if f261 is not None:
393
375
  self.f261 = f261
394
376
  if f262 is not None:
395
377
  self.f262 = f262
396
- if f263 is not None:
397
- self.f263 = f263
398
378
  if f265 is not None:
399
379
  self.f265 = f265
400
380
  if f266 is not None:
401
381
  self.f266 = f266
402
- if f267 is not None:
403
- self.f267 = f267
404
382
  if f268 is not None:
405
383
  self.f268 = f268
406
384
  if f269 is not None:
407
385
  self.f269 = f269
408
386
  if f270 is not None:
409
387
  self.f270 = f270
388
+ if f271 is not None:
389
+ self.f271 = f271
390
+ if f272 is not None:
391
+ self.f272 = f272
392
+ if f273 is not None:
393
+ self.f273 = f273
410
394
  if fair_share is not None:
411
395
  self.fair_share = fair_share
412
396
  if featured_studios_admin is not None:
@@ -427,8 +411,6 @@ class V1UserFeatures(object):
427
411
  self.mmt_fault_tolerance = mmt_fault_tolerance
428
412
  if mmt_strategy_selector is not None:
429
413
  self.mmt_strategy_selector = mmt_strategy_selector
430
- if model_api_dashboard is not None:
431
- self.model_api_dashboard = model_api_dashboard
432
414
  if multiple_studio_versions is not None:
433
415
  self.multiple_studio_versions = multiple_studio_versions
434
416
  if nerf_fs_nonpaying is not None:
@@ -479,8 +461,6 @@ class V1UserFeatures(object):
479
461
  self.storage_overuse_deletion = storage_overuse_deletion
480
462
  if studio_config is not None:
481
463
  self.studio_config = studio_config
482
- if studio_sharing_v2 is not None:
483
- self.studio_sharing_v2 = studio_sharing_v2
484
464
  if studio_version_visibility is not None:
485
465
  self.studio_version_visibility = studio_version_visibility
486
466
  if vultr is not None:
@@ -826,27 +806,6 @@ class V1UserFeatures(object):
826
806
 
827
807
  self._cost_attribution_settings = cost_attribution_settings
828
808
 
829
- @property
830
- def custom_app_domain(self) -> 'bool':
831
- """Gets the custom_app_domain of this V1UserFeatures. # noqa: E501
832
-
833
-
834
- :return: The custom_app_domain of this V1UserFeatures. # noqa: E501
835
- :rtype: bool
836
- """
837
- return self._custom_app_domain
838
-
839
- @custom_app_domain.setter
840
- def custom_app_domain(self, custom_app_domain: 'bool'):
841
- """Sets the custom_app_domain of this V1UserFeatures.
842
-
843
-
844
- :param custom_app_domain: The custom_app_domain of this V1UserFeatures. # noqa: E501
845
- :type: bool
846
- """
847
-
848
- self._custom_app_domain = custom_app_domain
849
-
850
809
  @property
851
810
  def datasets(self) -> 'bool':
852
811
  """Gets the datasets of this V1UserFeatures. # noqa: E501
@@ -889,27 +848,6 @@ class V1UserFeatures(object):
889
848
 
890
849
  self._default_one_cluster = default_one_cluster
891
850
 
892
- @property
893
- def deployment_persistent_disk(self) -> 'bool':
894
- """Gets the deployment_persistent_disk of this V1UserFeatures. # noqa: E501
895
-
896
-
897
- :return: The deployment_persistent_disk of this V1UserFeatures. # noqa: E501
898
- :rtype: bool
899
- """
900
- return self._deployment_persistent_disk
901
-
902
- @deployment_persistent_disk.setter
903
- def deployment_persistent_disk(self, deployment_persistent_disk: 'bool'):
904
- """Sets the deployment_persistent_disk of this V1UserFeatures.
905
-
906
-
907
- :param deployment_persistent_disk: The deployment_persistent_disk of this V1UserFeatures. # noqa: E501
908
- :type: bool
909
- """
910
-
911
- self._deployment_persistent_disk = deployment_persistent_disk
912
-
913
851
  @property
914
852
  def drive_v2(self) -> 'bool':
915
853
  """Gets the drive_v2 of this V1UserFeatures. # noqa: E501
@@ -1267,27 +1205,6 @@ class V1UserFeatures(object):
1267
1205
 
1268
1206
  self._f259 = f259
1269
1207
 
1270
- @property
1271
- def f260(self) -> 'bool':
1272
- """Gets the f260 of this V1UserFeatures. # noqa: E501
1273
-
1274
-
1275
- :return: The f260 of this V1UserFeatures. # noqa: E501
1276
- :rtype: bool
1277
- """
1278
- return self._f260
1279
-
1280
- @f260.setter
1281
- def f260(self, f260: 'bool'):
1282
- """Sets the f260 of this V1UserFeatures.
1283
-
1284
-
1285
- :param f260: The f260 of this V1UserFeatures. # noqa: E501
1286
- :type: bool
1287
- """
1288
-
1289
- self._f260 = f260
1290
-
1291
1208
  @property
1292
1209
  def f261(self) -> 'bool':
1293
1210
  """Gets the f261 of this V1UserFeatures. # noqa: E501
@@ -1330,27 +1247,6 @@ class V1UserFeatures(object):
1330
1247
 
1331
1248
  self._f262 = f262
1332
1249
 
1333
- @property
1334
- def f263(self) -> 'bool':
1335
- """Gets the f263 of this V1UserFeatures. # noqa: E501
1336
-
1337
-
1338
- :return: The f263 of this V1UserFeatures. # noqa: E501
1339
- :rtype: bool
1340
- """
1341
- return self._f263
1342
-
1343
- @f263.setter
1344
- def f263(self, f263: 'bool'):
1345
- """Sets the f263 of this V1UserFeatures.
1346
-
1347
-
1348
- :param f263: The f263 of this V1UserFeatures. # noqa: E501
1349
- :type: bool
1350
- """
1351
-
1352
- self._f263 = f263
1353
-
1354
1250
  @property
1355
1251
  def f265(self) -> 'bool':
1356
1252
  """Gets the f265 of this V1UserFeatures. # noqa: E501
@@ -1393,27 +1289,6 @@ class V1UserFeatures(object):
1393
1289
 
1394
1290
  self._f266 = f266
1395
1291
 
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
1292
  @property
1418
1293
  def f268(self) -> 'bool':
1419
1294
  """Gets the f268 of this V1UserFeatures. # noqa: E501
@@ -1477,6 +1352,69 @@ class V1UserFeatures(object):
1477
1352
 
1478
1353
  self._f270 = f270
1479
1354
 
1355
+ @property
1356
+ def f271(self) -> 'bool':
1357
+ """Gets the f271 of this V1UserFeatures. # noqa: E501
1358
+
1359
+
1360
+ :return: The f271 of this V1UserFeatures. # noqa: E501
1361
+ :rtype: bool
1362
+ """
1363
+ return self._f271
1364
+
1365
+ @f271.setter
1366
+ def f271(self, f271: 'bool'):
1367
+ """Sets the f271 of this V1UserFeatures.
1368
+
1369
+
1370
+ :param f271: The f271 of this V1UserFeatures. # noqa: E501
1371
+ :type: bool
1372
+ """
1373
+
1374
+ self._f271 = f271
1375
+
1376
+ @property
1377
+ def f272(self) -> 'bool':
1378
+ """Gets the f272 of this V1UserFeatures. # noqa: E501
1379
+
1380
+
1381
+ :return: The f272 of this V1UserFeatures. # noqa: E501
1382
+ :rtype: bool
1383
+ """
1384
+ return self._f272
1385
+
1386
+ @f272.setter
1387
+ def f272(self, f272: 'bool'):
1388
+ """Sets the f272 of this V1UserFeatures.
1389
+
1390
+
1391
+ :param f272: The f272 of this V1UserFeatures. # noqa: E501
1392
+ :type: bool
1393
+ """
1394
+
1395
+ self._f272 = f272
1396
+
1397
+ @property
1398
+ def f273(self) -> 'bool':
1399
+ """Gets the f273 of this V1UserFeatures. # noqa: E501
1400
+
1401
+
1402
+ :return: The f273 of this V1UserFeatures. # noqa: E501
1403
+ :rtype: bool
1404
+ """
1405
+ return self._f273
1406
+
1407
+ @f273.setter
1408
+ def f273(self, f273: 'bool'):
1409
+ """Sets the f273 of this V1UserFeatures.
1410
+
1411
+
1412
+ :param f273: The f273 of this V1UserFeatures. # noqa: E501
1413
+ :type: bool
1414
+ """
1415
+
1416
+ self._f273 = f273
1417
+
1480
1418
  @property
1481
1419
  def fair_share(self) -> 'bool':
1482
1420
  """Gets the fair_share of this V1UserFeatures. # noqa: E501
@@ -1687,27 +1625,6 @@ class V1UserFeatures(object):
1687
1625
 
1688
1626
  self._mmt_strategy_selector = mmt_strategy_selector
1689
1627
 
1690
- @property
1691
- def model_api_dashboard(self) -> 'bool':
1692
- """Gets the model_api_dashboard of this V1UserFeatures. # noqa: E501
1693
-
1694
-
1695
- :return: The model_api_dashboard of this V1UserFeatures. # noqa: E501
1696
- :rtype: bool
1697
- """
1698
- return self._model_api_dashboard
1699
-
1700
- @model_api_dashboard.setter
1701
- def model_api_dashboard(self, model_api_dashboard: 'bool'):
1702
- """Sets the model_api_dashboard of this V1UserFeatures.
1703
-
1704
-
1705
- :param model_api_dashboard: The model_api_dashboard of this V1UserFeatures. # noqa: E501
1706
- :type: bool
1707
- """
1708
-
1709
- self._model_api_dashboard = model_api_dashboard
1710
-
1711
1628
  @property
1712
1629
  def multiple_studio_versions(self) -> 'bool':
1713
1630
  """Gets the multiple_studio_versions of this V1UserFeatures. # noqa: E501
@@ -2233,27 +2150,6 @@ class V1UserFeatures(object):
2233
2150
 
2234
2151
  self._studio_config = studio_config
2235
2152
 
2236
- @property
2237
- def studio_sharing_v2(self) -> 'bool':
2238
- """Gets the studio_sharing_v2 of this V1UserFeatures. # noqa: E501
2239
-
2240
-
2241
- :return: The studio_sharing_v2 of this V1UserFeatures. # noqa: E501
2242
- :rtype: bool
2243
- """
2244
- return self._studio_sharing_v2
2245
-
2246
- @studio_sharing_v2.setter
2247
- def studio_sharing_v2(self, studio_sharing_v2: 'bool'):
2248
- """Sets the studio_sharing_v2 of this V1UserFeatures.
2249
-
2250
-
2251
- :param studio_sharing_v2: The studio_sharing_v2 of this V1UserFeatures. # noqa: E501
2252
- :type: bool
2253
- """
2254
-
2255
- self._studio_sharing_v2 = studio_sharing_v2
2256
-
2257
2153
  @property
2258
2154
  def studio_version_visibility(self) -> 'bool':
2259
2155
  """Gets the studio_version_visibility of this V1UserFeatures. # noqa: E501
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
@@ -175,6 +175,7 @@ class JobStep:
175
175
  path_mappings: Optional[Dict[str, str]] = None,
176
176
  max_runtime: Optional[int] = None,
177
177
  wait_for: Union[str, List[str], None] = DEFAULT,
178
+ reuse_snapshot: bool = True,
178
179
  ) -> None:
179
180
  self.name = name
180
181
  self.machine = machine or Machine.CPU
@@ -201,6 +202,7 @@ class JobStep:
201
202
  self.path_mappings = path_mappings
202
203
  self.max_runtime = max_runtime
203
204
  self.wait_for = wait_for
205
+ self.reuse_snapshot = reuse_snapshot
204
206
 
205
207
  def to_proto(
206
208
  self, teamspace: "Teamspace", cloud_account: str, shared_filesystem: Union[bool, V1SharedFilesystem]
@@ -239,7 +241,7 @@ class JobStep:
239
241
  artifacts_remote=None,
240
242
  max_runtime=self.max_runtime,
241
243
  machine_image_version=machine_image_version,
242
- reuse_snapshot=True,
244
+ reuse_snapshot=self.reuse_snapshot,
243
245
  )
244
246
 
245
247
  return V1PipelineStep(
@@ -273,6 +275,7 @@ class MMTStep:
273
275
  path_mappings: Optional[Dict[str, str]] = None,
274
276
  max_runtime: Optional[int] = None,
275
277
  wait_for: Optional[Union[str, List[str]]] = DEFAULT,
278
+ reuse_snapshot: bool = True,
276
279
  ) -> None:
277
280
  self.machine = machine or Machine.CPU
278
281
  self.num_machines = num_machines
@@ -298,6 +301,7 @@ class MMTStep:
298
301
  self.path_mappings = path_mappings
299
302
  self.max_runtime = max_runtime
300
303
  self.wait_for = wait_for
304
+ self.reuse_snapshot = reuse_snapshot
301
305
 
302
306
  def to_proto(
303
307
  self, teamspace: "Teamspace", cloud_account: str, shared_filesystem: Union[bool, V1SharedFilesystem]
@@ -333,6 +337,7 @@ class MMTStep:
333
337
  artifacts_remote=None, # deprecated in favor of path_mappings
334
338
  max_runtime=self.max_runtime,
335
339
  machine_image_version=machine_image_version,
340
+ reuse_snapshot=self.reuse_snapshot,
336
341
  )
337
342
 
338
343
  return V1PipelineStep(