lightning-sdk 2025.8.6rc1__py3-none-any.whl → 2025.8.7__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 CHANGED
@@ -32,6 +32,6 @@ __all__ = [
32
32
  "User",
33
33
  ]
34
34
 
35
- __version__ = "2025.08.06rc1"
35
+ __version__ = "2025.08.07"
36
36
  _check_version_and_prompt_upgrade(__version__)
37
37
  _set_tqdm_envvars_noninteractive()
@@ -4,9 +4,15 @@ import datetime
4
4
  import json
5
5
  import os
6
6
  import threading
7
+ import time
7
8
  import warnings
8
9
  from typing import Any, AsyncGenerator, Dict, Generator, List, Optional, Union
10
+ from urllib.parse import urlencode
9
11
 
12
+ from rich.prompt import Confirm
13
+
14
+ from lightning_sdk.lightning_cloud import env
15
+ from lightning_sdk.lightning_cloud.login import Auth, AuthServer
10
16
  from lightning_sdk.lightning_cloud.openapi.models import (
11
17
  StreamResultOfV1ConversationResponseChunk,
12
18
  V1ConversationResponseChunk,
@@ -15,6 +21,48 @@ from lightning_sdk.lightning_cloud.openapi.models import (
15
21
  )
16
22
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
17
23
 
24
+ LITAI_CODE = os.environ.get("LITAI_CODE", "x334uv8t7v")
25
+
26
+
27
+ class _AuthServer(AuthServer):
28
+ def __init__(self, model: str, *args: Any, **kwargs: Any) -> None:
29
+ self._model = model
30
+ super().__init__(*args, **kwargs)
31
+
32
+ def get_auth_url(self, port: int) -> str:
33
+ redirect_uri = f"http://localhost:{port}/login-complete"
34
+ params = urlencode({"redirectTo": redirect_uri, "okbhrt": LITAI_CODE, "litaimodel": self._model})
35
+ return f"{env.LIGHTNING_CLOUD_URL}/sign-in?{params}"
36
+
37
+
38
+ class _AuthLitAI(Auth):
39
+ def __init__(self, model: str, shall_confirm: bool = False) -> None:
40
+ super().__init__()
41
+ self._model = model
42
+ self._shall_confirm = shall_confirm
43
+
44
+ def _run_server(self) -> None:
45
+ if self._shall_confirm:
46
+ proceed = Confirm.ask(
47
+ "[bold yellow]LitAI needs to authenticate with Lightning AI.[/bold yellow]\n"
48
+ "This will open a browser window for login.\n"
49
+ "Do you want to continue?",
50
+ default=True,
51
+ )
52
+ if not proceed:
53
+ raise RuntimeError(
54
+ "Login cancelled. Please login at https://lightning.ai/sign-up. Or run `lightning login` to login."
55
+ )
56
+ print("Opening browser for authentication...")
57
+ print("Please come back to the terminal after logging in.")
58
+ time.sleep(1)
59
+ _AuthServer(self._model).login_with_browser(self)
60
+
61
+
62
+ def authenticate(model: str, shall_confirm: bool = True) -> None:
63
+ auth = _AuthLitAI(model, shall_confirm)
64
+ auth.authenticate()
65
+
18
66
 
19
67
  class LLMApi:
20
68
  def __init__(self) -> None:
@@ -1,12 +1,12 @@
1
1
  import sys
2
- from typing import List
2
+ from typing import List, Optional
3
3
 
4
4
  from rich.console import Console
5
5
  from simple_term_menu import TerminalMenu
6
6
 
7
7
  from lightning_sdk import Teamspace
8
8
  from lightning_sdk.api.cloud_account_api import CloudAccountApi
9
- from lightning_sdk.lightning_cloud.openapi import Externalv1Cluster, V1ProjectClusterBinding
9
+ from lightning_sdk.lightning_cloud.openapi import V1ClusterType, V1ProjectClusterBinding
10
10
 
11
11
 
12
12
  class _ClustersMenu:
@@ -22,18 +22,21 @@ class _ClustersMenu:
22
22
 
23
23
  return TerminalMenu(cluster_ids, title=title, clear_menu_on_exit=True)
24
24
 
25
- def _resolve_cluster(self, teamspace: Teamspace) -> Externalv1Cluster:
25
+ def _resolve_cluster(self, teamspace: Teamspace) -> Optional[str]:
26
26
  selected_cluster_id = None
27
27
  console = Console()
28
28
  try:
29
- selected_cluster_id = self._get_cluster_from_interactive_menu(
29
+ selected_cluster_id = teamspace.default_cloud_account or self._get_cluster_from_interactive_menu(
30
30
  possible_clusters=teamspace.cloud_account_objs
31
31
  )
32
+
32
33
  cloud_account_api = CloudAccountApi()
33
34
 
34
- return cloud_account_api.get_cloud_account(
35
- cluster_id=selected_cluster_id, org_id=teamspace.owner.id, project_id=teamspace.id
35
+ resolved_cluster_obj = cloud_account_api.get_cloud_account(
36
+ cloud_account_id=selected_cluster_id, org_id=teamspace.owner.id, teamspace_id=teamspace.id
36
37
  )
38
+
39
+ return None if resolved_cluster_obj.spec.cluster_type == V1ClusterType.GLOBAL else resolved_cluster_obj.id
37
40
  except KeyboardInterrupt:
38
41
  console.print("Operation cancelled by user")
39
42
  sys.exit(0)
@@ -15,6 +15,7 @@ from rich.prompt import Confirm
15
15
  from lightning_sdk import Machine, Teamspace
16
16
  from lightning_sdk.api.lit_container_api import LitContainerApi
17
17
  from lightning_sdk.api.utils import _get_registry_url
18
+ from lightning_sdk.cli.clusters_menu import _ClustersMenu
18
19
  from lightning_sdk.cli.deploy._auth import (
19
20
  _AuthMode,
20
21
  _Onboarding,
@@ -377,18 +378,24 @@ def _handle_cloud(
377
378
  else:
378
379
  resolved_teamspace = select_teamspace(teamspace, org, user)
379
380
 
381
+ lightning_containers_cloud_account = cloud_account
382
+ if not cloud_account:
383
+ clusters_menu = _ClustersMenu()
384
+ lightning_containers_cloud_account = clusters_menu._resolve_cluster(resolved_teamspace)
385
+ cloud_account = resolved_teamspace.default_cloud_account
386
+
380
387
  # list containers to create the project if it doesn't exist
381
388
  lit_cr = LitContainerApi()
382
- lit_cr.list_containers(resolved_teamspace.id, cloud_account=cloud_account)
389
+ lit_cr.list_containers(resolved_teamspace.id, cloud_account=lightning_containers_cloud_account)
383
390
 
384
391
  registry_url = _get_registry_url()
385
392
  container_basename = repository.split("/")[-1]
386
393
  image = (
387
- f"{registry_url}/lit-container{f'-{cloud_account}' if cloud_account is not None else ''}/"
388
- f"{resolved_teamspace.owner.name}/{resolved_teamspace.name}/{container_basename}"
394
+ f"{registry_url}/lit-container"
395
+ + (f"-{lightning_containers_cloud_account}" if lightning_containers_cloud_account is not None else "")
396
+ + f"/{resolved_teamspace.owner.name}/{resolved_teamspace.name}/{container_basename}"
389
397
  )
390
398
 
391
- cloud_account = cloud_account or resolved_teamspace.default_cloud_account
392
399
  if from_onboarding:
393
400
  thread = Thread(
394
401
  target=ls_deployer.run_on_cloud,
@@ -411,13 +418,17 @@ def _handle_cloud(
411
418
  )
412
419
  thread.start()
413
420
  console.print("🚀 Deployment started")
414
- if not _upload_container(console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, cloud_account):
421
+ if not _upload_container(
422
+ console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, lightning_containers_cloud_account
423
+ ):
415
424
  thread.join()
416
425
  return
417
426
  thread.join()
418
427
  return
419
428
 
420
- if not _upload_container(console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, cloud_account):
429
+ if not _upload_container(
430
+ console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, lightning_containers_cloud_account
431
+ ):
421
432
  return
422
433
 
423
434
  deployment_status = ls_deployer.run_on_cloud(
@@ -136,7 +136,7 @@ def folder(
136
136
  "--studio",
137
137
  default=None,
138
138
  help=(
139
- "The name of the studio to upload to. "
139
+ "The name of the studio to download from. "
140
140
  "Will show a menu with user's owned studios for selection if not specified. "
141
141
  "If provided, should be in the form of <TEAMSPACE-NAME>/<STUDIO-NAME> where the names are case-sensitive. "
142
142
  "The teamspace and studio names can be regular expressions to match, "
@@ -256,7 +256,7 @@ def _resolve_studio(studio: Optional[str]) -> Studio:
256
256
  # give user friendlier error message
257
257
  except Exception as e:
258
258
  raise StudioCliError(
259
- f"Could not find the given Studio {studio} to upload files to. "
259
+ f"Could not find the given Studio {studio} to download files from. "
260
260
  "Please contact Lightning AI directly to resolve this issue."
261
261
  ) from e
262
262
 
lightning_sdk/cli/list.py CHANGED
@@ -9,7 +9,7 @@ from typing_extensions import Literal
9
9
  from lightning_sdk import Job, Machine, Studio, Teamspace
10
10
  from lightning_sdk.cli.clusters_menu import _ClustersMenu
11
11
  from lightning_sdk.cli.teamspace_menu import _TeamspacesMenu
12
- from lightning_sdk.lightning_cloud.openapi import V1ClusterType, V1MultiMachineJob
12
+ from lightning_sdk.lightning_cloud.openapi import V1MultiMachineJob
13
13
  from lightning_sdk.lit_container import LitContainer
14
14
  from lightning_sdk.utils.resolve import _get_authed_user
15
15
 
@@ -247,8 +247,7 @@ def containers(teamspace: Optional[str] = None, cloud_account: Optional[str] = N
247
247
  resolved_teamspace = menu._resolve_teamspace(teamspace=teamspace)
248
248
 
249
249
  if not cloud_account:
250
- cloud_account_obj = clusters_menu._resolve_cluster(resolved_teamspace)
251
- cloud_account = "" if cloud_account_obj.spec.cluster_type == V1ClusterType.GLOBAL else cloud_account_obj.id
250
+ cloud_account = clusters_menu._resolve_cluster(resolved_teamspace)
252
251
 
253
252
  result = api.list_containers(
254
253
  teamspace=resolved_teamspace.name, org=resolved_teamspace.owner.name, cloud_account=cloud_account
@@ -1,22 +1,5 @@
1
1
  # coding: utf-8
2
2
 
3
- """
4
- external/v1/auth_service.proto
5
-
6
- No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501
7
-
8
- OpenAPI spec version: version not set
9
-
10
- Generated by: https://github.com/swagger-api/swagger-codegen.git
11
-
12
- NOTE
13
- ----
14
- standard swagger-codegen-cli for this python client has been modified
15
- by custom templates. The purpose of these templates is to include
16
- typing information in the API and Model code. Please refer to the
17
- main grid repository for more info
18
- """
19
-
20
3
  from __future__ import absolute_import
21
4
 
22
5
  import copy
@@ -100,8 +83,9 @@ class Configuration(six.with_metaclass(TypeWithDefault, object)):
100
83
  # per pool. urllib3 uses 1 connection as default value, but this is
101
84
  # not the best value when you are making a lot of possibly parallel
102
85
  # requests to the same host, which is often the case here.
103
- # cpu_count * 5 is used as default value to increase performance.
104
- self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
86
+ # the max of cpu_count * 5 and 500 is used as default value to increase performance.
87
+ # each re-used connection can use memory somewhere in the range of 50–100 KB by default.
88
+ self.connection_pool_maxsize = max(multiprocessing.cpu_count() * 5, 500)
105
89
 
106
90
  # Proxy URL
107
91
  self.proxy = None
@@ -44,6 +44,8 @@ class V1NodeMetrics(object):
44
44
  'cpu_capacity_cores': 'float',
45
45
  'cpu_util': 'float',
46
46
  'filesystem': 'dict(str, V1FilesystemMetrics)',
47
+ 'mem_total': 'float',
48
+ 'mem_util': 'float',
47
49
  'node_name': 'str',
48
50
  'per_gpu_mem_free': 'dict(str, float)',
49
51
  'per_gpu_mem_used': 'dict(str, float)',
@@ -57,6 +59,8 @@ class V1NodeMetrics(object):
57
59
  'cpu_capacity_cores': 'cpuCapacityCores',
58
60
  'cpu_util': 'cpuUtil',
59
61
  'filesystem': 'filesystem',
62
+ 'mem_total': 'memTotal',
63
+ 'mem_util': 'memUtil',
60
64
  'node_name': 'nodeName',
61
65
  'per_gpu_mem_free': 'perGpuMemFree',
62
66
  'per_gpu_mem_used': 'perGpuMemUsed',
@@ -66,11 +70,13 @@ class V1NodeMetrics(object):
66
70
  'timestamp': 'timestamp'
67
71
  }
68
72
 
69
- def __init__(self, cpu_capacity_cores: 'float' =None, cpu_util: 'float' =None, filesystem: 'dict(str, V1FilesystemMetrics)' =None, node_name: 'str' =None, per_gpu_mem_free: 'dict(str, float)' =None, per_gpu_mem_used: 'dict(str, float)' =None, per_gpu_power_usage_watts: 'dict(str, float)' =None, per_gpu_temperature_c: 'dict(str, float)' =None, per_gpu_util: 'dict(str, float)' =None, timestamp: 'datetime' =None): # noqa: E501
73
+ def __init__(self, cpu_capacity_cores: 'float' =None, cpu_util: 'float' =None, filesystem: 'dict(str, V1FilesystemMetrics)' =None, mem_total: 'float' =None, mem_util: 'float' =None, node_name: 'str' =None, per_gpu_mem_free: 'dict(str, float)' =None, per_gpu_mem_used: 'dict(str, float)' =None, per_gpu_power_usage_watts: 'dict(str, float)' =None, per_gpu_temperature_c: 'dict(str, float)' =None, per_gpu_util: 'dict(str, float)' =None, timestamp: 'datetime' =None): # noqa: E501
70
74
  """V1NodeMetrics - a model defined in Swagger""" # noqa: E501
71
75
  self._cpu_capacity_cores = None
72
76
  self._cpu_util = None
73
77
  self._filesystem = None
78
+ self._mem_total = None
79
+ self._mem_util = None
74
80
  self._node_name = None
75
81
  self._per_gpu_mem_free = None
76
82
  self._per_gpu_mem_used = None
@@ -85,6 +91,10 @@ class V1NodeMetrics(object):
85
91
  self.cpu_util = cpu_util
86
92
  if filesystem is not None:
87
93
  self.filesystem = filesystem
94
+ if mem_total is not None:
95
+ self.mem_total = mem_total
96
+ if mem_util is not None:
97
+ self.mem_util = mem_util
88
98
  if node_name is not None:
89
99
  self.node_name = node_name
90
100
  if per_gpu_mem_free is not None:
@@ -163,6 +173,48 @@ class V1NodeMetrics(object):
163
173
 
164
174
  self._filesystem = filesystem
165
175
 
176
+ @property
177
+ def mem_total(self) -> 'float':
178
+ """Gets the mem_total of this V1NodeMetrics. # noqa: E501
179
+
180
+
181
+ :return: The mem_total of this V1NodeMetrics. # noqa: E501
182
+ :rtype: float
183
+ """
184
+ return self._mem_total
185
+
186
+ @mem_total.setter
187
+ def mem_total(self, mem_total: 'float'):
188
+ """Sets the mem_total of this V1NodeMetrics.
189
+
190
+
191
+ :param mem_total: The mem_total of this V1NodeMetrics. # noqa: E501
192
+ :type: float
193
+ """
194
+
195
+ self._mem_total = mem_total
196
+
197
+ @property
198
+ def mem_util(self) -> 'float':
199
+ """Gets the mem_util of this V1NodeMetrics. # noqa: E501
200
+
201
+
202
+ :return: The mem_util of this V1NodeMetrics. # noqa: E501
203
+ :rtype: float
204
+ """
205
+ return self._mem_util
206
+
207
+ @mem_util.setter
208
+ def mem_util(self, mem_util: 'float'):
209
+ """Sets the mem_util of this V1NodeMetrics.
210
+
211
+
212
+ :param mem_util: The mem_util of this V1NodeMetrics. # noqa: E501
213
+ :type: float
214
+ """
215
+
216
+ self._mem_util = mem_util
217
+
166
218
  @property
167
219
  def node_name(self) -> 'str':
168
220
  """Gets the node_name of this V1NodeMetrics. # noqa: E501
lightning_sdk/llm/llm.py CHANGED
@@ -2,7 +2,7 @@ import os
2
2
  from typing import Any, AsyncGenerator, ClassVar, Dict, Generator, List, Optional, Tuple, Union
3
3
 
4
4
  from lightning_sdk.api import TeamspaceApi, UserApi
5
- from lightning_sdk.api.llm_api import LLMApi
5
+ from lightning_sdk.api.llm_api import LLMApi, authenticate
6
6
  from lightning_sdk.lightning_cloud.openapi.models.v1_conversation_response_chunk import V1ConversationResponseChunk
7
7
  from lightning_sdk.llm.public_assistants import PUBLIC_MODELS
8
8
 
@@ -56,9 +56,9 @@ class LLM:
56
56
  "(e.g., 'my-org/my-teamspace')."
57
57
  ) from e
58
58
 
59
+ self._model_provider, self._model_name = self._parse_model_name(name)
59
60
  self._get_auth_info(teamspace_name)
60
61
 
61
- self._model_provider, self._model_name = self._parse_model_name(name)
62
62
  self._enable_async = enable_async
63
63
 
64
64
  # Reuse LLMApi per teamspace (as billing is based on teamspace)
@@ -98,6 +98,7 @@ class LLM:
98
98
  if teamspace_name is None:
99
99
  # local users with no given teamspace
100
100
  try:
101
+ authenticate(model=f"{self.provider}/{self.name}")
101
102
  teamspace_api = TeamspaceApi()
102
103
  user_api = UserApi()
103
104
  authed_user = user_api._client.auth_service_get_user()
@@ -137,16 +138,21 @@ class LLM:
137
138
  self._cloud_url = LLM._cached_auth_info["cloud_url"]
138
139
  self._org = None
139
140
 
140
- def _parse_model_name(self, name: str) -> Tuple[str, str]:
141
- parts = name.split("/")
142
- if len(parts) == 1:
143
- # a user model or a org model
144
- return None, parts[0]
145
- if len(parts) == 2:
146
- return parts[0].lower(), parts[1]
147
- raise ValueError(
148
- f"Model name must be in the format `organization/model_name` or `model_name`, but got '{name}'."
149
- )
141
+ @staticmethod
142
+ def _parse_model_name(name: str) -> Tuple[str, str]:
143
+ """Parses the model name into provider and model name.
144
+
145
+ >>> LLM._parse_model_name("openai/v1/gpt-3.5-turbo")
146
+ ('openai', 'v1/gpt-3.5-turbo')
147
+ """
148
+ if "/" not in name:
149
+ raise ValueError(
150
+ f"Invalid model name format: '{name}'. "
151
+ "Model name must be in the format `provider/model_name`."
152
+ "(e.g., 'lightning-ai/gpt-oss-20b')"
153
+ )
154
+ provider, model_name = name.split("/", maxsplit=1)
155
+ return provider.lower(), model_name
150
156
 
151
157
  # returns the assistant ID
152
158
  def _get_model_id(self) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 2025.8.6rc1
3
+ Version: 2025.8.7
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=qnwB64Jaqr_ltm_0_b24mmEhBByB07nWnm-woXvM0GI,1148
2
+ lightning_sdk/__init__.py,sha256=aRSIYgnr41LLH9M5afQAlOTU4TBikwxsKWIefv98Tg8,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
@@ -26,7 +26,7 @@ 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=oc3OB1l0Jca5Nc6MAkfI-Nq-42hXJkgmkSqn22J4TeA,9261
29
+ lightning_sdk/api/llm_api.py,sha256=HSCpTyPknKAv6j0UYIzasXK2mFYt7FE3KF5TGUYvo2w,11049
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
@@ -36,21 +36,21 @@ lightning_sdk/api/user_api.py,sha256=sL7RIjjtmZmvCZWx7BBZslhj1BeNh4Idn-RVcdmf7M0
36
36
  lightning_sdk/api/utils.py,sha256=zUvTxQ01rGwZX2PNuA2V2l2esXLPSoGM_dl4AvfKTAE,24090
37
37
  lightning_sdk/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  lightning_sdk/cli/ai_hub.py,sha256=8MxGQC7SZALAsIj0tZ9HMZCeVHESUcve0cNazRzIFbE,1812
39
- lightning_sdk/cli/clusters_menu.py,sha256=AVlaWggNYU_-RZu9egagHB1JElDArx8WZMVH1DKPm2A,1801
39
+ lightning_sdk/cli/clusters_menu.py,sha256=sj5FD_GDHOAyJZjltiS9_C3shPpu9fGQ8lcSsuhFQlg,1983
40
40
  lightning_sdk/cli/coloring.py,sha256=YEb1LiYb6CekVfCRb83-npAmNgd-7c1LzXuNDo4GLSc,2415
41
41
  lightning_sdk/cli/configure.py,sha256=ZZkCYmnxrRSiZdpbNMLbnxLGy4i4ce7lEcV3NVvYfp8,4457
42
42
  lightning_sdk/cli/connect.py,sha256=LjCi_0ZJkTm8IbIzLyIL0SATEQ2bWdVb6aARXnYXcVw,988
43
43
  lightning_sdk/cli/create.py,sha256=hpts8ZjyoDEj6gG3nST7qWlZBPtN1-y4EUAfp7R_BDs,4030
44
44
  lightning_sdk/cli/delete.py,sha256=zHMAkLzt6RgF1cmM-XC6mz8TyBgvCul0FeQFK3cIOwY,3812
45
45
  lightning_sdk/cli/docker_cli.py,sha256=EozLC4qnvHhgukmnu35itfI5n7v-abCpwKPkPy3eOV4,997
46
- lightning_sdk/cli/download.py,sha256=v7IECH3boKcs-_02YvbeHfYXr7KsB-YrtJP4vJH3-rU,11385
46
+ lightning_sdk/cli/download.py,sha256=eJmOZcGVDGFCH8gTdCe_XEoUOvQA1SKbFq9sNBB5vjw,11393
47
47
  lightning_sdk/cli/entrypoint.py,sha256=aOPjtZioylgORVWJk76fSh4EYMFeyqSsdI0-i5YIx7s,3652
48
48
  lightning_sdk/cli/exceptions.py,sha256=QUF3OMAMZwBikvlusimSHSBjb6ywvHpfAumJBEaodSw,169
49
49
  lightning_sdk/cli/generate.py,sha256=8mjm5tMYIXMoN2X_eEKpwBIUcCWaARiQAmreh-9LIBg,1575
50
50
  lightning_sdk/cli/inspection.py,sha256=GA3XDC3DSkqJ4B5NQR9qmGGvkP0K8Sk90xZhzTGzC1o,1614
51
51
  lightning_sdk/cli/job_and_mmt_action.py,sha256=OV_i5K3g-NnMUF8Sq6QliQdltnhGVRdtoyZqJVXu4Ss,1659
52
52
  lightning_sdk/cli/jobs_menu.py,sha256=_2qsOBTdIKT5NCjwrBo9-AAn3fIvdN9IcVUVHF_KGQk,2162
53
- lightning_sdk/cli/list.py,sha256=Jc793aG0LZ9iFttv0fQZOqdh51Fgi53hEAyNkpwRsLg,10992
53
+ lightning_sdk/cli/list.py,sha256=VEFLG1_kQjpcbmENoWbzhR-Xqn-3GiHv7H_Mh1S6vxc,10857
54
54
  lightning_sdk/cli/mmts_menu.py,sha256=HUXo3ZoZ3fWOCNWTQWoJgUlFXYq5uVm_6uFjAq7BDe8,2219
55
55
  lightning_sdk/cli/open.py,sha256=zdQ3E9Wbi5f5wOoJqZ3yFL45kWysGaza-rCPUinrOnA,2747
56
56
  lightning_sdk/cli/run.py,sha256=CG5efVA_lMx5J31aomPE3k5JTvcYXrsGo9uXO6Swn94,13963
@@ -63,7 +63,7 @@ lightning_sdk/cli/upload.py,sha256=b_GbSJB9UP7E4w3QE0laNh6urbcAs6wJtHJJ1iVqVcM,1
63
63
  lightning_sdk/cli/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  lightning_sdk/cli/deploy/_auth.py,sha256=ccIzl0W9hJtFmhdEAn1xcBGIHQfO4d_k8grTbq4ufIs,7711
65
65
  lightning_sdk/cli/deploy/devbox.py,sha256=HOQMWehwaveawVTyBDaZhNZs_NL5g4RCWs_lf0hIW5U,6800
66
- lightning_sdk/cli/deploy/serve.py,sha256=K2e7gz1gg_UTr0j5FuI1_EKRa0t6hRaoHGpwFAXRSso,15040
66
+ lightning_sdk/cli/deploy/serve.py,sha256=-UzN3SWoMddfQu2Yu0viVDfj8woTTZuMW5MddkdXNko,15457
67
67
  lightning_sdk/deployment/__init__.py,sha256=dXsa4psDzFYFklsq3JC-2V_L4FQjGZnQAf-ZiVlqG9c,545
68
68
  lightning_sdk/deployment/deployment.py,sha256=7Sk4ORKmgMDk7Owpk_q-89ws8-Y9orX0jRZF99tNv1E,21775
69
69
  lightning_sdk/job/__init__.py,sha256=1MxjQ6rHkyUHCypSW9RuXuVMVH11WiqhIXcU2LCFMwE,64
@@ -81,7 +81,7 @@ lightning_sdk/lightning_cloud/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
81
81
  lightning_sdk/lightning_cloud/cli/__main__.py,sha256=aHrigVV0qIp74MuYTdN6uO8a9Xp6E1aOwdR8w1fG-7c,688
82
82
  lightning_sdk/lightning_cloud/openapi/__init__.py,sha256=TIHcypKt2NwQeUiiWp8rH6bDzZ4jlarRzEDR2b2OIyU,109792
83
83
  lightning_sdk/lightning_cloud/openapi/api_client.py,sha256=pUTQMNcZmH4BhpnuAXuT7wnegaxaX26bzdEWjdoLeTo,25630
84
- lightning_sdk/lightning_cloud/openapi/configuration.py,sha256=8KpFKEm-IKe3t0_o5H1Y0EJX06r94Gk5cIQerA0TNk0,8292
84
+ lightning_sdk/lightning_cloud/openapi/configuration.py,sha256=SkBPJ3WZ9SF1LxxWeGKa4UwbGRsk9p3-yL_Kn7l5CSM,7866
85
85
  lightning_sdk/lightning_cloud/openapi/rest.py,sha256=ZPPr6ZkBp6LtuAsiUU7D8Pz8Dt9ECbEM_26Ov74tdpw,13322
86
86
  lightning_sdk/lightning_cloud/openapi/api/__init__.py,sha256=JRILuZsGz6w_N3114hY5C1JuqXZmum3zRmWkv0ZtM20,4327
87
87
  lightning_sdk/lightning_cloud/openapi/api/agent_service_api.py,sha256=Va0QcK6cO3rgHxV16xI-fnq08mgZe_eFQl8mgyaZols,56603
@@ -843,7 +843,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py,sha2
843
843
  lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py,sha256=FXjBRxuNMVlNopuedGI5DV8y6Boy3CKoen6Odg9CnVk,4513
844
844
  lightning_sdk/lightning_cloud/openapi/models/v1_network_config.py,sha256=bHDZVIsqgiSi7eBf72RunvrLR-d-4b9S7oDMAZFBvCM,5476
845
845
  lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py,sha256=FMsA5E3T_94-IoZ7Dv-8N3agoZwmP7wTeFO443L_2Jw,10716
846
- lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py,sha256=setc9e61vS9LxKlfR6BcLM77ecTP_GF_OGt1xWLmc00,11683
846
+ lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py,sha256=47bu85lUHuGgLYuQwmHeh8yUfhG0K_btRA6u9ppfe-Q,13095
847
847
  lightning_sdk/lightning_cloud/openapi/models/v1_notification_preference.py,sha256=W46XDkg7j9X8V9uRu1LHcPK1jSPTSzBVVEmbJ4FVofY,6930
848
848
  lightning_sdk/lightning_cloud/openapi/models/v1_notification_preferences_request.py,sha256=CHgLj8xQ5S-v5fTqNP6d0YrJbWEvlAQ6HZ3gxsXQ428,6497
849
849
  lightning_sdk/lightning_cloud/openapi/models/v1_notification_type.py,sha256=sTNMa_VKfBaZq6_itBewEYNTqdmBC2F9KIgHDJFai44,3251
@@ -1081,7 +1081,7 @@ lightning_sdk/lightning_cloud/utils/dataset.py,sha256=4nUspe8iAaRPgSYpXA2uAQCgyd
1081
1081
  lightning_sdk/lightning_cloud/utils/name_generator.py,sha256=MkciuA10332V0mcE2PxLIiwWomWE0Fm_gNGK01vwRr4,58046
1082
1082
  lightning_sdk/lightning_cloud/utils/network.py,sha256=axPgl8rhyPcPjxiztDxyksfxax3VNg2OXL5F5Uc81b4,406
1083
1083
  lightning_sdk/llm/__init__.py,sha256=ErZva0HqN2iPtK_6hI6GN7A_HPGNrHo3wYh7vyFdO3Q,57
1084
- lightning_sdk/llm/llm.py,sha256=doRKMKceSxR0qN7uvwMc0qEl-wCd-Dn66EKQOwTk2V8,15574
1084
+ lightning_sdk/llm/llm.py,sha256=2pBLt2_WZDTkgVJaBz-mfY4P6PFuvwLubY1X9uqECxc,15851
1085
1085
  lightning_sdk/llm/public_assistants.py,sha256=ZhzHGJtg_XhPKj4w9xtjHDuBW_iSUUoqGfXqvM8kL8c,955
1086
1086
  lightning_sdk/mmt/__init__.py,sha256=ExMu90-96bGBnyp5h0CErQszUGB1-PcjC4-R8_NYbeY,117
1087
1087
  lightning_sdk/mmt/base.py,sha256=iqVudKDxazomuezj6l7pa-m9I1EQnM82OKs4ZQbo4Ck,16434
@@ -1103,9 +1103,9 @@ lightning_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
1103
1103
  lightning_sdk/utils/dynamic.py,sha256=glUTO1JC9APtQ6Gr9SO02a3zr56-sPAXM5C3NrTpgyQ,1959
1104
1104
  lightning_sdk/utils/enum.py,sha256=h2JRzqoBcSlUdanFHmkj_j5DleBHAu1esQYUsdNI-hU,4106
1105
1105
  lightning_sdk/utils/resolve.py,sha256=JjHwWNQq375d1JBcVkJrZWkcTehvuTxF2h6awvSUDoo,8094
1106
- lightning_sdk-2025.8.6rc1.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1107
- lightning_sdk-2025.8.6rc1.dist-info/METADATA,sha256=JEU93V1stWNTBz13PGuOwpa4nIs_7UVMhreZt93DH2M,4110
1108
- lightning_sdk-2025.8.6rc1.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1109
- lightning_sdk-2025.8.6rc1.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1110
- lightning_sdk-2025.8.6rc1.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1111
- lightning_sdk-2025.8.6rc1.dist-info/RECORD,,
1106
+ lightning_sdk-2025.8.7.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1107
+ lightning_sdk-2025.8.7.dist-info/METADATA,sha256=6RvCT65xX5k0-DlSRXMpQPbQnfrvmiksZHU-gZliv1A,4107
1108
+ lightning_sdk-2025.8.7.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1109
+ lightning_sdk-2025.8.7.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1110
+ lightning_sdk-2025.8.7.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1111
+ lightning_sdk-2025.8.7.dist-info/RECORD,,