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.
- lightning_sdk/__init__.py +1 -1
- lightning_sdk/api/llm_api.py +6 -2
- lightning_sdk/api/studio_api.py +99 -0
- lightning_sdk/cli/legacy/create.py +9 -11
- lightning_sdk/cli/legacy/start.py +1 -0
- lightning_sdk/cli/legacy/switch.py +1 -0
- lightning_sdk/cli/studio/start.py +1 -0
- lightning_sdk/cli/studio/switch.py +1 -0
- lightning_sdk/lightning_cloud/openapi/__init__.py +1 -0
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +85 -0
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +157 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1 -27
- lightning_sdk/llm/llm.py +2 -2
- lightning_sdk/studio.py +39 -6
- lightning_sdk/utils/progress.py +284 -0
- {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/METADATA +1 -1
- {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/RECORD +25 -23
- {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/LICENSE +0 -0
- {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/WHEEL +0 -0
- {lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/entry_points.txt +0 -0
- {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,5 +1,5 @@
|
|
|
1
1
|
docs/source/conf.py,sha256=r8yX20eC-4mHhMTd0SbQb5TlSWHhO6wnJ0VJ_FBFpag,13249
|
|
2
|
-
lightning_sdk/__init__.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
1140
|
-
lightning_sdk-2025.8.
|
|
1141
|
-
lightning_sdk-2025.8.
|
|
1142
|
-
lightning_sdk-2025.8.
|
|
1143
|
-
lightning_sdk-2025.8.
|
|
1144
|
-
lightning_sdk-2025.8.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
{lightning_sdk-2025.8.19.post0.dist-info → lightning_sdk-2025.8.21.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|