lightning-sdk 2025.8.19.post0__py3-none-any.whl → 2025.8.21__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 (25) hide show
  1. lightning_sdk/__init__.py +1 -1
  2. lightning_sdk/api/llm_api.py +6 -2
  3. lightning_sdk/api/studio_api.py +99 -0
  4. lightning_sdk/cli/legacy/create.py +9 -11
  5. lightning_sdk/cli/legacy/start.py +1 -0
  6. lightning_sdk/cli/legacy/switch.py +1 -0
  7. lightning_sdk/cli/studio/start.py +1 -0
  8. lightning_sdk/cli/studio/switch.py +1 -0
  9. lightning_sdk/lightning_cloud/openapi/__init__.py +1 -0
  10. lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +85 -0
  11. lightning_sdk/lightning_cloud/openapi/models/__init__.py +1 -0
  12. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +15 -15
  13. lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +157 -1
  14. lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +27 -1
  15. lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +201 -0
  16. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1 -27
  17. lightning_sdk/llm/llm.py +2 -2
  18. lightning_sdk/studio.py +39 -6
  19. lightning_sdk/utils/progress.py +284 -0
  20. {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/METADATA +1 -1
  21. {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/RECORD +25 -23
  22. {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/LICENSE +0 -0
  23. {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/WHEEL +0 -0
  24. {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/entry_points.txt +0 -0
  25. {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,284 @@
1
+ """Studio startup/switch progress bar utilities."""
2
+
3
+ import time
4
+ import types
5
+ from enum import Enum
6
+ from typing import Any, Callable, List, Optional, Type, Union
7
+
8
+ from rich.console import Console
9
+ from rich.progress import BarColumn, Progress, SpinnerColumn, TaskID, TextColumn, TimeElapsedColumn
10
+
11
+ from lightning_sdk.lightning_cloud.openapi.models.v1_cluster_accelerator import V1ClusterAccelerator
12
+ from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_instance_status_response import (
13
+ V1GetCloudSpaceInstanceStatusResponse,
14
+ )
15
+
16
+
17
+ class StartupPhase(Enum):
18
+ """Studio startup phase messages."""
19
+
20
+ ALLOCATING_MACHINE = "Allocating machine from cloud provider..."
21
+ STUDIO_STARTING = "Studio is starting up..."
22
+ SETTING_UP_ENVIRONMENT = "Setting up Studio environment..."
23
+ RESTORING_STATE = "Restoring Studio state..."
24
+ FINALIZING_SETUP = "Finalizing Studio setup..."
25
+ COMPLETED = "Studio started successfully"
26
+
27
+
28
+ def get_switching_progress_message(percentage: int, is_base_studio: bool, is_new_cloud_space: bool) -> str:
29
+ """Get progress message for switching studios."""
30
+ percentage = max(0, min(100, round(percentage)))
31
+
32
+ if percentage > 98:
33
+ message = "Done"
34
+ elif percentage > 80:
35
+ if is_new_cloud_space:
36
+ message = "Setting up Base Studio..." if is_base_studio else "Preparing Studio..."
37
+ else:
38
+ message = "Restoring Studio..."
39
+ elif percentage > 60:
40
+ message = "Setting up machine from the cloud provider"
41
+ else:
42
+ message = "Allocating machine from the cloud provider"
43
+
44
+ return f"({percentage}%) {message}"
45
+
46
+
47
+ def estimated_studio_ready_in_seconds(
48
+ cloud_space: Any, cloud_space_instance_status: Any, accelerators: Optional[List[V1ClusterAccelerator]] = None
49
+ ) -> int:
50
+ """Calculate estimated seconds until studio is ready."""
51
+ # Default estimate
52
+ return 120
53
+
54
+
55
+ def progress_bar_growth(default_timeout: int, counter: float) -> int:
56
+ """Calculate progress bar growth based on timeout and counter."""
57
+ if default_timeout <= 0:
58
+ return 100
59
+
60
+ value = ((default_timeout - counter) / default_timeout) * 100
61
+ if value > 100:
62
+ value = 100
63
+ if value < 0:
64
+ value = 0
65
+ return int(value)
66
+
67
+
68
+ class StudioProgressTracker:
69
+ """Tracks and displays progress for studio startup/switching operations."""
70
+
71
+ def __init__(self, operation_type: str = "start", show_progress: bool = True, check_interval: float = 1.0) -> None:
72
+ """Initialize progress tracker.
73
+
74
+ Args:
75
+ operation_type: Type of operation ('start' or 'switch')
76
+ show_progress: Whether to display progress bar
77
+ check_interval: Seconds between status checks
78
+ """
79
+ self.operation_type = operation_type
80
+ self.show_progress = show_progress
81
+ self.check_interval = check_interval
82
+ self.progress: Optional[Progress] = None
83
+ self.task_id: Optional[TaskID] = None
84
+ self.console = Console()
85
+ self._last_message = ""
86
+
87
+ def __enter__(self) -> "StudioProgressTracker":
88
+ """Enter context manager."""
89
+ if self.show_progress:
90
+ self.progress = Progress(
91
+ SpinnerColumn(),
92
+ TextColumn("[progress.description]{task.description}"),
93
+ BarColumn(),
94
+ TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
95
+ TimeElapsedColumn(),
96
+ console=self.console,
97
+ transient=False,
98
+ )
99
+ self.progress.start()
100
+ self.task_id = self.progress.add_task(f"{self.operation_type.capitalize()}ing Studio...", total=100)
101
+ return self
102
+
103
+ def __exit__(
104
+ self,
105
+ exc_type: Union[Type[BaseException], None],
106
+ exc_val: Union[BaseException, None],
107
+ exc_tb: Union[types.TracebackType, None],
108
+ ) -> None:
109
+ """Exit context manager."""
110
+ if self.progress:
111
+ self.progress.stop()
112
+
113
+ def update_progress(
114
+ self, percentage: int, message: str = "", is_base_studio: bool = False, is_new_cloud_space: bool = False
115
+ ) -> None:
116
+ """Update progress bar with current percentage and message."""
117
+ if not self.progress or self.task_id is None:
118
+ return
119
+
120
+ if self.operation_type == "switch":
121
+ display_message = get_switching_progress_message(percentage, is_base_studio, is_new_cloud_space)
122
+ else:
123
+ display_message = message or f"{self.operation_type.capitalize()}ing Studio..."
124
+
125
+ # Update description if message changed
126
+ if display_message != self._last_message:
127
+ self.progress.update(self.task_id, description=display_message)
128
+ self._last_message = display_message
129
+
130
+ # Never show 100% until truly complete
131
+ completed = min(percentage, 98) if percentage < 100 else 100
132
+ self.progress.update(self.task_id, completed=completed)
133
+
134
+ # Force console refresh to ensure progress is visible
135
+ self.progress.refresh()
136
+
137
+ def complete(self, success_message: str = "") -> None:
138
+ """Mark operation as complete."""
139
+ if self.progress and self.task_id is not None:
140
+ self.progress.update(self.task_id, completed=100, description=success_message or "Done")
141
+
142
+ def track_startup_phases(
143
+ self,
144
+ status_getter: Callable[[], V1GetCloudSpaceInstanceStatusResponse],
145
+ accelerators: Optional[List[V1ClusterAccelerator]] = None,
146
+ timeout: int = 600,
147
+ ) -> None:
148
+ """Track startup phases and update progress accordingly."""
149
+ start_time = time.time()
150
+ last_progress = 5
151
+ phase_start_times = {}
152
+ last_message_time = 0
153
+ message_stability_delay = 3.0 # Seconds to wait before changing message
154
+
155
+ # Show initial progress immediately
156
+ self.update_progress(5, StartupPhase.ALLOCATING_MACHINE.value)
157
+
158
+ while True:
159
+ try:
160
+ status = status_getter()
161
+ elapsed = time.time() - start_time
162
+
163
+ # Default fallback progress based on time
164
+ time_based_progress = min(95, int((elapsed / timeout) * 100))
165
+ current_progress = max(last_progress, time_based_progress)
166
+ current_message = StartupPhase.ALLOCATING_MACHINE.value
167
+
168
+ # Check if we have detailed status information
169
+ if hasattr(status, "in_use") and status.in_use:
170
+ in_use = status.in_use
171
+
172
+ # Check startup status for detailed phases
173
+ if hasattr(in_use, "startup_status") and in_use.startup_status:
174
+ startup_status = in_use.startup_status
175
+
176
+ # Check completion first
177
+ if (
178
+ hasattr(startup_status, "top_up_restore_finished")
179
+ and startup_status.top_up_restore_finished
180
+ ):
181
+ self.complete(StartupPhase.COMPLETED.value)
182
+ break
183
+
184
+ # Check other phases in descending priority
185
+ if (
186
+ hasattr(startup_status, "initial_restore_finished")
187
+ and startup_status.initial_restore_finished
188
+ ):
189
+ current_progress = max(current_progress, 85)
190
+ current_message = StartupPhase.FINALIZING_SETUP.value
191
+ elif hasattr(startup_status, "container_ready") and startup_status.container_ready:
192
+ current_progress = max(current_progress, 70)
193
+ current_message = StartupPhase.RESTORING_STATE.value
194
+ elif hasattr(startup_status, "machine_ready") and startup_status.machine_ready:
195
+ current_progress = max(current_progress, 60)
196
+ current_message = StartupPhase.SETTING_UP_ENVIRONMENT.value
197
+
198
+ # Check general phase information
199
+ if hasattr(in_use, "phase") and in_use.phase:
200
+ phase = in_use.phase
201
+
202
+ if phase == "CLOUD_SPACE_INSTANCE_STATE_RUNNING":
203
+ current_progress = max(current_progress, 80)
204
+ current_message = StartupPhase.STUDIO_STARTING.value
205
+ elif phase == "CLOUD_SPACE_INSTANCE_STATE_PENDING":
206
+ # Track time in pending phase for smoother progress
207
+ if "pending" not in phase_start_times:
208
+ phase_start_times["pending"] = time.time()
209
+
210
+ pending_elapsed = time.time() - phase_start_times["pending"]
211
+ # Progress more smoothly through pending phase (10-60%)
212
+ pending_progress = 10 + min(50, int((pending_elapsed / 60) * 50))
213
+ current_progress = max(current_progress, pending_progress)
214
+ current_message = StartupPhase.ALLOCATING_MACHINE.value
215
+
216
+ # Check for requested machine status (pre-allocation)
217
+ elif hasattr(status, "requested") and status.requested:
218
+ if "allocation" not in phase_start_times:
219
+ phase_start_times["allocation"] = time.time()
220
+
221
+ allocation_elapsed = time.time() - phase_start_times["allocation"]
222
+ # Progress through allocation phase (5-30%)
223
+ allocation_progress = 5 + min(25, int((allocation_elapsed / 30) * 25))
224
+ current_progress = max(current_progress, allocation_progress)
225
+ current_message = StartupPhase.ALLOCATING_MACHINE.value
226
+
227
+ # Ensure progress never decreases and moves smoothly
228
+ if current_progress > last_progress:
229
+ # Smooth progress increases - don't jump too much at once
230
+ max_increment = 3 if current_progress - last_progress > 10 else current_progress - last_progress
231
+ current_progress = last_progress + max_increment
232
+
233
+ current_progress = min(98, current_progress) # Never show 100% until truly complete
234
+
235
+ # Only update message if enough time has passed since last message change
236
+ # or if this is the first message
237
+ current_time = time.time()
238
+ should_update_message = current_message != self._last_message and (
239
+ current_time - last_message_time >= message_stability_delay or last_message_time == 0
240
+ )
241
+
242
+ if should_update_message:
243
+ self.update_progress(current_progress, current_message)
244
+ last_message_time = current_time
245
+ else:
246
+ # Update progress but keep existing message
247
+ if self.progress and self.task_id is not None:
248
+ self.progress.update(self.task_id, completed=current_progress)
249
+ self.progress.refresh()
250
+
251
+ last_progress = current_progress
252
+
253
+ # Break if we timeout
254
+ if elapsed > timeout:
255
+ self.complete("Studio start may still be in progress...")
256
+ break
257
+
258
+ except Exception:
259
+ # Continue on API errors but still update progress
260
+ elapsed = time.time() - start_time
261
+ fallback_progress = min(95, max(last_progress, int((elapsed / timeout) * 100)))
262
+
263
+ # Only update message if enough time has passed
264
+ current_time = time.time()
265
+ should_update_message = StartupPhase.ALLOCATING_MACHINE.value != self._last_message and (
266
+ current_time - last_message_time >= message_stability_delay or last_message_time == 0
267
+ )
268
+
269
+ if should_update_message:
270
+ self.update_progress(fallback_progress, StartupPhase.ALLOCATING_MACHINE.value)
271
+ last_message_time = current_time
272
+ else:
273
+ # Update progress but keep existing message
274
+ if self.progress and self.task_id is not None:
275
+ self.progress.update(self.task_id, completed=fallback_progress)
276
+ self.progress.refresh()
277
+
278
+ last_progress = fallback_progress
279
+
280
+ if elapsed > timeout:
281
+ self.complete("Studio start may still be in progress...")
282
+ break
283
+
284
+ time.sleep(self.check_interval)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 2025.8.19.post0
3
+ Version: 2025.8.21
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,5 +1,5 @@
1
1
  docs/source/conf.py,sha256=r8yX20eC-4mHhMTd0SbQb5TlSWHhO6wnJ0VJ_FBFpag,13249
2
- lightning_sdk/__init__.py,sha256=5tWz-6f1MLRPtc-voiWA2ZawI8leB9UrVX6p1f6S8v4,1151
2
+ lightning_sdk/__init__.py,sha256=3CTb5XWkDB36YB2MgXk4fpAT6bY06rRC9WRuES_y8a8,1145
3
3
  lightning_sdk/agents.py,sha256=ly6Ma1j0ZgGPFyvPvMN28JWiB9dATIstFa5XM8pMi6I,1577
4
4
  lightning_sdk/ai_hub.py,sha256=iI1vNhgcz_Ff1c3rN1ogN7dK-r-HXRj6NMtS2cA14UA,6925
5
5
  lightning_sdk/base_studio.py,sha256=_Pwwl37R9GRd7t-f2kO5aQXiLNrP4sUtUNht2ZkP8LE,3678
@@ -14,7 +14,7 @@ lightning_sdk/plugin.py,sha256=f3P5-xZY6x-MX0Fs2z_Q2erSxPSiHZARO0BVkCezHw4,15192
14
14
  lightning_sdk/sandbox.py,sha256=_NvnWotEXW2rBiVFZZ4krKXxVjuAqfNh04qELSM0-Pg,5786
15
15
  lightning_sdk/serve.py,sha256=uW7zLhQ3X90ifetpxzTb8FNxifv5vIs7qZlgfEjVKzk,11794
16
16
  lightning_sdk/status.py,sha256=lLGAuSvXBoXQFEEsEYwdCi0RcSNatUn5OPjJVjDtoM0,386
17
- lightning_sdk/studio.py,sha256=l3l-TYExmnJnAQIPA6_8R2u1ynT-ewzW-q8hV_nY7nE,27138
17
+ lightning_sdk/studio.py,sha256=PUjKiSQNGWq8cvyHOUTw1ZftqWic-L4czz8KfB84-e8,28624
18
18
  lightning_sdk/teamspace.py,sha256=Ikg3LwGhskD_wAW3GfUOuMgiyEXOV8khleBeIMtN8wA,20751
19
19
  lightning_sdk/user.py,sha256=vdn8pZqkAZO0-LoRsBdg0TckRKtd_H3QF4gpiZcl4iY,1130
20
20
  lightning_sdk/api/__init__.py,sha256=Qn2VVRvir_gO7w4yxGLkZY-R3T7kdiTPKgQ57BhIA9k,413
@@ -26,11 +26,11 @@ lightning_sdk/api/deployment_api.py,sha256=v2AfoTDkQ-1CBh75FOjFkRpf6yc3U_edDy43u
26
26
  lightning_sdk/api/job_api.py,sha256=7spFPyotlSQ0Krx6WymslnpSQaaeOmFkydvhtg6p0Ic,16410
27
27
  lightning_sdk/api/license_api.py,sha256=XV3RhefyPQDYjwY9AaBZe4rByZTEAnsvLDxcdm9q0Wo,2438
28
28
  lightning_sdk/api/lit_container_api.py,sha256=jCJVwd-3MNjejL9FyvH89pzt-SeG3G8qCJD16iTMJAQ,11454
29
- lightning_sdk/api/llm_api.py,sha256=HSCpTyPknKAv6j0UYIzasXK2mFYt7FE3KF5TGUYvo2w,11049
29
+ lightning_sdk/api/llm_api.py,sha256=K_MbVGBrcVz59Pq_UKMbFKsHp-CzKotG_fzzEu3VTb8,11166
30
30
  lightning_sdk/api/mmt_api.py,sha256=hIBsGiJ2qn5UjcHDxP5WUyKGT_AIFfpSHrQVwg0afBw,10699
31
31
  lightning_sdk/api/org_api.py,sha256=Ze3z_ATVrukobujV5YdC42DKj45Vuwl7X52q_Vr-o3U,803
32
32
  lightning_sdk/api/pipeline_api.py,sha256=rJYp_FN7uUjC5xbc6K67l2eRSmVuOkijd5i8Nm5BF7I,4621
33
- lightning_sdk/api/studio_api.py,sha256=COKJlJuZm2XucV5sJaW19ojz9zjDKSpeZMVt3tm06tc,32481
33
+ lightning_sdk/api/studio_api.py,sha256=_d0zCp8RZ9iLYwO4FzfzevEMtaZ0WrzI8OOI9lrTwF8,36428
34
34
  lightning_sdk/api/teamspace_api.py,sha256=CsaaxmaLmTRIRwu37wtQ3quGYql62HJT3BZJ3Q-1d9c,16854
35
35
  lightning_sdk/api/user_api.py,sha256=sL7RIjjtmZmvCZWx7BBZslhj1BeNh4Idn-RVcdmf7M0,2598
36
36
  lightning_sdk/api/utils.py,sha256=SyxRa76JcWOJpslyzB-iID6OpVCJi0F0G69h1LmDCDA,27124
@@ -47,7 +47,7 @@ lightning_sdk/cli/legacy/ai_hub.py,sha256=8MxGQC7SZALAsIj0tZ9HMZCeVHESUcve0cNazR
47
47
  lightning_sdk/cli/legacy/clusters_menu.py,sha256=sj5FD_GDHOAyJZjltiS9_C3shPpu9fGQ8lcSsuhFQlg,1983
48
48
  lightning_sdk/cli/legacy/configure.py,sha256=Ielq38GhNAvUfr5a4oXidyHO1YOcyUa4BF1jsPU2Uq0,4471
49
49
  lightning_sdk/cli/legacy/connect.py,sha256=0qJ0yvykoPBkmCvvEbWKppt7wlUmRq3LNNGEs0gIgg8,1002
50
- lightning_sdk/cli/legacy/create.py,sha256=eAc9i7WDobvrVfkMktDNP5FoXyBLpIEKsca65XuI3l4,4037
50
+ lightning_sdk/cli/legacy/create.py,sha256=taCk19iq8CRLbS5-A9VBTYS-gpU594vXiBByxaW2KIs,3699
51
51
  lightning_sdk/cli/legacy/delete.py,sha256=1vuiRp1Gd8aO-3MzADQgUITBuzoQ0p8DfMPgi6_2-yY,3833
52
52
  lightning_sdk/cli/legacy/docker_cli.py,sha256=EozLC4qnvHhgukmnu35itfI5n7v-abCpwKPkPy3eOV4,997
53
53
  lightning_sdk/cli/legacy/download.py,sha256=Ncnk1ZuipB7owJWa2cPyBz0_e_c3eHwvUb_YYJ3Iz_Y,11414
@@ -61,10 +61,10 @@ lightning_sdk/cli/legacy/list.py,sha256=FPfx3HZSnLRjXLcDlI8PQLE41byyLSlCfAvO5ITY
61
61
  lightning_sdk/cli/legacy/mmts_menu.py,sha256=ocVzJ_GDDQLiJgccEWqcTfXTxt2jnJ-FDNgrq7t_JNc,2226
62
62
  lightning_sdk/cli/legacy/open.py,sha256=x0S2lBUa2NPQv0R9DxOLbykZ_4PHQ493RbBqpRd5C3I,2761
63
63
  lightning_sdk/cli/legacy/run.py,sha256=CG5efVA_lMx5J31aomPE3k5JTvcYXrsGo9uXO6Swn94,13963
64
- lightning_sdk/cli/legacy/start.py,sha256=wWlTLFY2a7LQaJrOF4naT0G5JGHUVRZv-PAOkL8U2ok,3050
64
+ lightning_sdk/cli/legacy/start.py,sha256=ZTqi_HqRbZVlxcvgaAE_JGXgnEzbilA1u-BsPmxsYyU,3082
65
65
  lightning_sdk/cli/legacy/stop.py,sha256=jSiuxIunDnL3A3DQ1m8GZx01Qt4Zx5vIA3u7U81C2As,2871
66
66
  lightning_sdk/cli/legacy/studios_menu.py,sha256=TA9rO6_fFHGMz0Nt4rJ6iV80X5pZE4xShrSiyXoU-oQ,4129
67
- lightning_sdk/cli/legacy/switch.py,sha256=v_EYw8gYfUyH273zHknt7XJlj07NbYDAUAWigc0AfzE,1913
67
+ lightning_sdk/cli/legacy/switch.py,sha256=G3y9BmP-0d_OKJub5fMZ0ddnGZkOFBtregMkx_KWxcw,1945
68
68
  lightning_sdk/cli/legacy/teamspace_menu.py,sha256=u5_lyB1aCD8KJIsOuxi0bvPi75McU5EbluMLyD_NBUw,4104
69
69
  lightning_sdk/cli/legacy/upload.py,sha256=JNaJWlxVclF3UTuiA7OO_5tJFk9-5bCTUQ_CVKfrdSQ,13790
70
70
  lightning_sdk/cli/legacy/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -77,9 +77,9 @@ lightning_sdk/cli/studio/create.py,sha256=o1NkEn5H-SNdpE4yC7KyikTkQM14AVGYMRZlT3
77
77
  lightning_sdk/cli/studio/delete.py,sha256=33IrIsQC4IwsZYRrys4ZxqNbVC2CwWvy6D6ilYXrLuU,1670
78
78
  lightning_sdk/cli/studio/list.py,sha256=LxY5R1aQ4OJbo4TWepK7ugrJIju9iq3Z7m2oq3U9Zcc,2387
79
79
  lightning_sdk/cli/studio/ssh.py,sha256=0p1DqKPBkrPRNN2AFlhRK9hnuEX3-33ujiBKh24jB_c,3812
80
- lightning_sdk/cli/studio/start.py,sha256=h3AQE5RCgLIcT4XoPJI6-kNVr3J1D6KjY2cUAAPjMdk,2975
80
+ lightning_sdk/cli/studio/start.py,sha256=0iArl9Uqf7PfaBLBeqfJRJqOelLTDnCmAu_SS1tiAgg,3007
81
81
  lightning_sdk/cli/studio/stop.py,sha256=pYkS1G-XYLWTxTFEIgEg7xcihzviB_gHNqgBLaW3OwQ,1635
82
- lightning_sdk/cli/studio/switch.py,sha256=uKuAv4J7qozS6YzPqz-45_ccfVWNkyWF5Pij_xDcG0M,1994
82
+ lightning_sdk/cli/studio/switch.py,sha256=U49gXiTlPmDDu92YzNuNudhphvcrMCdkSn8knqdbFZQ,2026
83
83
  lightning_sdk/cli/utils/__init__.py,sha256=0gHdWY3bqrIyiFiEh_uSBuxWpOykCjqUc8fPEV0z3no,186
84
84
  lightning_sdk/cli/utils/cloud_account_map.py,sha256=7oM7ns4ZJfkxxZhl-GMkxEkkinKbVkskx5dLcyEQiz4,414
85
85
  lightning_sdk/cli/utils/coloring.py,sha256=YEb1LiYb6CekVfCRb83-npAmNgd-7c1LzXuNDo4GLSc,2415
@@ -100,7 +100,7 @@ lightning_sdk/lightning_cloud/login.py,sha256=29iN6evpk04SAkBQmjUsRbaoKUcj9ynZDX
100
100
  lightning_sdk/lightning_cloud/rest_client.py,sha256=K2J_QXihpbp5tVzs9PzffgMCQY1NeH5tRpuJBYj27vU,7125
101
101
  lightning_sdk/lightning_cloud/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
102
  lightning_sdk/lightning_cloud/cli/__main__.py,sha256=aHrigVV0qIp74MuYTdN6uO8a9Xp6E1aOwdR8w1fG-7c,688
103
- lightning_sdk/lightning_cloud/openapi/__init__.py,sha256=JeUr4i1rOw91V3I7-FDvcj_Yw0ZASQ8DbZgFQ8qwRnk,111027
103
+ lightning_sdk/lightning_cloud/openapi/__init__.py,sha256=Tp0ZcR_C43P6IVtKVGK4j9z8Gwi5VHgcrsb8sBjUsSA,111144
104
104
  lightning_sdk/lightning_cloud/openapi/api_client.py,sha256=pUTQMNcZmH4BhpnuAXuT7wnegaxaX26bzdEWjdoLeTo,25630
105
105
  lightning_sdk/lightning_cloud/openapi/configuration.py,sha256=SkBPJ3WZ9SF1LxxWeGKa4UwbGRsk9p3-yL_Kn7l5CSM,7866
106
106
  lightning_sdk/lightning_cloud/openapi/rest.py,sha256=ZPPr6ZkBp6LtuAsiUU7D8Pz8Dt9ECbEM_26Ov74tdpw,13322
@@ -109,7 +109,7 @@ lightning_sdk/lightning_cloud/openapi/api/agent_service_api.py,sha256=Va0QcK6cO3
109
109
  lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py,sha256=0BccCXj-fpDmrWImCQzPlHz7T8Hrw-vuwPCY-ieWt8Q,5263
110
110
  lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py,sha256=2uVxfTpT8C8rtRX1WJzpYLvrNJrvKxdpdiNSeWRy4tg,129671
111
111
  lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py,sha256=NtdfsFZtQAltWyj1wYg3HNk0cxT2HWbNhAqQSLvMDgM,30948
112
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py,sha256=QLi9OoVOPbpjhveo1l1EfOWcIsKElRa1FbPucTAv654,78311
112
+ lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py,sha256=BEOPZvbNQBq5PR_bBgB-4xK3cFUHaJsFUAE03NnwXJQ,81578
113
113
  lightning_sdk/lightning_cloud/openapi/api/blog_posts_service_api.py,sha256=T6ogreuE2ZC3RPzwJ-LLdK3OCxxPlhRQaI9PPI1pFfQ,20832
114
114
  lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py,sha256=zrLYqozyQcVCRel8yd-SZgrI1CzGymtan7FlQ2nMvUk,28428
115
115
  lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py,sha256=L5KZ6weLgpBhGnl8qniqkotIXz6_ptOkz3d6lWZSfGM,435015
@@ -148,7 +148,7 @@ lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py,sha256=7gbiF09P
148
148
  lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py,sha256=VJ7VcSvdmGbPkgmQZhaOSR47olcNPMzRlmT5J5uKsng,27877
149
149
  lightning_sdk/lightning_cloud/openapi/api/user_service_api.py,sha256=bUCDZf1P16juI8-J_dpE-MvRt3x8x5HBJpluxix6Vzc,68363
150
150
  lightning_sdk/lightning_cloud/openapi/api/volume_service_api.py,sha256=pg1aaSuYJUAlUDKLN07l8wC-poU_HFxZ_98QZHty74I,10344
151
- lightning_sdk/lightning_cloud/openapi/models/__init__.py,sha256=KYLeBgLhjIi4XAv43z26p4yuNMriHC_CVGcvcyNRX6E,104935
151
+ lightning_sdk/lightning_cloud/openapi/models/__init__.py,sha256=_C4kII5kOjJQVIPBUnLhn_8AkiaAnm_rR4RpKJ7-h7k,105052
152
152
  lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py,sha256=X087AkCafKp2g8E2MR5ghU3pxCNNcoehZJttvuVfdC8,4274
153
153
  lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py,sha256=5HIzKC2DGqxIJIdZbs6KGh9pnBe9ik8FyxlXGUSc1HQ,10233
154
154
  lightning_sdk/lightning_cloud/openapi/models/agents_id_body.py,sha256=jKg8Q5cJ3iY9DpDHvig6rgezR_qYYPIAr5Cez2pSifs,22374
@@ -160,7 +160,7 @@ lightning_sdk/lightning_cloud/openapi/models/appinstances_id_body.py,sha256=DfwY
160
160
  lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py,sha256=gC2puM75rrgB36ekVmgF9rnzWE4mAp6tpaGUrlhARRU,3771
161
161
  lightning_sdk/lightning_cloud/openapi/models/apps_id_body.py,sha256=tjIpEmU6Y8nhLDT0c3JAdywxEjI-NzvgLdEhf2UXWf4,17912
162
162
  lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py,sha256=Ja_1s0PjD1hIjAvyqyp8U4WXKv2GoUGoQ-HHm8hvRbc,8874
163
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py,sha256=7mKWJC9K3myBnzF7YuIxT5YfAGqoNgvA-wrpfDeg6wE,17044
163
+ lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py,sha256=K-WvwTVmh3ruuXf-YBdNeHYCzdn7LrYIKtBcDnYwx1w,17263
164
164
  lightning_sdk/lightning_cloud/openapi/models/billing_checkout_body.py,sha256=bMABc4XkRzK-t2RzWg1bd2YZSwZkqYZoUex9iWO1lPI,5379
165
165
  lightning_sdk/lightning_cloud/openapi/models/billing_transfer_body.py,sha256=MaovoJiJDzOXNhCskZAN5UNwnFEFP7ONF83DPRgfhgk,4510
166
166
  lightning_sdk/lightning_cloud/openapi/models/billing_transfer_body1.py,sha256=6zrWBAHmmKHJgqJtxahcM1mDrO3Z55WxaGK0RY10oOw,5275
@@ -904,7 +904,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template.py,sha256=p7fV
904
904
  lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template_visibility_type.py,sha256=fCTatqsnrI0tZOB7N1Aw3y54tZtEkivNKY4Pss2vtGg,3349
905
905
  lightning_sdk/lightning_cloud/openapi/models/v1_plugin.py,sha256=mzcUs5AnfMrqMvIf7JO0DG8DkuCqYWd3pTmUXjedR_4,6883
906
906
  lightning_sdk/lightning_cloud/openapi/models/v1_plugins_list_response.py,sha256=agkEDBSfVWdppSHPuzuJEczHJBqe5SPmjRMuI-_2Ldg,3777
907
- lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py,sha256=Zzqn33fZsSTkqG709crTV9w4HvbjczS9B0Q0UMHgZVI,13931
907
+ lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py,sha256=2f1QYt40yLQpLZ3AsEs2vO6N63sI4LekAnagKT4HLJE,19794
908
908
  lightning_sdk/lightning_cloud/openapi/models/v1_post_cloud_space_artifact_events_response.py,sha256=zuDuC7QWTKRFeQxpakwVbKSM-BWKglkev6cbuLOFCIs,3118
909
909
  lightning_sdk/lightning_cloud/openapi/models/v1_presigned_url.py,sha256=6XG2sQF3NL61DadYK59Qbd3KCIq50Uv5KgOdnm1_spA,4309
910
910
  lightning_sdk/lightning_cloud/openapi/models/v1_product_license.py,sha256=XSAezLE_BpUKPTt90wQ_tepQq2LYuwPyov1xz0G-yrw,12775
@@ -913,7 +913,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py,sha256=vtZLS
913
913
  lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py,sha256=z-5iw130qv54DZFTAXE4t9VeMsME_2aoKC1zXi4koQA,3757
914
914
  lightning_sdk/lightning_cloud/openapi/models/v1_project.py,sha256=wfE_1Yy8QpUR8Qn1yBxKPrSfE5HakKzbVdWhGhza1Pg,18371
915
915
  lightning_sdk/lightning_cloud/openapi/models/v1_project_artifact.py,sha256=jMg7BHIX29bYQUK5VPHS7OXJlsZ8RvdIE9trNH5YXHU,6642
916
- lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py,sha256=0AIT0Yp0F-yF1ogKzNEz9o9JKXzlWFLEyZXcAiPdvXE,9403
916
+ lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py,sha256=jv2wkiEm5u2VhpTeRcd27dur5wnyt1QTb1ae0tzSfwg,10335
917
917
  lightning_sdk/lightning_cloud/openapi/models/v1_project_compute_daily_usage.py,sha256=92qqkHCx9gfZCg7FGVn7TDMQjuHw5E0POtLC7HoQ9pE,6565
918
918
  lightning_sdk/lightning_cloud/openapi/models/v1_project_compute_usage.py,sha256=-IJmDR0j5M2S7wfkwz5qO0riW2ZolAzrLnopnBAfckU,12121
919
919
  lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py,sha256=-UQG2VvHIGLmMT27SMk7xVtSN2YDcxcExZCeXJq0mss,25380
@@ -933,6 +933,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_quest.py,sha256=Sbf-ApnCz79mRC6n
933
933
  lightning_sdk/lightning_cloud/openapi/models/v1_quest_status.py,sha256=0iyYEDeFFy-om3nOezq1hVOwf-wynGpLmcnTLQ287Zo,3146
934
934
  lightning_sdk/lightning_cloud/openapi/models/v1_queue_server_type.py,sha256=4Gl6lgZsHDp8aLgnZnhR45yBieFGktnsOt6WeIcZ6Dc,3157
935
935
  lightning_sdk/lightning_cloud/openapi/models/v1_quotas.py,sha256=XA4nv7cWZ4D9GFXzqXOdPOJ0exrOiwrpRKy8vPOnxyk,11111
936
+ lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py,sha256=EEoBSXWBSJEU4DZvK8BzjgohD2ki2ZoRipxCpfwR5MA,6477
936
937
  lightning_sdk/lightning_cloud/openapi/models/v1_quote_subscription_response.py,sha256=yp-Xbfi13-eI7dk3p-n-hBBWvlCvBgTU6I23MXabXvo,10412
937
938
  lightning_sdk/lightning_cloud/openapi/models/v1_r2_data_connection.py,sha256=6PJpIK9tlhBVnJdhVNsO2HZkGsINDRq03iZ9vd3CLbE,8989
938
939
  lightning_sdk/lightning_cloud/openapi/models/v1_refresh_index_response.py,sha256=IU2rKiAWVuyUB3gSAlbRhSxjzucdUGt7uUS6szzl3vk,3022
@@ -1070,7 +1071,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_upstream_open_ai.py,sha256=jt1qQ
1070
1071
  lightning_sdk/lightning_cloud/openapi/models/v1_usage.py,sha256=ozMzoGD9mfZGYy4J5j50Dps19Y6o8cn-aYW_oRMZMy8,16865
1071
1072
  lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py,sha256=U7qC698Xj5tb3D93ZskG6sDf3lTXE13UTlGeDTvtRU4,14062
1072
1073
  lightning_sdk/lightning_cloud/openapi/models/v1_usage_report.py,sha256=k9pDp9UIaOEEWz6bTNWF_KMfcNCOp-F67N-IZ9MO2Rs,8304
1073
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py,sha256=xhdIxKsE-ErpTmWrdefTKmVao54_gqgXFokL8z9-AIE,72492
1074
+ lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py,sha256=Y-iImT5PxqQ_TlvH4XCxAsKkBE5bgsx7xdJE_SFazVY,71738
1074
1075
  lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py,sha256=0fnZpdhxNRXGNyILHtfm3rVztfHpSF4kXGc5kTt4zls,13960
1075
1076
  lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py,sha256=3WpZ-lf7xPwuYyQDMdP7Uc6-dh3vf5TaaUlcMfesfMk,5208
1076
1077
  lightning_sdk/lightning_cloud/openapi/models/v1_user_slurm_job_action_response.py,sha256=BdNzXH8Vsf5PHjl9Rd-TVkpAgx1YC9rf8LD0js-ba20,3058
@@ -1113,7 +1114,7 @@ lightning_sdk/lightning_cloud/utils/dataset.py,sha256=4nUspe8iAaRPgSYpXA2uAQCgyd
1113
1114
  lightning_sdk/lightning_cloud/utils/name_generator.py,sha256=MkciuA10332V0mcE2PxLIiwWomWE0Fm_gNGK01vwRr4,58046
1114
1115
  lightning_sdk/lightning_cloud/utils/network.py,sha256=axPgl8rhyPcPjxiztDxyksfxax3VNg2OXL5F5Uc81b4,406
1115
1116
  lightning_sdk/llm/__init__.py,sha256=ErZva0HqN2iPtK_6hI6GN7A_HPGNrHo3wYh7vyFdO3Q,57
1116
- lightning_sdk/llm/llm.py,sha256=an7VstxZdP50q4-W8bmvb624uz2MnSTnk93UYlIxopg,17305
1117
+ lightning_sdk/llm/llm.py,sha256=XJCIxNhvsQLZyX9oPMFZ3drdrlyzJjlwnboH2B6Sfw0,17307
1117
1118
  lightning_sdk/llm/public_assistants.py,sha256=4Gxbz5SD4mBKeSBSbay25XRhZ74Iq4ZF-kNUwl294aE,1449
1118
1119
  lightning_sdk/mmt/__init__.py,sha256=ExMu90-96bGBnyp5h0CErQszUGB1-PcjC4-R8_NYbeY,117
1119
1120
  lightning_sdk/mmt/base.py,sha256=iqVudKDxazomuezj6l7pa-m9I1EQnM82OKs4ZQbo4Ck,16434
@@ -1135,10 +1136,11 @@ lightning_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
1135
1136
  lightning_sdk/utils/config.py,sha256=DkH5e4ljBLjOVWwEBSHsF6EMBf-akSwFjHAZKHpqVbE,5369
1136
1137
  lightning_sdk/utils/dynamic.py,sha256=glUTO1JC9APtQ6Gr9SO02a3zr56-sPAXM5C3NrTpgyQ,1959
1137
1138
  lightning_sdk/utils/enum.py,sha256=h2JRzqoBcSlUdanFHmkj_j5DleBHAu1esQYUsdNI-hU,4106
1139
+ lightning_sdk/utils/progress.py,sha256=VQYD1gi-qUWa2IlZfCqnNROqwWo4g3tQ-hL7OeT85II,12706
1138
1140
  lightning_sdk/utils/resolve.py,sha256=r7sh5FvVAqb8Ax_TXED0JR3QJawom6w1wgOjAQFJ-MA,10060
1139
- lightning_sdk-2025.8.19.post0.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1140
- lightning_sdk-2025.8.19.post0.dist-info/METADATA,sha256=REZME-3X0MAoethplQ4xNCN5q-nzG3DTVdtMpSE2oPg,4136
1141
- lightning_sdk-2025.8.19.post0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1142
- lightning_sdk-2025.8.19.post0.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1143
- lightning_sdk-2025.8.19.post0.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1144
- lightning_sdk-2025.8.19.post0.dist-info/RECORD,,
1141
+ lightning_sdk-2025.8.21.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1142
+ lightning_sdk-2025.8.21.dist-info/METADATA,sha256=3Oxea3JOwVDLsI_g4erufHPCxLU2KDIwReF0jCwo6UU,4130
1143
+ lightning_sdk-2025.8.21.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1144
+ lightning_sdk-2025.8.21.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1145
+ lightning_sdk-2025.8.21.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1146
+ lightning_sdk-2025.8.21.dist-info/RECORD,,