lightning-sdk 0.2.23__py3-none-any.whl → 0.2.24rc1__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 (83) hide show
  1. lightning_sdk/__init__.py +1 -1
  2. lightning_sdk/api/base_studio_api.py +9 -2
  3. lightning_sdk/api/deployment_api.py +9 -9
  4. lightning_sdk/api/llm_api.py +23 -13
  5. lightning_sdk/api/pipeline_api.py +31 -11
  6. lightning_sdk/api/studio_api.py +4 -0
  7. lightning_sdk/base_studio.py +22 -6
  8. lightning_sdk/deployment/deployment.py +17 -7
  9. lightning_sdk/lightning_cloud/openapi/__init__.py +18 -0
  10. lightning_sdk/lightning_cloud/openapi/api/__init__.py +2 -0
  11. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +114 -1
  12. lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py +129 -0
  13. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +9 -1
  14. lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +13 -1
  15. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +105 -0
  16. lightning_sdk/lightning_cloud/openapi/api/pipelines_service_api.py +4 -4
  17. lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +105 -0
  18. lightning_sdk/lightning_cloud/openapi/api/volume_service_api.py +258 -0
  19. lightning_sdk/lightning_cloud/openapi/models/__init__.py +16 -0
  20. lightning_sdk/lightning_cloud/openapi/models/agents_id_body.py +27 -1
  21. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +79 -1
  22. lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body.py +175 -0
  23. lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body1.py +175 -0
  24. lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +53 -1
  25. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +27 -1
  26. lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body1.py +123 -0
  27. lightning_sdk/lightning_cloud/openapi/models/project_id_agents_body.py +27 -1
  28. lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +27 -1
  29. lightning_sdk/lightning_cloud/openapi/models/project_id_schedules_body.py +27 -1
  30. lightning_sdk/lightning_cloud/openapi/models/schedules_id_body.py +27 -1
  31. lightning_sdk/lightning_cloud/openapi/models/update.py +29 -3
  32. lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +27 -1
  33. lightning_sdk/lightning_cloud/openapi/models/v1_billing_tier.py +1 -0
  34. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +1 -0
  35. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +27 -1
  36. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_config.py +29 -3
  37. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +29 -3
  38. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_type.py +1 -0
  39. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +104 -0
  40. lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_expert.py +279 -0
  41. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +79 -1
  42. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +53 -1
  43. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +27 -1
  44. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +27 -1
  45. lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +29 -3
  46. lightning_sdk/lightning_cloud/openapi/models/v1_create_cloud_space_environment_template_request.py +29 -3
  47. lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +79 -1
  48. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection_tier.py +103 -0
  49. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +47 -21
  50. lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +27 -1
  51. lightning_sdk/lightning_cloud/openapi/models/v1_filestore_data_connection.py +29 -3
  52. lightning_sdk/lightning_cloud/openapi/models/v1_get_job_stats_response.py +53 -1
  53. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +27 -1
  54. lightning_sdk/lightning_cloud/openapi/models/v1_get_volume_response.py +123 -0
  55. lightning_sdk/lightning_cloud/openapi/models/v1_instance_overprovisioning_spec.py +1 -27
  56. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +149 -0
  57. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1_status.py +149 -0
  58. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloudy_experts_response.py +123 -0
  59. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +27 -1
  60. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +27 -1
  61. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +1 -0
  62. lightning_sdk/lightning_cloud/openapi/models/v1_schedule.py +27 -1
  63. lightning_sdk/lightning_cloud/openapi/models/v1_schedule_action_type.py +104 -0
  64. lightning_sdk/lightning_cloud/openapi/models/v1_schedule_resource_type.py +1 -0
  65. lightning_sdk/lightning_cloud/openapi/models/v1_token_usage.py +175 -0
  66. lightning_sdk/lightning_cloud/openapi/models/v1_update_organization_credits_auto_replenish_response.py +97 -0
  67. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_credits_auto_replenish_response.py +97 -0
  68. lightning_sdk/lightning_cloud/openapi/models/v1_update_volume_response.py +123 -0
  69. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +317 -31
  70. lightning_sdk/lightning_cloud/openapi/models/volumes_id_body.py +123 -0
  71. lightning_sdk/llm/llm.py +118 -115
  72. lightning_sdk/llm/public_assistants.json +8 -0
  73. lightning_sdk/pipeline/pipeline.py +17 -2
  74. lightning_sdk/pipeline/printer.py +11 -10
  75. lightning_sdk/pipeline/steps.py +4 -1
  76. lightning_sdk/pipeline/utils.py +29 -4
  77. lightning_sdk/studio.py +3 -0
  78. {lightning_sdk-0.2.23.dist-info → lightning_sdk-0.2.24rc1.dist-info}/METADATA +1 -1
  79. {lightning_sdk-0.2.23.dist-info → lightning_sdk-0.2.24rc1.dist-info}/RECORD +83 -64
  80. {lightning_sdk-0.2.23.dist-info → lightning_sdk-0.2.24rc1.dist-info}/LICENSE +0 -0
  81. {lightning_sdk-0.2.23.dist-info → lightning_sdk-0.2.24rc1.dist-info}/WHEEL +0 -0
  82. {lightning_sdk-0.2.23.dist-info → lightning_sdk-0.2.24rc1.dist-info}/entry_points.txt +0 -0
  83. {lightning_sdk-0.2.23.dist-info → lightning_sdk-0.2.24rc1.dist-info}/top_level.txt +0 -0
lightning_sdk/__init__.py CHANGED
@@ -31,6 +31,6 @@ __all__ = [
31
31
  "User",
32
32
  ]
33
33
 
34
- __version__ = "0.2.23"
34
+ __version__ = "0.2.24.rc1"
35
35
  _check_version_and_prompt_upgrade(__version__)
36
36
  _set_tqdm_envvars_noninteractive()
@@ -1,10 +1,13 @@
1
1
  from typing import Any, List, Optional
2
2
 
3
+ from lightning_sdk.lightning_cloud.openapi import (
4
+ V1CloudSpaceEnvironmentType,
5
+ V1ListCloudSpaceEnvironmentTemplatesResponse,
6
+ )
3
7
  from lightning_sdk.lightning_cloud.openapi.models.update import Update as BaseStudioUpdateBody
4
8
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_environment_template import (
5
9
  V1CloudSpaceEnvironmentTemplate,
6
10
  )
7
- from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_environment_type import V1CloudSpaceEnvironmentType
8
11
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
9
12
 
10
13
 
@@ -21,8 +24,12 @@ class BaseStudioApi:
21
24
  except ValueError as e:
22
25
  raise ValueError(f"Base studio {base_studio_id} does not exist") from e
23
26
 
24
- def get_all_base_studios(self, org_id: str) -> List[V1CloudSpaceEnvironmentTemplate]:
27
+ def get_all_base_studios(self, org_id: str, managed: bool = True) -> V1ListCloudSpaceEnvironmentTemplatesResponse:
25
28
  """Retrieve all base studios for a given organization."""
29
+ if managed:
30
+ return self._client.cloud_space_environment_template_service_list_managed_cloud_space_environment_templates(
31
+ org_id=org_id
32
+ )
26
33
  return self._client.cloud_space_environment_template_service_list_cloud_space_environment_templates(
27
34
  org_id=org_id
28
35
  )
@@ -102,10 +102,10 @@ class ExecHealthCheck(HealthCheck):
102
102
  def __init__(
103
103
  self,
104
104
  command: str,
105
- timeout_seconds: int = 60,
106
- initial_delay_seconds: int = 5,
107
- failure_threshold: int = 12,
108
- interval_seconds: int = 5,
105
+ initial_delay_seconds: int = 0,
106
+ failure_threshold: int = 600,
107
+ interval_seconds: int = 1,
108
+ timeout_seconds: int = 30,
109
109
  ) -> None:
110
110
  self.command = command
111
111
  self.timeout_seconds = timeout_seconds
@@ -131,17 +131,17 @@ class HttpHealthCheck(HealthCheck):
131
131
  self,
132
132
  path: str,
133
133
  port: float,
134
- timeout_seconds: int = 60,
135
- initial_delay_seconds: int = 5,
136
- failure_threshold: int = 12,
137
- interval_seconds: int = 5,
134
+ initial_delay_seconds: int = 0,
135
+ failure_threshold: int = 600,
136
+ interval_seconds: int = 1,
137
+ timeout_seconds: int = 30,
138
138
  ) -> None:
139
139
  self.path = path
140
140
  self.port = port
141
- self.timeout_seconds = timeout_seconds
142
141
  self.initial_delay_seconds = initial_delay_seconds
143
142
  self.failure_threshold = failure_threshold
144
143
  self.interval_seconds = interval_seconds
144
+ self.timeout_seconds = timeout_seconds
145
145
 
146
146
 
147
147
  class AutoScalingMetric:
@@ -18,17 +18,11 @@ class LLMApi:
18
18
  def __init__(self) -> None:
19
19
  self._client = LightningClient(retry=False, max_tries=0)
20
20
 
21
- def get_public_models(self) -> List[str]:
22
- result = self._client.assistants_service_list_assistants(published=True)
23
- return result.assistants
24
-
25
- def get_org_models(self, org_id: str) -> List[str]:
26
- result = self._client.assistants_service_list_assistants(org_id=org_id)
27
- return result.assistants
28
-
29
- def get_user_models(self, user_id: str) -> List[str]:
30
- result = self._client.assistants_service_list_assistants(user_id=user_id)
31
- return result.assistants
21
+ def get_assistant(self, model_provider: str, model_name: str, user_name: str, org_name: str) -> str:
22
+ result = self._client.assistants_service_get_managed_model_assistant(
23
+ model_provider=model_provider, model_name=model_name, user_name=user_name, org_name=org_name
24
+ )
25
+ return result.id
32
26
 
33
27
  def _parse_stream_line(self, decoded_line: str) -> Optional[V1ConversationResponseChunk]:
34
28
  try:
@@ -75,7 +69,7 @@ class LLMApi:
75
69
  self,
76
70
  prompt: str,
77
71
  system_prompt: Optional[str],
78
- max_completion_tokens: int,
72
+ max_completion_tokens: Optional[int],
79
73
  assistant_id: str,
80
74
  images: Optional[List[str]] = None,
81
75
  conversation_id: Optional[str] = None,
@@ -83,8 +77,13 @@ class LLMApi:
83
77
  name: Optional[str] = None,
84
78
  metadata: Optional[Dict[str, str]] = None,
85
79
  stream: bool = False,
80
+ **kwargs: Any,
86
81
  ) -> Union[V1ConversationResponseChunk, Generator[V1ConversationResponseChunk, None, None]]:
87
82
  is_internal_conversation = os.getenv("LIGHTNING_INTERNAL_CONVERSATION", "false").lower() == "true"
83
+ ephemeral = os.getenv("LIGHTNING_EPHEMERAL", "false").lower() == "true"
84
+ if ephemeral:
85
+ conversation_id = None
86
+ name = None
88
87
  body = {
89
88
  "message": {
90
89
  "author": {"role": "user"},
@@ -100,6 +99,9 @@ class LLMApi:
100
99
  "metadata": metadata or {},
101
100
  "internal_conversation": is_internal_conversation,
102
101
  "system_prompt": system_prompt,
102
+ "ephemeral": ephemeral,
103
+ "parent_conversation_id": kwargs.get("parent_conversation_id", ""),
104
+ "parent_message_id": kwargs.get("parent_message_id", ""),
103
105
  }
104
106
  if images:
105
107
  for image in images:
@@ -123,7 +125,7 @@ class LLMApi:
123
125
  self,
124
126
  prompt: str,
125
127
  system_prompt: Optional[str],
126
- max_completion_tokens: int,
128
+ max_completion_tokens: Optional[int],
127
129
  assistant_id: str,
128
130
  images: Optional[List[str]] = None,
129
131
  conversation_id: Optional[str] = None,
@@ -131,8 +133,13 @@ class LLMApi:
131
133
  name: Optional[str] = None,
132
134
  metadata: Optional[Dict[str, str]] = None,
133
135
  stream: bool = False,
136
+ **kwargs: Any,
134
137
  ) -> Union[V1ConversationResponseChunk, AsyncGenerator[V1ConversationResponseChunk, None]]:
135
138
  is_internal_conversation = os.getenv("LIGHTNING_INTERNAL_CONVERSATION", "false").lower() == "true"
139
+ ephemeral = os.getenv("LIGHTNING_EPHEMERAL", "false").lower() == "true"
140
+ if ephemeral:
141
+ conversation_id = None
142
+ name = None
136
143
  body = {
137
144
  "message": {
138
145
  "author": {"role": "user"},
@@ -148,6 +155,9 @@ class LLMApi:
148
155
  "metadata": metadata or {},
149
156
  "internal_conversation": is_internal_conversation,
150
157
  "system_prompt": system_prompt,
158
+ "ephemeral": ephemeral,
159
+ "parent_conversation_id": kwargs.get("parent_conversation_id", ""),
160
+ "parent_message_id": kwargs.get("parent_message_id", ""),
151
161
  }
152
162
  if images:
153
163
  for image in images:
@@ -1,5 +1,6 @@
1
- from typing import TYPE_CHECKING, List, Optional
1
+ from typing import TYPE_CHECKING, List, Optional, Union
2
2
 
3
+ from lightning_sdk.api.cluster_api import ClusterApi
3
4
  from lightning_sdk.lightning_cloud.openapi.models import (
4
5
  ProjectIdPipelinesBody,
5
6
  ProjectIdSchedulesBody,
@@ -11,6 +12,7 @@ from lightning_sdk.lightning_cloud.openapi.models import (
11
12
  )
12
13
  from lightning_sdk.lightning_cloud.openapi.rest import ApiException
13
14
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
15
+ from lightning_sdk.teamspace import Teamspace
14
16
 
15
17
  if TYPE_CHECKING:
16
18
  from lightning_sdk.pipeline.schedule import Schedule
@@ -20,7 +22,8 @@ class PipelineApi:
20
22
  """Internal API client for Pipeline requests (mainly http requests)."""
21
23
 
22
24
  def __init__(self) -> None:
23
- self._client = LightningClient(retry=False, max_tries=0)
25
+ self._client = LightningClient(max_tries=0, retry=False)
26
+ self._cluster_api = ClusterApi()
24
27
 
25
28
  def get_pipeline_by_id(self, project_id: str, pipeline_id_or_name: str) -> Optional[V1Pipeline]:
26
29
  if pipeline_id_or_name.startswith("pip_"):
@@ -43,7 +46,7 @@ class PipelineApi:
43
46
  def create_pipeline(
44
47
  self,
45
48
  name: str,
46
- project_id: str,
49
+ teamspace: Teamspace,
47
50
  steps: List["V1PipelineStep"],
48
51
  shared_filesystem: bool,
49
52
  schedules: List["Schedule"],
@@ -52,20 +55,17 @@ class PipelineApi:
52
55
  body = ProjectIdPipelinesBody(
53
56
  name=name,
54
57
  steps=steps,
55
- shared_filesystem=V1SharedFilesystem(
56
- enabled=shared_filesystem,
57
- s3_folder=True,
58
- ),
58
+ shared_filesystem=self._prepare_shared_filesytem(shared_filesystem, steps, teamspace),
59
59
  parent_pipeline_id=parent_pipeline_id or "",
60
60
  )
61
61
 
62
- pipeline = self._client.pipelines_service_create_pipeline(body, project_id)
62
+ pipeline = self._client.pipelines_service_create_pipeline(body, teamspace.id)
63
63
 
64
64
  # Delete the previous schedules
65
65
  if parent_pipeline_id is not None:
66
- current_schedules = self._client.schedules_service_list_schedules(project_id).schedules
66
+ current_schedules = self._client.schedules_service_list_schedules(teamspace.id).schedules
67
67
  for schedule in current_schedules:
68
- self._client.schedules_service_delete_schedule(project_id, schedule.id)
68
+ self._client.schedules_service_delete_schedule(teamspace.id, schedule.id)
69
69
 
70
70
  if len(schedules):
71
71
  for schedule in schedules:
@@ -77,7 +77,7 @@ class PipelineApi:
77
77
  resource_type=V1ScheduleResourceType.PIPELINE,
78
78
  )
79
79
 
80
- self._client.schedules_service_create_schedule(body, project_id)
80
+ self._client.schedules_service_create_schedule(body, teamspace.id)
81
81
 
82
82
  return pipeline
83
83
 
@@ -88,3 +88,23 @@ class PipelineApi:
88
88
 
89
89
  def delete(self, project_id: str, pipeline_id: str) -> V1DeletePipelineResponse:
90
90
  return self._client.pipelines_service_delete_pipeline(project_id, pipeline_id)
91
+
92
+ def _prepare_shared_filesytem(
93
+ self, shared_filesystem: Union[bool, V1SharedFilesystem], steps: List["V1PipelineStep"], teamspace: Teamspace
94
+ ) -> V1SharedFilesystem:
95
+ if not shared_filesystem:
96
+ return V1SharedFilesystem(enabled=False)
97
+
98
+ from lightning_sdk.pipeline.utils import _get_cloud_account
99
+
100
+ cluster = self._cluster_api.get_cluster(
101
+ cluster_id=_get_cloud_account(steps), project_id=teamspace.id, org_id=teamspace.owner.id
102
+ )
103
+
104
+ if cluster.spec.aws_v1:
105
+ return V1SharedFilesystem(enabled=True, s3_folder=True)
106
+
107
+ if cluster.spec.google_cloud_v1:
108
+ return V1SharedFilesystem(enabled=True, gcs_folder=True)
109
+
110
+ raise NotImplementedError("This cluster isn't support yet")
@@ -124,6 +124,8 @@ class StudioApi:
124
124
  cloud_account: Optional[str] = None,
125
125
  source: Optional[V1CloudSpaceSourceType] = None,
126
126
  disable_secrets: bool = False,
127
+ sandbox: bool = False,
128
+ cloud_space_environment_template_id: Optional[str] = None,
127
129
  ) -> V1CloudSpace:
128
130
  """Create a Studio with a given name in a given Teamspace on a possibly given cloud_account."""
129
131
  body = ProjectIdCloudspacesBody(
@@ -133,6 +135,8 @@ class StudioApi:
133
135
  seed_files=[V1CloudSpaceSeedFile(path="main.py", contents="print('Hello, Lightning World!')\n")],
134
136
  source=source,
135
137
  disable_secrets=disable_secrets,
138
+ sandbox=sandbox,
139
+ cloud_space_environment_template_id=cloud_space_environment_template_id,
136
140
  )
137
141
  studio = self._client.cloud_space_service_create_cloud_space(body, teamspace_id)
138
142
 
@@ -1,17 +1,23 @@
1
+ from dataclasses import dataclass
1
2
  from typing import List, Optional, Union
2
3
 
3
4
  from lightning_sdk.api.base_studio_api import BaseStudioApi
4
5
  from lightning_sdk.api.user_api import UserApi
5
6
  from lightning_sdk.lightning_cloud import login
6
- from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_environment_template import (
7
- V1CloudSpaceEnvironmentTemplate,
8
- )
9
7
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_environment_type import V1CloudSpaceEnvironmentType
10
8
  from lightning_sdk.organization import Organization
11
9
  from lightning_sdk.user import User
12
10
  from lightning_sdk.utils.resolve import _resolve_org, _resolve_user
13
11
 
14
12
 
13
+ @dataclass
14
+ class BaseStudioInfo:
15
+ id: str
16
+ name: str
17
+ managed_id: str
18
+ description: str
19
+
20
+
15
21
  class BaseStudio:
16
22
  def __init__(
17
23
  self,
@@ -61,7 +67,7 @@ class BaseStudio:
61
67
  environment_type: Optional[V1CloudSpaceEnvironmentType] = None,
62
68
  machine_image_version: Optional[str] = None,
63
69
  setup_script_text: Optional[str] = None,
64
- ) -> V1CloudSpaceEnvironmentTemplate:
70
+ ) -> None:
65
71
  self._base_studio = self._base_studio_api.update_base_studio(
66
72
  self._base_studio.id,
67
73
  self._org.id,
@@ -74,10 +80,20 @@ class BaseStudio:
74
80
  disabled=disabled,
75
81
  )
76
82
 
77
- def list(self) -> List[V1CloudSpaceEnvironmentTemplate]:
83
+ def list(self, managed: bool = True) -> List[BaseStudioInfo]:
78
84
  """List all base studios in the organization.
79
85
 
80
86
  Returns:
81
87
  List[V1CloudSpaceEnvironmentTemplate]: A list of base studio templates.
82
88
  """
83
- return self._base_studio_api.get_all_base_studios(self._org.id)
89
+ result = []
90
+ for template in self._base_studio_api.get_all_base_studios(self._org.id, managed).templates:
91
+ result.append(
92
+ BaseStudioInfo(
93
+ id=template.id,
94
+ name=template.name,
95
+ managed_id=template.managed_id,
96
+ description=template.description,
97
+ ),
98
+ )
99
+ return result
@@ -197,11 +197,13 @@ class Deployment:
197
197
  if commands is not None:
198
198
  command = compose_commands(commands)
199
199
 
200
+ autoscaling_metric_name = ("CPU" if machine.is_cpu() else "GPU") if isinstance(machine, Machine) else "CPU"
201
+
200
202
  if autoscale is None:
201
203
  autoscale = AutoScaleConfig(
202
204
  min_replicas=0,
203
205
  max_replicas=1,
204
- metric="CPU" if machine.is_cpu() else "GPU",
206
+ metric=autoscaling_metric_name,
205
207
  threshold=90,
206
208
  )
207
209
 
@@ -380,27 +382,35 @@ class Deployment:
380
382
  return None
381
383
 
382
384
  @property
383
- def pending_replicas(self) -> Optional[List[str]]:
385
+ def pending_replicas(self) -> Optional[int]:
384
386
  """The number of pending replicas."""
385
387
  if self._deployment:
386
388
  self._deployment = self._deployment_api.get_deployment_by_name(self._name, self._teamspace.id)
387
- return self._deployment.status.pending_replicas
389
+ return int(self._deployment.status.pending_replicas)
390
+ return None
391
+
392
+ @property
393
+ def running_replicas(self) -> Optional[int]:
394
+ """The number of failing replicas."""
395
+ if self._deployment:
396
+ self._deployment = self._deployment_api.get_deployment_by_name(self._name, self._teamspace.id)
397
+ return int(self._deployment.status.ready_replicas)
388
398
  return None
389
399
 
390
400
  @property
391
- def failing_replicas(self) -> Optional[List[str]]:
401
+ def failing_replicas(self) -> Optional[int]:
392
402
  """The number of failing replicas."""
393
403
  if self._deployment:
394
404
  self._deployment = self._deployment_api.get_deployment_by_name(self._name, self._teamspace.id)
395
- return self._deployment.status.failing_replicas
405
+ return int(self._deployment.status.failing_replicas)
396
406
  return None
397
407
 
398
408
  @property
399
- def deleting_replicas(self) -> Optional[List[str]]:
409
+ def deleting_replicas(self) -> Optional[int]:
400
410
  """The number of deleting replicas."""
401
411
  if self._deployment:
402
412
  self._deployment = self._deployment_api.get_deployment_by_name(self._name, self._teamspace.id)
403
- return self._deployment.status.deleting_replicas
413
+ return int(self._deployment.status.deleting_replicas)
404
414
  return None
405
415
 
406
416
  @property
@@ -30,6 +30,7 @@ from lightning_sdk.lightning_cloud.openapi.api.billing_service_api import Billin
30
30
  from lightning_sdk.lightning_cloud.openapi.api.blog_posts_service_api import BlogPostsServiceApi
31
31
  from lightning_sdk.lightning_cloud.openapi.api.cloud_space_environment_template_service_api import CloudSpaceEnvironmentTemplateServiceApi
32
32
  from lightning_sdk.lightning_cloud.openapi.api.cloud_space_service_api import CloudSpaceServiceApi
33
+ from lightning_sdk.lightning_cloud.openapi.api.cloudy_service_api import CloudyServiceApi
33
34
  from lightning_sdk.lightning_cloud.openapi.api.cluster_service_api import ClusterServiceApi
34
35
  from lightning_sdk.lightning_cloud.openapi.api.data_connection_service_api import DataConnectionServiceApi
35
36
  from lightning_sdk.lightning_cloud.openapi.api.dataset_service_api import DatasetServiceApi
@@ -62,6 +63,7 @@ from lightning_sdk.lightning_cloud.openapi.api.snowflake_service_api import Snow
62
63
  from lightning_sdk.lightning_cloud.openapi.api.storage_service_api import StorageServiceApi
63
64
  from lightning_sdk.lightning_cloud.openapi.api.studio_jobs_service_api import StudioJobsServiceApi
64
65
  from lightning_sdk.lightning_cloud.openapi.api.user_service_api import UserServiceApi
66
+ from lightning_sdk.lightning_cloud.openapi.api.volume_service_api import VolumeServiceApi
65
67
  # import ApiClient
66
68
  from lightning_sdk.lightning_cloud.openapi.api_client import ApiClient
67
69
  from lightning_sdk.lightning_cloud.openapi.configuration import Configuration
@@ -103,6 +105,8 @@ from lightning_sdk.lightning_cloud.openapi.models.conversations_id_body import C
103
105
  from lightning_sdk.lightning_cloud.openapi.models.create import Create
104
106
  from lightning_sdk.lightning_cloud.openapi.models.create_checkout_session_request_wallet_type import CreateCheckoutSessionRequestWalletType
105
107
  from lightning_sdk.lightning_cloud.openapi.models.create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs import CreateDeploymentRequestDefinesASpecForTheJobThatAllowsForAutoscalingJobs
108
+ from lightning_sdk.lightning_cloud.openapi.models.credits_autoreplenish_body import CreditsAutoreplenishBody
109
+ from lightning_sdk.lightning_cloud.openapi.models.credits_autoreplenish_body1 import CreditsAutoreplenishBody1
106
110
  from lightning_sdk.lightning_cloud.openapi.models.data_connection_mount_data_connection_mount_copy_status import DataConnectionMountDataConnectionMountCopyStatus
107
111
  from lightning_sdk.lightning_cloud.openapi.models.dataset_id_versions_body import DatasetIdVersionsBody
108
112
  from lightning_sdk.lightning_cloud.openapi.models.dataset_id_visibility_body import DatasetIdVisibilityBody
@@ -175,6 +179,7 @@ from lightning_sdk.lightning_cloud.openapi.models.org_id_memberships_body import
175
179
  from lightning_sdk.lightning_cloud.openapi.models.org_id_roles_body import OrgIdRolesBody
176
180
  from lightning_sdk.lightning_cloud.openapi.models.orgs_id_body import OrgsIdBody
177
181
  from lightning_sdk.lightning_cloud.openapi.models.pipelines_id_body import PipelinesIdBody
182
+ from lightning_sdk.lightning_cloud.openapi.models.pipelines_id_body1 import PipelinesIdBody1
178
183
  from lightning_sdk.lightning_cloud.openapi.models.pipelinetemplates_id_body import PipelinetemplatesIdBody
179
184
  from lightning_sdk.lightning_cloud.openapi.models.profiler_captures_body import ProfilerCapturesBody
180
185
  from lightning_sdk.lightning_cloud.openapi.models.profiler_enabled_body import ProfilerEnabledBody
@@ -308,10 +313,12 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_publication_typ
308
313
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_seed_file import V1CloudSpaceSeedFile
309
314
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_session import V1CloudSpaceSession
310
315
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_source_type import V1CloudSpaceSourceType
316
+ from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_specialized_view import V1CloudSpaceSpecializedView
311
317
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_state import V1CloudSpaceState
312
318
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_version import V1CloudSpaceVersion
313
319
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloud_space_version_publication import V1CloudSpaceVersionPublication
314
320
  from lightning_sdk.lightning_cloud.openapi.models.v1_cloudflare_v1 import V1CloudflareV1
321
+ from lightning_sdk.lightning_cloud.openapi.models.v1_cloudy_expert import V1CloudyExpert
315
322
  from lightning_sdk.lightning_cloud.openapi.models.v1_cluster_accelerator import V1ClusterAccelerator
316
323
  from lightning_sdk.lightning_cloud.openapi.models.v1_cluster_availability import V1ClusterAvailability
317
324
  from lightning_sdk.lightning_cloud.openapi.models.v1_cluster_capacity_reservation import V1ClusterCapacityReservation
@@ -388,6 +395,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_data_connection import V1Da
388
395
  from lightning_sdk.lightning_cloud.openapi.models.v1_data_connection_artifact import V1DataConnectionArtifact
389
396
  from lightning_sdk.lightning_cloud.openapi.models.v1_data_connection_mount import V1DataConnectionMount
390
397
  from lightning_sdk.lightning_cloud.openapi.models.v1_data_connection_state import V1DataConnectionState
398
+ from lightning_sdk.lightning_cloud.openapi.models.v1_data_connection_tier import V1DataConnectionTier
391
399
  from lightning_sdk.lightning_cloud.openapi.models.v1_data_path import V1DataPath
392
400
  from lightning_sdk.lightning_cloud.openapi.models.v1_dataset import V1Dataset
393
401
  from lightning_sdk.lightning_cloud.openapi.models.v1_dataset_type import V1DatasetType
@@ -569,6 +577,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_get_user_balance_response i
569
577
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_user_notification_preferences_response import V1GetUserNotificationPreferencesResponse
570
578
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_user_response import V1GetUserResponse
571
579
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_user_storage_breakdown_response import V1GetUserStorageBreakdownResponse
580
+ from lightning_sdk.lightning_cloud.openapi.models.v1_get_volume_response import V1GetVolumeResponse
572
581
  from lightning_sdk.lightning_cloud.openapi.models.v1_git_credentials import V1GitCredentials
573
582
  from lightning_sdk.lightning_cloud.openapi.models.v1_google_cloud_direct_v1 import V1GoogleCloudDirectV1
574
583
  from lightning_sdk.lightning_cloud.openapi.models.v1_google_cloud_direct_v1_status import V1GoogleCloudDirectV1Status
@@ -599,6 +608,8 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_job_type import V1JobType
599
608
  from lightning_sdk.lightning_cloud.openapi.models.v1_joinable_organization import V1JoinableOrganization
600
609
  from lightning_sdk.lightning_cloud.openapi.models.v1_keep_alive_cloud_space_instance_response import V1KeepAliveCloudSpaceInstanceResponse
601
610
  from lightning_sdk.lightning_cloud.openapi.models.v1_knowledge_configuration import V1KnowledgeConfiguration
611
+ from lightning_sdk.lightning_cloud.openapi.models.v1_kubernetes_direct_v1 import V1KubernetesDirectV1
612
+ from lightning_sdk.lightning_cloud.openapi.models.v1_kubernetes_direct_v1_status import V1KubernetesDirectV1Status
602
613
  from lightning_sdk.lightning_cloud.openapi.models.v1_lambda_labs_direct_v1 import V1LambdaLabsDirectV1
603
614
  from lightning_sdk.lightning_cloud.openapi.models.v1_lightning_app_user import V1LightningAppUser
604
615
  from lightning_sdk.lightning_cloud.openapi.models.v1_lightning_auth import V1LightningAuth
@@ -634,6 +645,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloud_space_tags_respo
634
645
  from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloud_space_version_publications_response import V1ListCloudSpaceVersionPublicationsResponse
635
646
  from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloud_space_versions_response import V1ListCloudSpaceVersionsResponse
636
647
  from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloud_spaces_response import V1ListCloudSpacesResponse
648
+ from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloudy_experts_response import V1ListCloudyExpertsResponse
637
649
  from lightning_sdk.lightning_cloud.openapi.models.v1_list_cluster_accelerators_response import V1ListClusterAcceleratorsResponse
638
650
  from lightning_sdk.lightning_cloud.openapi.models.v1_list_cluster_availabilities_response import V1ListClusterAvailabilitiesResponse
639
651
  from lightning_sdk.lightning_cloud.openapi.models.v1_list_cluster_capacity_reservations_response import V1ListClusterCapacityReservationsResponse
@@ -860,6 +872,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_slurm_job import V1SLURMJob
860
872
  from lightning_sdk.lightning_cloud.openapi.models.v1_ssh_key_pair import V1SSHKeyPair
861
873
  from lightning_sdk.lightning_cloud.openapi.models.v1_ssh_public_key import V1SSHPublicKey
862
874
  from lightning_sdk.lightning_cloud.openapi.models.v1_schedule import V1Schedule
875
+ from lightning_sdk.lightning_cloud.openapi.models.v1_schedule_action_type import V1ScheduleActionType
863
876
  from lightning_sdk.lightning_cloud.openapi.models.v1_schedule_resource_type import V1ScheduleResourceType
864
877
  from lightning_sdk.lightning_cloud.openapi.models.v1_search_job_logs_response import V1SearchJobLogsResponse
865
878
  from lightning_sdk.lightning_cloud.openapi.models.v1_search_user import V1SearchUser
@@ -904,6 +917,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_system_metrics_aggregated i
904
917
  from lightning_sdk.lightning_cloud.openapi.models.v1_system_metrics_list import V1SystemMetricsList
905
918
  from lightning_sdk.lightning_cloud.openapi.models.v1_telemetry import V1Telemetry
906
919
  from lightning_sdk.lightning_cloud.openapi.models.v1_timestamp_code_telemetry import V1TimestampCodeTelemetry
920
+ from lightning_sdk.lightning_cloud.openapi.models.v1_token_usage import V1TokenUsage
907
921
  from lightning_sdk.lightning_cloud.openapi.models.v1_transaction import V1Transaction
908
922
  from lightning_sdk.lightning_cloud.openapi.models.v1_transfer_cloud_space_response import V1TransferCloudSpaceResponse
909
923
  from lightning_sdk.lightning_cloud.openapi.models.v1_transfer_org_balance_response import V1TransferOrgBalanceResponse
@@ -929,12 +943,15 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_update_lit_page_response im
929
943
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_lit_repository_response import V1UpdateLitRepositoryResponse
930
944
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_metrics_stream_visibility_response import V1UpdateMetricsStreamVisibilityResponse
931
945
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_model_visibility_response import V1UpdateModelVisibilityResponse
946
+ from lightning_sdk.lightning_cloud.openapi.models.v1_update_organization_credits_auto_replenish_response import V1UpdateOrganizationCreditsAutoReplenishResponse
932
947
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_project_cluster_accelerators_response import V1UpdateProjectClusterAcceleratorsResponse
933
948
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_shared_metrics_stream_response import V1UpdateSharedMetricsStreamResponse
934
949
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_snowflake_query_response import V1UpdateSnowflakeQueryResponse
950
+ from lightning_sdk.lightning_cloud.openapi.models.v1_update_user_credits_auto_replenish_response import V1UpdateUserCreditsAutoReplenishResponse
935
951
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_user_request import V1UpdateUserRequest
936
952
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_user_viewed_new_features_request import V1UpdateUserViewedNewFeaturesRequest
937
953
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_user_viewed_new_features_response import V1UpdateUserViewedNewFeaturesResponse
954
+ from lightning_sdk.lightning_cloud.openapi.models.v1_update_volume_response import V1UpdateVolumeResponse
938
955
  from lightning_sdk.lightning_cloud.openapi.models.v1_upload_agent_job_artifact_response import V1UploadAgentJobArtifactResponse
939
956
  from lightning_sdk.lightning_cloud.openapi.models.v1_upload_agent_job_output_response import V1UploadAgentJobOutputResponse
940
957
  from lightning_sdk.lightning_cloud.openapi.models.v1_upload_lightningapp_instance_artifact_response import V1UploadLightningappInstanceArtifactResponse
@@ -979,6 +996,7 @@ from lightning_sdk.lightning_cloud.openapi.models.version_uploads_body1 import V
979
996
  from lightning_sdk.lightning_cloud.openapi.models.versions_id_body import VersionsIdBody
980
997
  from lightning_sdk.lightning_cloud.openapi.models.versions_version_body import VersionsVersionBody
981
998
  from lightning_sdk.lightning_cloud.openapi.models.versions_version_body1 import VersionsVersionBody1
999
+ from lightning_sdk.lightning_cloud.openapi.models.volumes_id_body import VolumesIdBody
982
1000
  from lightning_sdk.lightning_cloud.openapi.models.works_id_body import WorksIdBody
983
1001
  from lightning_sdk.lightning_cloud.openapi.models.v1_image_spec import V1ImageSpec as Gridv1ImageSpec
984
1002
  from lightning_sdk.lightning_cloud.openapi.models.clusters_id_body import ClustersIdBody as Body
@@ -11,6 +11,7 @@ from lightning_sdk.lightning_cloud.openapi.api.billing_service_api import Billin
11
11
  from lightning_sdk.lightning_cloud.openapi.api.blog_posts_service_api import BlogPostsServiceApi
12
12
  from lightning_sdk.lightning_cloud.openapi.api.cloud_space_environment_template_service_api import CloudSpaceEnvironmentTemplateServiceApi
13
13
  from lightning_sdk.lightning_cloud.openapi.api.cloud_space_service_api import CloudSpaceServiceApi
14
+ from lightning_sdk.lightning_cloud.openapi.api.cloudy_service_api import CloudyServiceApi
14
15
  from lightning_sdk.lightning_cloud.openapi.api.cluster_service_api import ClusterServiceApi
15
16
  from lightning_sdk.lightning_cloud.openapi.api.data_connection_service_api import DataConnectionServiceApi
16
17
  from lightning_sdk.lightning_cloud.openapi.api.dataset_service_api import DatasetServiceApi
@@ -43,3 +44,4 @@ from lightning_sdk.lightning_cloud.openapi.api.snowflake_service_api import Snow
43
44
  from lightning_sdk.lightning_cloud.openapi.api.storage_service_api import StorageServiceApi
44
45
  from lightning_sdk.lightning_cloud.openapi.api.studio_jobs_service_api import StudioJobsServiceApi
45
46
  from lightning_sdk.lightning_cloud.openapi.api.user_service_api import UserServiceApi
47
+ from lightning_sdk.lightning_cloud.openapi.api.volume_service_api import VolumeServiceApi