lightning-sdk 2025.12.9__py3-none-any.whl → 2025.12.16__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.
@@ -1,3 +1,3 @@
1
1
  """Version information for lightning_sdk."""
2
2
 
3
- __version__ = "2025.12.09"
3
+ __version__ = "2025.12.16"
@@ -30,6 +30,7 @@ from lightning_sdk.lightning_cloud.openapi import (
30
30
  V1LightningworkState,
31
31
  V1ListLightningworkResponse,
32
32
  V1UserRequestedComputeConfig,
33
+ V1Volume,
33
34
  )
34
35
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
35
36
  from lightning_sdk.machine import Machine
@@ -253,7 +254,16 @@ class JobApiV2:
253
254
  artifacts_remote: Optional[str], # deprecated in favor of path_mappings
254
255
  max_runtime: Optional[int] = None,
255
256
  reuse_snapshot: bool = True,
257
+ scratch_disks: Optional[Dict[str, int]] = None,
256
258
  ) -> V1Job:
259
+ if scratch_disks is not None:
260
+ sanitized_scratch_disks = {}
261
+ for k, v in scratch_disks.items():
262
+ sanitized_k = k if k.startswith("/teamspace/scratch/") else f"/teamspace/scratch/{k}"
263
+ sanitized_scratch_disks[sanitized_k] = v
264
+ else:
265
+ sanitized_scratch_disks = None
266
+
257
267
  body = self._create_job_body(
258
268
  name=name,
259
269
  command=command,
@@ -271,6 +281,7 @@ class JobApiV2:
271
281
  artifacts_remote=artifacts_remote,
272
282
  max_runtime=max_runtime,
273
283
  reuse_snapshot=reuse_snapshot,
284
+ scratch_disks=sanitized_scratch_disks,
274
285
  )
275
286
 
276
287
  job: V1Job = self._client.jobs_service_create_job(project_id=teamspace_id, body=body)
@@ -295,6 +306,7 @@ class JobApiV2:
295
306
  reuse_snapshot: bool,
296
307
  max_runtime: Optional[int] = None,
297
308
  machine_image_version: Optional[str] = None,
309
+ scratch_disks: Optional[Dict[str, int]] = None,
298
310
  ) -> JobsServiceCreateJobBody:
299
311
  env_vars = []
300
312
  if env is not None:
@@ -316,6 +328,9 @@ class JobApiV2:
316
328
  if max_runtime:
317
329
  optional_spec_kwargs["requested_run_duration_seconds"] = str(max_runtime)
318
330
 
331
+ # don't do default dicts, as they'll be mutable. Create a fresh one here
332
+ scratch_disks = scratch_disks or {}
333
+
319
334
  spec = V1JobSpec(
320
335
  cloudspace_id=studio_id or "",
321
336
  cluster_id=cloud_account or "",
@@ -330,6 +345,7 @@ class JobApiV2:
330
345
  image_secret_ref=image_credentials or "",
331
346
  path_mappings=path_mappings_list,
332
347
  machine_image_version=machine_image_version,
348
+ volumes=[V1Volume(path=k, size_gb=v, ephemeral=True) for k, v in scratch_disks.items()],
333
349
  **optional_spec_kwargs,
334
350
  )
335
351
  return JobsServiceCreateJobBody(name=name, spec=spec)
@@ -47,6 +47,7 @@ from lightning_sdk.lightning_cloud.openapi import (
47
47
  V1UpstreamOpenAI,
48
48
  )
49
49
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
50
+ from lightning_sdk.machine import Machine
50
51
 
51
52
  __all__ = ["TeamspaceApi"]
52
53
 
@@ -323,11 +324,47 @@ class TeamspaceApi:
323
324
  jobs = self._client.jobs_service_list_multi_machine_jobs(project_id=teamspace_id).multi_machine_jobs
324
325
  return apps, jobs
325
326
 
326
- def list_machines(self, teamspace_id: str, cloud_account: str) -> List[V1ClusterAccelerator]:
327
- response = self._client.cluster_service_list_project_cluster_accelerators(
328
- project_id=teamspace_id, id=cloud_account
329
- )
330
- return response.accelerator
327
+ def list_machines(
328
+ self,
329
+ teamspace_id: str,
330
+ cloud_accounts: List[str],
331
+ machine: Optional[Machine] = None,
332
+ org_id: Optional[str] = None,
333
+ ) -> List[V1ClusterAccelerator]:
334
+ from lightning_sdk.api.cloud_account_api import CloudAccountApi
335
+
336
+ cloud_account_api = CloudAccountApi()
337
+ matched_accelerators = []
338
+ for ca in cloud_accounts:
339
+ try:
340
+ accelerators = cloud_account_api.list_cloud_account_accelerators(
341
+ teamspace_id=teamspace_id,
342
+ cloud_account_id=ca,
343
+ org_id=org_id,
344
+ )
345
+ if not accelerators.accelerator:
346
+ continue
347
+
348
+ if accelerators.accelerator:
349
+ for cluster_machine in accelerators.accelerator:
350
+ if not machine:
351
+ matched_accelerators.append(cluster_machine)
352
+ continue
353
+ if (
354
+ cluster_machine.resources.gpu == machine.accelerator_count
355
+ or cluster_machine.resources.cpu == machine.accelerator_count
356
+ ) and any(
357
+ machine.family.lower() in s
358
+ for s in (
359
+ cluster_machine.slug,
360
+ cluster_machine.slug_multi_cloud,
361
+ cluster_machine.instance_id,
362
+ )
363
+ ):
364
+ matched_accelerators.append(cluster_machine)
365
+ except Exception:
366
+ pass
367
+ return matched_accelerators
331
368
 
332
369
  def get_model(self, teamspace_id: str, model_id: Optional[str] = None, model_name: Optional[str] = None) -> V1Model:
333
370
  if model_id:
lightning_sdk/job/base.py CHANGED
@@ -92,6 +92,7 @@ class _BaseJob(ABC, metaclass=TrackCallsABCMeta):
92
92
  max_runtime: Optional[int] = None,
93
93
  cluster: Optional[str] = None, # deprecated in favor of cloud_account
94
94
  reuse_snapshot: bool = True,
95
+ scratch_disks: Optional[Dict[str, int]] = None,
95
96
  ) -> "_BaseJob":
96
97
  """Run async workloads using a docker image or a compute environment from your studio.
97
98
 
@@ -236,6 +237,7 @@ class _BaseJob(ABC, metaclass=TrackCallsABCMeta):
236
237
  path_mappings=path_mappings,
237
238
  max_runtime=max_runtime,
238
239
  reuse_snapshot=reuse_snapshot,
240
+ scratch_disks=scratch_disks,
239
241
  )
240
242
 
241
243
  @abstractmethod
@@ -257,6 +259,7 @@ class _BaseJob(ABC, metaclass=TrackCallsABCMeta):
257
259
  path_mappings: Optional[Dict[str, str]] = None,
258
260
  max_runtime: Optional[int] = None,
259
261
  reuse_snapshot: bool = True,
262
+ scratch_disks: Optional[Dict[str, int]] = None,
260
263
  ) -> "_BaseJob":
261
264
  """Submit a new job to the Lightning AI platform.
262
265
 
lightning_sdk/job/job.py CHANGED
@@ -104,6 +104,7 @@ class Job(_BaseJob):
104
104
  artifacts_remote: Optional[str] = None, # deprecated in terms of path_mappings
105
105
  cluster: Optional[str] = None, # deprecated in favor of cloud_account
106
106
  reuse_snapshot: bool = True,
107
+ scratch_disks: Optional[Dict[str, int]] = None,
107
108
  ) -> "Job":
108
109
  """Run async workloads using a docker image or a compute environment from your studio.
109
110
 
@@ -172,6 +173,7 @@ class Job(_BaseJob):
172
173
  max_runtime=max_runtime,
173
174
  cluster=cluster,
174
175
  reuse_snapshot=reuse_snapshot,
176
+ scratch_disks=scratch_disks,
175
177
  )
176
178
  # required for typing with "Job"
177
179
  assert isinstance(ret_val, cls)
@@ -197,6 +199,7 @@ class Job(_BaseJob):
197
199
  artifacts_remote: Optional[str] = None, # deprecated in terms of path_mappings
198
200
  max_runtime: Optional[int] = None,
199
201
  reuse_snapshot: bool = True,
202
+ scratch_disks: Optional[Dict[str, int]] = None,
200
203
  ) -> "Job":
201
204
  """Submit a new job to the Lightning AI platform.
202
205
 
@@ -255,6 +258,7 @@ class Job(_BaseJob):
255
258
  artifacts_remote=artifacts_remote,
256
259
  max_runtime=max_runtime,
257
260
  reuse_snapshot=reuse_snapshot,
261
+ scratch_disks=scratch_disks,
258
262
  )
259
263
  return self
260
264
 
lightning_sdk/job/v1.py CHANGED
@@ -55,6 +55,7 @@ class _JobV1(_BaseJob):
55
55
  interruptible: bool = False,
56
56
  cluster: Optional[str] = None, # deprecated in favor of cloud_account
57
57
  reuse_snapshot: bool = True,
58
+ scratch_disks: Optional[Dict[str, int]] = None,
58
59
  ) -> "_BaseJob":
59
60
  """Start a new async workload from your studio.
60
61
 
@@ -111,6 +112,7 @@ class _JobV1(_BaseJob):
111
112
  path_mappings: Optional[Dict[str, str]] = None,
112
113
  max_runtime: Optional[int] = None,
113
114
  reuse_snapshot: bool = True,
115
+ scratch_disks: Optional[Dict[str, int]] = None,
114
116
  ) -> "_JobV1":
115
117
  """Submit a job to run on a machine.
116
118
 
lightning_sdk/job/v2.py CHANGED
@@ -1,3 +1,4 @@
1
+ from pathlib import PurePath
1
2
  from typing import TYPE_CHECKING, Dict, Optional, Union
2
3
 
3
4
  from lightning_sdk.api.job_api import JobApiV2
@@ -54,6 +55,7 @@ class _JobV2(_BaseJob):
54
55
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
55
56
  artifacts_remote: Optional[str] = None, # deprecated in favor of path_mappings
56
57
  reuse_snapshot: bool = True,
58
+ scratch_disks: Optional[Dict[str, int]] = None,
57
59
  ) -> "_JobV2":
58
60
  """Submit a new job to the Lightning AI platform.
59
61
 
@@ -90,6 +92,11 @@ class _JobV2(_BaseJob):
90
92
  Defaults to 3h
91
93
  reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
92
94
  submitted. Turning this off may result in longer job startup times. Defaults to True.
95
+ scratch_disks: Dictionary of scratch disks to add to the job. The keys are the path that the disk
96
+ will be mounted to, relative to the /teamspace/scratch directory. The values are the size of
97
+ the volume in GiB. For example, { "data": 100 } will add a 100GiB volume available under
98
+ /teamspace/scratch/data.
99
+
93
100
  """
94
101
  # Command is required if Studio is provided to know what to run
95
102
  # Image is mutually exclusive with Studio
@@ -115,6 +122,30 @@ class _JobV2(_BaseJob):
115
122
  default_cloud_account=self._teamspace.default_cloud_account,
116
123
  )
117
124
 
125
+ if scratch_disks is not None and len(scratch_disks) > 0:
126
+ if studio is None:
127
+ raise ValueError("scratch_disks are only supported within a studio job")
128
+
129
+ if len(scratch_disks) > 5:
130
+ raise ValueError("scratch_disk may only contain up to 5 elements")
131
+
132
+ for path, size in scratch_disks.items():
133
+ if size > 50000:
134
+ raise ValueError("scratch_disk size cannot exceed 50TiB")
135
+
136
+ path = PurePath(path)
137
+
138
+ if path.is_absolute():
139
+ # For compatibility with Python 3.8, which doesn't provide
140
+ # pathlib.PurePath.is_relative_to.
141
+ try:
142
+ path.relative_to("/teamspace/scratch")
143
+ except ValueError:
144
+ raise ValueError("scratch_disk paths must be relative to /teamspace/scratch") from None
145
+
146
+ if ".." in path.parts:
147
+ raise ValueError("scratch_disk path cannot contain '..'")
148
+
118
149
  submitted = self._job_api.submit_job(
119
150
  name=self.name,
120
151
  command=command,
@@ -133,6 +164,7 @@ class _JobV2(_BaseJob):
133
164
  path_mappings=path_mappings,
134
165
  max_runtime=max_runtime,
135
166
  reuse_snapshot=reuse_snapshot,
167
+ scratch_disks=scratch_disks,
136
168
  )
137
169
  self._job = submitted
138
170
  self._name = submitted.name
lightning_sdk/machine.py CHANGED
@@ -92,6 +92,7 @@ class Machine:
92
92
  accelerator_count: Optional[int] = None
93
93
  cost: Optional[float] = None
94
94
  interruptible_cost: Optional[float] = None
95
+ provider: Optional[str] = None
95
96
  wait_time: Optional[float] = None
96
97
  interruptible_wait_time: Optional[float] = None
97
98
  _include_in_cli: bool = True
@@ -176,6 +176,7 @@ class JobStep:
176
176
  max_runtime: Optional[int] = None,
177
177
  wait_for: Union[str, List[str], None] = DEFAULT,
178
178
  reuse_snapshot: bool = True,
179
+ scratch_disks: Optional[Dict[str, int]] = None,
179
180
  ) -> None:
180
181
  self.name = name
181
182
  self.machine = machine or Machine.CPU
@@ -203,6 +204,7 @@ class JobStep:
203
204
  self.max_runtime = max_runtime
204
205
  self.wait_for = wait_for
205
206
  self.reuse_snapshot = reuse_snapshot
207
+ self.scratch_disks = scratch_disks
206
208
 
207
209
  def to_proto(
208
210
  self, teamspace: "Teamspace", cloud_account: str, shared_filesystem: Union[bool, V1SharedFilesystem]
@@ -242,6 +244,7 @@ class JobStep:
242
244
  max_runtime=self.max_runtime,
243
245
  machine_image_version=machine_image_version,
244
246
  reuse_snapshot=self.reuse_snapshot,
247
+ scratch_disks=self.scratch_disks,
245
248
  )
246
249
 
247
250
  return V1PipelineStep(
@@ -11,7 +11,12 @@ import lightning_sdk
11
11
  from lightning_sdk.agents import Agent
12
12
  from lightning_sdk.api import CloudAccountApi, TeamspaceApi
13
13
  from lightning_sdk.api.utils import AccessibleResource, raise_access_error_if_not_allowed
14
- from lightning_sdk.lightning_cloud.openapi import V1ClusterType, V1Model, V1ModelVersionArchive, V1ProjectClusterBinding
14
+ from lightning_sdk.lightning_cloud.openapi import (
15
+ V1ClusterType,
16
+ V1Model,
17
+ V1ModelVersionArchive,
18
+ V1ProjectClusterBinding,
19
+ )
15
20
  from lightning_sdk.machine import CloudProvider, Machine
16
21
  from lightning_sdk.models import UploadedModelInfo
17
22
  from lightning_sdk.organization import Organization
@@ -275,14 +280,48 @@ class Teamspace(metaclass=TrackCallsMeta):
275
280
 
276
281
  self._teamspace_api.set_secret(self.id, key, value)
277
282
 
278
- def list_machines(self, cloud_account: Optional[str] = None) -> List[Machine]:
283
+ def list_machines(self, cloud_account: Optional[str] = None, machine: Optional[str] = None) -> List[Machine]:
284
+ """List available machines across cloud accounts.
285
+
286
+ Args:
287
+ cloud_account: The cloud account from which to list available machines. If None, uses LIGHTNING_CLUSTER_ID
288
+ environment variable. If that's also None, queries all global cloud accounts.
289
+ machine: Specific machine name to filter by. If provided, only returns that
290
+ machine type. Must be a valid Machine enum value.
291
+
292
+ Returns:
293
+ List of available machines, excluding out-of-capacity machines.
294
+ """
279
295
  if cloud_account is None:
280
- cloud_account = os.getenv("LIGHTNING_CLUSTER_ID") or self.default_cloud_account
296
+ cloud_account = os.getenv("LIGHTNING_CLUSTER_ID", None)
281
297
 
298
+ # if cloud_account is not given as a paramter and as a env var, use global cloud_accounts
282
299
  if cloud_account is None:
300
+ global_cloud_accounts = self._cloud_account_api.list_global_cloud_accounts(teamspace_id=self.id)
301
+ cloud_accounts = [cm.id for cm in global_cloud_accounts]
302
+ else:
303
+ cloud_accounts = [cloud_account]
304
+
305
+ if cloud_accounts is None:
283
306
  raise RuntimeError("Could not resolve cloud account")
284
307
 
285
- cloud_machines = self._teamspace_api.list_machines(self.id, cloud_account=cloud_account)
308
+ if machine:
309
+ _machine_values = tuple(
310
+ [
311
+ machine.name
312
+ for machine in Machine.__dict__.values()
313
+ if isinstance(machine, Machine) and machine._include_in_cli
314
+ ]
315
+ )
316
+ if machine not in _machine_values:
317
+ raise ValueError(f"Machine '{machine}' is not valid. Valid machines are: {_machine_values}")
318
+ machine = getattr(Machine, machine.upper(), Machine(machine, machine))
319
+
320
+ cloud_machines = self._teamspace_api.list_machines(
321
+ self.id, cloud_accounts=cloud_accounts, machine=machine, org_id=self._org.id
322
+ )
323
+ # filter out of capacity machines
324
+ cloud_machines = [cm for cm in cloud_machines if not cm.out_of_capacity]
286
325
  return [
287
326
  Machine(
288
327
  name=cluster_machine.instance_id,
@@ -292,6 +331,7 @@ class Teamspace(metaclass=TrackCallsMeta):
292
331
  accelerator_count=cluster_machine.resources.gpu or cluster_machine.resources.cpu,
293
332
  cost=cluster_machine.cost,
294
333
  interruptible_cost=cluster_machine.spot_price,
334
+ provider=cluster_machine.provider,
295
335
  wait_time=float(cluster_machine.available_in_seconds) if cluster_machine.available_in_seconds else None,
296
336
  interruptible_wait_time=float(cluster_machine.available_in_seconds_spot)
297
337
  if cluster_machine.available_in_seconds_spot
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 2025.12.9
3
+ Version: 2025.12.16
4
4
  Summary: SDK to develop using Lightning AI Studios
5
5
  Author-email: Lightning-AI <justus@lightning.ai>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  docs/source/conf.py,sha256=r8yX20eC-4mHhMTd0SbQb5TlSWHhO6wnJ0VJ_FBFpag,13249
2
2
  lightning_sdk/__init__.py,sha256=ym1mOWljHxiO4oijOrmtcjf-eIcwYJVFXkDvLduL4FA,1368
3
- lightning_sdk/__version__.py,sha256=xRAKMEzPzv7766lFAIXV9iys89pwuuLm691gPsyCkkU,73
3
+ lightning_sdk/__version__.py,sha256=4_NK-wCK_3J5DXKKvGrkDtWy9RIKhABKmvHCNwtH7IE,73
4
4
  lightning_sdk/agents.py,sha256=Uqsdu4PgswhpeXZzDSbp3hu30MMOhSlCnp8D56MaS_c,1658
5
5
  lightning_sdk/ai_hub.py,sha256=QzCfmX0h2CLn7r0DQyjWg6RnNw26Ey6akiP2Wffl9Ls,7006
6
6
  lightning_sdk/base_studio.py,sha256=yMvZ1dDq_avW3iu98CLEo9W9UL54mx4C6FC43IKLWAE,4691
@@ -9,7 +9,7 @@ lightning_sdk/exceptions.py,sha256=ZPOF4wdOWPkEwQR2B9xxkcP4FzAiG3joZ1eDYjwg5qg,1
9
9
  lightning_sdk/helpers.py,sha256=WvsetkrXC8n4iQUFKpwQOKo7oaaOxgfWJm6KcMeVaTE,3508
10
10
  lightning_sdk/k8s_cluster.py,sha256=K0WB4goDsQJIpfOTDSl7gQ-CrGi77x3kpczN8jwXuYI,2672
11
11
  lightning_sdk/lit_container.py,sha256=9gAGoilwn6x0PF-FxcRm9wyJG64mqOs7HH76g8ksxsk,5715
12
- lightning_sdk/machine.py,sha256=ezAu7CnZi7TLJo9yGElRmt9j6RNrRGrBBJdr6giLx40,9918
12
+ lightning_sdk/machine.py,sha256=TzD9c6th5vTcNVs-U4onlymioY1q5QwSKffTNDfYyfw,9953
13
13
  lightning_sdk/models.py,sha256=3nw-EVlq4cPGRtq-LwP4M55keTw4MSu-VNeUGAG5EAc,8189
14
14
  lightning_sdk/organization.py,sha256=jizjG4oW_oxkP2Qz4vL5cle4Cg12xB_vf4eT-bnvLP0,1352
15
15
  lightning_sdk/owner.py,sha256=k0Hh0BQNxc6Jajzqt6jUgApM0IxHDNPIe_X1ocCI2Rk,1448
@@ -18,7 +18,7 @@ lightning_sdk/sandbox.py,sha256=_NvnWotEXW2rBiVFZZ4krKXxVjuAqfNh04qELSM0-Pg,5786
18
18
  lightning_sdk/serve.py,sha256=XbllHwmOAOHjQJ0AQukwYe3OtspEwhmf5-_HXhL-mpc,11908
19
19
  lightning_sdk/status.py,sha256=lLGAuSvXBoXQFEEsEYwdCi0RcSNatUn5OPjJVjDtoM0,386
20
20
  lightning_sdk/studio.py,sha256=Yx8vw_-SPmr0UzWQ7Kq_IXDFtuk-j0UhM95-Fyaexjc,37609
21
- lightning_sdk/teamspace.py,sha256=goYeXJKc51b_m1OZ3_6V9TC5IF5j7MnKdfEbcnsm1YY,27531
21
+ lightning_sdk/teamspace.py,sha256=-a2LwqoSZTJxmdnVtDGrYjl1bmoKaYOmPU6Fg0N-ItQ,29233
22
22
  lightning_sdk/user.py,sha256=TSYh38rxoi7qKOfrK2JYh_Nknya2Kbz2ngDIY85fFOY,1778
23
23
  lightning_sdk/api/__init__.py,sha256=8boDRZ0LMl7G_IbpqHS2q3efeX_Y897_gsJ3iBF58M4,538
24
24
  lightning_sdk/api/agents_api.py,sha256=Sv390h3_Rctud1-ONjpauOIXqOTvgPr6DQSO1QsCtco,4143
@@ -26,7 +26,7 @@ lightning_sdk/api/ai_hub_api.py,sha256=94pYQUL4-0bTN8I6pePC2dvpOlwMd5Q8V3v37EFWh
26
26
  lightning_sdk/api/base_studio_api.py,sha256=f2brNoWiyKpGjCkWzD5eYchF-QpVVr2zNTGRzs907EI,3856
27
27
  lightning_sdk/api/cloud_account_api.py,sha256=WctyTsl_9kdaEN9iwNN3yQ3jtLIj0LFi67lPXx2-kAo,9105
28
28
  lightning_sdk/api/deployment_api.py,sha256=WT5ay2XoT30qNZrM5Mf0TWKgTs4FukuQqvKfrGlhMGc,25675
29
- lightning_sdk/api/job_api.py,sha256=kkr-XovdudVlNdXhOnztblSVh_S-rdB-L1d2x2FLp8M,16746
29
+ lightning_sdk/api/job_api.py,sha256=g-BsbDebujDJTS9NsoDJNmIoXhtjpegs5aGn8lLFNjA,17493
30
30
  lightning_sdk/api/k8s_api.py,sha256=lZYbbqCQ_2AxN9ExJoY7qlK8unEtMK1LP1FvLNAzwt4,3995
31
31
  lightning_sdk/api/license_api.py,sha256=ahuwn9QQqut0HCSqqgZkr45TXOZSK_Rs9HG39LLMcto,1380
32
32
  lightning_sdk/api/lit_container_api.py,sha256=jCJVwd-3MNjejL9FyvH89pzt-SeG3G8qCJD16iTMJAQ,11454
@@ -35,7 +35,7 @@ lightning_sdk/api/mmt_api.py,sha256=rn-zYJR31QUCd1EgG2ApHWe3JzTIkg01fDvG8pvSI1k,
35
35
  lightning_sdk/api/org_api.py,sha256=Ze3z_ATVrukobujV5YdC42DKj45Vuwl7X52q_Vr-o3U,803
36
36
  lightning_sdk/api/pipeline_api.py,sha256=YXVVNYVRA3xcmjEHCt2AMwSjspxEeDt5d-kZy2YDvZg,4669
37
37
  lightning_sdk/api/studio_api.py,sha256=pIcmA7fr5ZTAbxsu5VKu-8MXu3x8VP0nDi7yXVJqGh4,42612
38
- lightning_sdk/api/teamspace_api.py,sha256=MANFtKnMfeAndF-WeepGfRUl2mjmSKCRKmfo8IfAaAo,20548
38
+ lightning_sdk/api/teamspace_api.py,sha256=iFSPtdEBuaxbDjncgD7ulXdn8EkzPRNyuxOIZYqFqos,22030
39
39
  lightning_sdk/api/user_api.py,sha256=DJTD2wXPGv6z_oFDv8rIrVZVPBX_pWYv2mD9lN3CvAE,4740
40
40
  lightning_sdk/api/utils.py,sha256=e0rfYBx5ex8hp_iIJW7LPQSz6jXmqFAc3D4_YMq_ayk,29747
41
41
  lightning_sdk/cli/__init__.py,sha256=lksw08t_ZIuHOH47LCIqSVHeZ8cUXI2aJWHYhyujYHM,32
@@ -116,10 +116,10 @@ lightning_sdk/cli/vm/switch.py,sha256=7jcKbTnqRv6JjOcDDVRDy8OP9xCxJ3ctLqBJViNAxb
116
116
  lightning_sdk/deployment/__init__.py,sha256=TRkd1xGCuYcsPzZwvq-vm_Qwlu3-htp8je-PYMcqjFc,579
117
117
  lightning_sdk/deployment/deployment.py,sha256=iI2B9dIAQjknqzIcWNP2MsHr-l0K2E9SW1EJp-H24rs,23526
118
118
  lightning_sdk/job/__init__.py,sha256=1MxjQ6rHkyUHCypSW9RuXuVMVH11WiqhIXcU2LCFMwE,64
119
- lightning_sdk/job/base.py,sha256=4_hdUOqorLaaym10ccoB9TvWZM_btEJkVI5_wE9K0oM,21744
120
- lightning_sdk/job/job.py,sha256=9RTMSf2czZbrrjrGZ-2fOZAWMIGomZMG2UE5D_6pgPs,15825
121
- lightning_sdk/job/v1.py,sha256=32mzDi4y2zNMYk9ZCMQS1c_yJfbnKrAjwKnJmo6HMCU,9977
122
- lightning_sdk/job/v2.py,sha256=VAArSIEDH05H3gnALVVPLNRrKm42cxG8No6i9jT_NzY,11710
119
+ lightning_sdk/job/base.py,sha256=ioGl5NuMnpNhflYF3vQiyjMqshHD9ie77HKgdyFvbyo,21897
120
+ lightning_sdk/job/job.py,sha256=6wfgBxVwQDsjOK2lDlB7QFvbe_EBhPktmw0bhFTNOig,16019
121
+ lightning_sdk/job/v1.py,sha256=35Urn58oyWadV7sV6o14Vt8hDnFH-eL2JZ4NpdlQfYU,10089
122
+ lightning_sdk/job/v2.py,sha256=Y7cJzoa90c9Jt4HIZ2t1cTtMIZPhbuQ8_bVa_xrF20Y,13246
123
123
  lightning_sdk/job/work.py,sha256=aRknNDja-96qQaYw0fNboEGtOZCmvztYEzUPxLNAt8g,2456
124
124
  lightning_sdk/lightning_cloud/__init__.py,sha256=o91SMAlwr4Ke5ESe8fHjqXcj31_h7rT-MlFoXA-n2EI,173
125
125
  lightning_sdk/lightning_cloud/__version__.py,sha256=lOfmWHtjmiuSG28TbKQqd2B3nwmSGOlKVFwhaj_cRJk,23
@@ -1289,7 +1289,7 @@ lightning_sdk/pipeline/__init__.py,sha256=Sja_0NJ8vgh-2ThSVP3WDI9a9qghrWd21LkaQp
1289
1289
  lightning_sdk/pipeline/pipeline.py,sha256=l9yZit7HVj8JyVFRWFGjeU4n6oG6J2f7MNEev650ONw,6346
1290
1290
  lightning_sdk/pipeline/printer.py,sha256=fsewFE_nnI-x5KscviYvQbKgNcgMyn-uT0UWlArGn-8,4828
1291
1291
  lightning_sdk/pipeline/schedule.py,sha256=J6lfjeuUMqGhX6xo6-qIliyi7KmB4e8BimTKJh7cJXY,20059
1292
- lightning_sdk/pipeline/steps.py,sha256=vo7pC4gmcx_xMfWwAIctBk39QCxzmbjvDVwWSnTswI4,14424
1292
+ lightning_sdk/pipeline/steps.py,sha256=fzgxJwRsFpwCqUCV-42A0NYBJwWi2Tz2sJuohPuzXh4,14569
1293
1293
  lightning_sdk/pipeline/utils.py,sha256=3L7UgY78w2VAVSQmelQNnz_X9zJdFo1NJBtez221ge0,3923
1294
1294
  lightning_sdk/services/__init__.py,sha256=wi1yv0SCnfJub5tOq8y9SblK3-CEseHJuvH-HmtAy7U,229
1295
1295
  lightning_sdk/services/file_endpoint.py,sha256=F_ivy1cPvyvdE5C4aJY7PBSVGn6Dj88QqObbwSvKfYQ,7673
@@ -1304,9 +1304,9 @@ lightning_sdk/utils/logging.py,sha256=WPyOx7KAn8OpRKqoDDlB7MkORtLDryJsj1WVXLYNqy
1304
1304
  lightning_sdk/utils/names.py,sha256=1EuXbIh7wldkDp1FG10oz9vIOyWrpGWeFFVy-DQBgzA,18162
1305
1305
  lightning_sdk/utils/progress.py,sha256=bLWw39fzq29PMWoFXaPIVfoS3Ug245950oWOFJ2ZaiU,12596
1306
1306
  lightning_sdk/utils/resolve.py,sha256=ukC-Zn35gNZV-fQ-ZyUgZkRPFb8nwsFh_aN7YcJ0sl8,10613
1307
- lightning_sdk-2025.12.9.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1308
- lightning_sdk-2025.12.9.dist-info/METADATA,sha256=bOGcAS9iI9HajZ3HyB8Qu518X7ZMmTJKK5BDzvX0gUM,4159
1309
- lightning_sdk-2025.12.9.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1310
- lightning_sdk-2025.12.9.dist-info/entry_points.txt,sha256=OoZa4Fc8NMs6GSN0cdA1J8e6couzAcL82CbM1yo4f_M,122
1311
- lightning_sdk-2025.12.9.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1312
- lightning_sdk-2025.12.9.dist-info/RECORD,,
1307
+ lightning_sdk-2025.12.16.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1308
+ lightning_sdk-2025.12.16.dist-info/METADATA,sha256=Der9YTQLC8A5J9Cn26jN3kcXh2aENVHMAA5t7Ahdwzg,4160
1309
+ lightning_sdk-2025.12.16.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1310
+ lightning_sdk-2025.12.16.dist-info/entry_points.txt,sha256=OoZa4Fc8NMs6GSN0cdA1J8e6couzAcL82CbM1yo4f_M,122
1311
+ lightning_sdk-2025.12.16.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1312
+ lightning_sdk-2025.12.16.dist-info/RECORD,,