lightning-sdk 0.1.49__py3-none-any.whl → 2025.11.5__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 (669) hide show
  1. lightning_sdk/__init__.py +19 -9
  2. lightning_sdk/__version__.py +3 -0
  3. lightning_sdk/agents.py +2 -1
  4. lightning_sdk/ai_hub.py +43 -38
  5. lightning_sdk/api/__init__.py +2 -0
  6. lightning_sdk/api/ai_hub_api.py +49 -6
  7. lightning_sdk/api/base_studio_api.py +90 -0
  8. lightning_sdk/api/cloud_account_api.py +225 -0
  9. lightning_sdk/api/deployment_api.py +133 -27
  10. lightning_sdk/api/job_api.py +147 -34
  11. lightning_sdk/api/license_api.py +37 -0
  12. lightning_sdk/api/lit_container_api.py +231 -19
  13. lightning_sdk/api/llm_api.py +306 -0
  14. lightning_sdk/api/mmt_api.py +112 -28
  15. lightning_sdk/api/pipeline_api.py +120 -0
  16. lightning_sdk/api/studio_api.py +440 -89
  17. lightning_sdk/api/teamspace_api.py +269 -31
  18. lightning_sdk/api/user_api.py +56 -2
  19. lightning_sdk/api/utils.py +185 -52
  20. lightning_sdk/base_studio.py +123 -0
  21. lightning_sdk/cli/__init__.py +1 -0
  22. lightning_sdk/cli/base_studio/__init__.py +10 -0
  23. lightning_sdk/cli/base_studio/list.py +43 -0
  24. lightning_sdk/cli/config/__init__.py +14 -0
  25. lightning_sdk/cli/config/get.py +57 -0
  26. lightning_sdk/cli/config/set.py +92 -0
  27. lightning_sdk/cli/config/show.py +9 -0
  28. lightning_sdk/cli/entrypoint.py +98 -56
  29. lightning_sdk/cli/groups.py +56 -0
  30. lightning_sdk/cli/job/__init__.py +7 -0
  31. lightning_sdk/cli/legacy/__init__.py +0 -0
  32. lightning_sdk/cli/legacy/ai_hub.py +65 -0
  33. lightning_sdk/cli/legacy/clusters_menu.py +49 -0
  34. lightning_sdk/cli/legacy/configure.py +129 -0
  35. lightning_sdk/cli/legacy/connect.py +34 -0
  36. lightning_sdk/cli/legacy/create.py +115 -0
  37. lightning_sdk/cli/legacy/delete.py +131 -0
  38. lightning_sdk/cli/legacy/deploy/__init__.py +0 -0
  39. lightning_sdk/cli/legacy/deploy/_auth.py +196 -0
  40. lightning_sdk/cli/legacy/deploy/devbox.py +163 -0
  41. lightning_sdk/cli/legacy/deploy/serve.py +452 -0
  42. lightning_sdk/cli/legacy/docker_cli.py +22 -0
  43. lightning_sdk/cli/legacy/download.py +322 -0
  44. lightning_sdk/cli/legacy/entrypoint.py +110 -0
  45. lightning_sdk/cli/legacy/generate.py +52 -0
  46. lightning_sdk/cli/legacy/inspection.py +45 -0
  47. lightning_sdk/cli/{job_and_mmt_action.py → legacy/job_and_mmt_action.py} +6 -6
  48. lightning_sdk/cli/{jobs_menu.py → legacy/jobs_menu.py} +3 -2
  49. lightning_sdk/cli/legacy/list.py +326 -0
  50. lightning_sdk/cli/{mmts_menu.py → legacy/mmts_menu.py} +3 -2
  51. lightning_sdk/cli/legacy/open.py +81 -0
  52. lightning_sdk/cli/legacy/run.py +443 -0
  53. lightning_sdk/cli/legacy/start.py +107 -0
  54. lightning_sdk/cli/legacy/stop.py +107 -0
  55. lightning_sdk/cli/{studios_menu.py → legacy/studios_menu.py} +24 -1
  56. lightning_sdk/cli/legacy/switch.py +63 -0
  57. lightning_sdk/cli/{teamspace_menu.py → legacy/teamspace_menu.py} +12 -3
  58. lightning_sdk/cli/legacy/upload.py +382 -0
  59. lightning_sdk/cli/license/__init__.py +14 -0
  60. lightning_sdk/cli/license/get.py +15 -0
  61. lightning_sdk/cli/license/list.py +45 -0
  62. lightning_sdk/cli/license/set.py +13 -0
  63. lightning_sdk/cli/mmt/__init__.py +7 -0
  64. lightning_sdk/cli/studio/__init__.py +24 -0
  65. lightning_sdk/cli/studio/connect.py +139 -0
  66. lightning_sdk/cli/studio/create.py +96 -0
  67. lightning_sdk/cli/studio/delete.py +49 -0
  68. lightning_sdk/cli/studio/list.py +85 -0
  69. lightning_sdk/cli/studio/ssh.py +64 -0
  70. lightning_sdk/cli/studio/start.py +115 -0
  71. lightning_sdk/cli/studio/stop.py +45 -0
  72. lightning_sdk/cli/studio/switch.py +66 -0
  73. lightning_sdk/cli/utils/__init__.py +7 -0
  74. lightning_sdk/cli/utils/cloud_account_map.py +10 -0
  75. lightning_sdk/cli/utils/coloring.py +60 -0
  76. lightning_sdk/cli/utils/get_base_studio.py +24 -0
  77. lightning_sdk/cli/utils/handle_machine_and_gpus_args.py +69 -0
  78. lightning_sdk/cli/utils/logging.py +122 -0
  79. lightning_sdk/cli/utils/owner_selection.py +110 -0
  80. lightning_sdk/cli/utils/resolve.py +28 -0
  81. lightning_sdk/cli/utils/richt_print.py +35 -0
  82. lightning_sdk/cli/utils/save_to_config.py +27 -0
  83. lightning_sdk/cli/utils/ssh_connection.py +59 -0
  84. lightning_sdk/cli/utils/studio_selection.py +113 -0
  85. lightning_sdk/cli/utils/teamspace_selection.py +125 -0
  86. lightning_sdk/cli/vm/__init__.py +20 -0
  87. lightning_sdk/cli/vm/create.py +33 -0
  88. lightning_sdk/cli/vm/delete.py +25 -0
  89. lightning_sdk/cli/vm/list.py +30 -0
  90. lightning_sdk/cli/vm/ssh.py +31 -0
  91. lightning_sdk/cli/vm/start.py +60 -0
  92. lightning_sdk/cli/vm/stop.py +25 -0
  93. lightning_sdk/cli/vm/switch.py +38 -0
  94. lightning_sdk/constants.py +1 -0
  95. lightning_sdk/deployment/__init__.py +4 -0
  96. lightning_sdk/deployment/deployment.py +208 -28
  97. lightning_sdk/helpers.py +73 -34
  98. lightning_sdk/job/base.py +112 -12
  99. lightning_sdk/job/job.py +73 -44
  100. lightning_sdk/job/v1.py +28 -35
  101. lightning_sdk/job/v2.py +54 -17
  102. lightning_sdk/job/work.py +7 -3
  103. lightning_sdk/lightning_cloud/login.py +325 -18
  104. lightning_sdk/lightning_cloud/openapi/__init__.py +346 -26
  105. lightning_sdk/lightning_cloud/openapi/api/__init__.py +14 -0
  106. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1801 -384
  107. lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py +376 -0
  108. lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +414 -2
  109. lightning_sdk/lightning_cloud/openapi/api/blog_posts_service_api.py +533 -0
  110. lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py +638 -0
  111. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +2563 -866
  112. lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py +327 -0
  113. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +1720 -347
  114. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +210 -4
  115. lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +126 -2119
  116. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +283 -0
  117. lightning_sdk/lightning_cloud/openapi/api/git_credentials_service_api.py +497 -0
  118. lightning_sdk/lightning_cloud/openapi/api/incidents_service_api.py +1058 -0
  119. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +2326 -492
  120. lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +2273 -0
  121. lightning_sdk/lightning_cloud/openapi/api/lit_dataset_service_api.py +1973 -0
  122. lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +17 -5
  123. lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +473 -5
  124. lightning_sdk/lightning_cloud/openapi/api/markets_service_api.py +145 -0
  125. lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +24 -24
  126. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +105 -0
  127. lightning_sdk/lightning_cloud/openapi/api/pipeline_templates_service_api.py +339 -0
  128. lightning_sdk/lightning_cloud/openapi/api/pipelines_service_api.py +795 -0
  129. lightning_sdk/lightning_cloud/openapi/api/product_license_service_api.py +525 -0
  130. lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +106 -5
  131. lightning_sdk/lightning_cloud/openapi/api/schedules_service_api.py +924 -0
  132. lightning_sdk/lightning_cloud/openapi/api/sdk_command_history_service_api.py +141 -0
  133. lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +202 -0
  134. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1508 -251
  135. lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +121 -97
  136. lightning_sdk/lightning_cloud/openapi/api/volume_service_api.py +258 -0
  137. lightning_sdk/lightning_cloud/openapi/configuration.py +4 -20
  138. lightning_sdk/lightning_cloud/openapi/models/__init__.py +332 -26
  139. lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +27 -1
  140. lightning_sdk/lightning_cloud/openapi/models/agents_id_body.py +79 -1
  141. lightning_sdk/lightning_cloud/openapi/models/alertingevents_id_body.py +409 -0
  142. lightning_sdk/lightning_cloud/openapi/models/alerts_config_billing.py +175 -0
  143. lightning_sdk/lightning_cloud/openapi/models/alerts_config_studios.py +149 -0
  144. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +303 -17
  145. lightning_sdk/lightning_cloud/openapi/models/blogposts_id_body.py +305 -0
  146. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_systemmetrics_body.py +149 -0
  147. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_visibility_body.py +149 -0
  148. lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +53 -1
  149. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +15 -15
  150. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +81 -3
  151. lightning_sdk/lightning_cloud/openapi/models/cluster_id_kubernetestemplates_body.py +201 -0
  152. lightning_sdk/lightning_cloud/openapi/models/cluster_id_metrics_body.py +305 -0
  153. lightning_sdk/lightning_cloud/openapi/models/cluster_id_slurmusers_body.py +201 -0
  154. lightning_sdk/lightning_cloud/openapi/models/cluster_id_usagerestrictions_body.py +201 -0
  155. lightning_sdk/lightning_cloud/openapi/models/conversations_id_body1.py +123 -0
  156. lightning_sdk/lightning_cloud/openapi/models/create.py +105 -1
  157. lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +131 -1
  158. lightning_sdk/lightning_cloud/openapi/models/create_machine_request_represents_the_request_to_create_a_machine.py +461 -0
  159. lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body.py +175 -0
  160. lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body1.py +175 -0
  161. lightning_sdk/lightning_cloud/openapi/models/dataset_id_versions_body.py +149 -0
  162. lightning_sdk/lightning_cloud/openapi/models/dataset_id_visibility_body.py +149 -0
  163. lightning_sdk/lightning_cloud/openapi/models/deployment_id_alertingpolicies_body.py +357 -0
  164. lightning_sdk/lightning_cloud/openapi/models/deployment_id_alertingpolicies_body1.py +331 -0
  165. lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +315 -3
  166. lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +27 -1
  167. lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +199 -69
  168. lightning_sdk/lightning_cloud/openapi/models/externalv1_cluster.py +27 -1
  169. lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +79 -1
  170. lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +1 -53
  171. lightning_sdk/lightning_cloud/openapi/models/id_contactowner_body.py +149 -0
  172. lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +27 -1
  173. lightning_sdk/lightning_cloud/openapi/models/id_render_body.py +123 -0
  174. lightning_sdk/lightning_cloud/openapi/models/id_reportrestarttimings_body.py +123 -0
  175. lightning_sdk/lightning_cloud/openapi/models/id_sleepconfig_body.py +175 -0
  176. lightning_sdk/lightning_cloud/openapi/models/id_transfer_body.py +175 -0
  177. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body1.py +123 -0
  178. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body2.py +149 -0
  179. lightning_sdk/lightning_cloud/openapi/models/incident_id_messages_body.py +123 -0
  180. lightning_sdk/lightning_cloud/openapi/models/incidents_id_body.py +279 -0
  181. lightning_sdk/lightning_cloud/openapi/models/{v1_list_service_executions_response.py → job_id_reportroutingtelemetry_body.py} +23 -23
  182. lightning_sdk/lightning_cloud/openapi/models/kubernetestemplates_id_body.py +201 -0
  183. lightning_sdk/lightning_cloud/openapi/models/license_key_validate_body.py +123 -0
  184. lightning_sdk/lightning_cloud/openapi/models/litdatasets_dataset_id_body.py +149 -0
  185. lightning_sdk/lightning_cloud/openapi/models/litregistry_lit_repo_name_body.py +123 -0
  186. lightning_sdk/lightning_cloud/openapi/models/message_id_actions_body.py +201 -0
  187. lightning_sdk/lightning_cloud/openapi/models/messages_id_body.py +123 -0
  188. lightning_sdk/lightning_cloud/openapi/models/messages_message_id_body.py +123 -0
  189. lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +79 -1
  190. lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +27 -1
  191. lightning_sdk/lightning_cloud/openapi/models/model_id_versions_body.py +27 -1
  192. lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +27 -1
  193. lightning_sdk/lightning_cloud/openapi/models/models_id_body.py +123 -0
  194. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +109 -31
  195. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body1.py +149 -0
  196. lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
  197. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +627 -3
  198. lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body.py +539 -0
  199. lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body1.py +123 -0
  200. lightning_sdk/lightning_cloud/openapi/models/pipelinetemplates_id_body.py +331 -0
  201. lightning_sdk/lightning_cloud/openapi/models/project_id_agents_body.py +27 -1
  202. lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +131 -1
  203. lightning_sdk/lightning_cloud/openapi/models/project_id_litdatasets_body.py +227 -0
  204. lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +2 -0
  205. lightning_sdk/lightning_cloud/openapi/models/project_id_pipelines_body.py +253 -0
  206. lightning_sdk/lightning_cloud/openapi/models/project_id_schedules_body.py +331 -0
  207. lightning_sdk/lightning_cloud/openapi/models/project_id_storage_body.py +27 -1
  208. lightning_sdk/lightning_cloud/openapi/models/project_id_storagetransfers_body.py +175 -0
  209. lightning_sdk/lightning_cloud/openapi/models/project_tab_management_messages.py +123 -0
  210. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +523 -3
  211. lightning_sdk/lightning_cloud/openapi/models/{service_artifact_artifact_kind.py → protobuf_null_value.py} +7 -9
  212. lightning_sdk/lightning_cloud/openapi/models/schedules_id_body.py +513 -0
  213. lightning_sdk/lightning_cloud/openapi/models/server_id_alerts_body.py +201 -0
  214. lightning_sdk/lightning_cloud/openapi/models/setup.py +149 -0
  215. lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +93 -15
  216. lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +41 -15
  217. lightning_sdk/lightning_cloud/openapi/models/storagetransfers_validate_body.py +149 -0
  218. lightning_sdk/lightning_cloud/openapi/models/update.py +233 -129
  219. lightning_sdk/lightning_cloud/openapi/models/update1.py +383 -0
  220. lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body1.py +149 -0
  221. lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body1.py +149 -0
  222. lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body.py +1 -27
  223. lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body1.py +201 -0
  224. lightning_sdk/lightning_cloud/openapi/models/usagerestrictions_id_body.py +201 -0
  225. lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +107 -3
  226. lightning_sdk/lightning_cloud/openapi/models/user_id_upgradetrigger_body.py +201 -0
  227. lightning_sdk/lightning_cloud/openapi/models/user_user_id_body.py +201 -0
  228. lightning_sdk/lightning_cloud/openapi/models/v1_abort_storage_transfer_response.py +97 -0
  229. lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +188 -6
  230. lightning_sdk/lightning_cloud/openapi/models/v1_aggregated_pod_metrics.py +799 -0
  231. lightning_sdk/lightning_cloud/openapi/models/v1_ai_pod_v1.py +175 -0
  232. lightning_sdk/lightning_cloud/openapi/models/v1_alert_method.py +102 -0
  233. lightning_sdk/lightning_cloud/openapi/models/v1_alerts_config.py +149 -0
  234. lightning_sdk/lightning_cloud/openapi/models/v1_artifact.py +27 -1
  235. lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +79 -1
  236. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +6 -0
  237. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_session_daily_aggregated.py +383 -0
  238. lightning_sdk/lightning_cloud/openapi/models/v1_author.py +201 -0
  239. lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +53 -1
  240. lightning_sdk/lightning_cloud/openapi/models/v1_billing_subscription.py +27 -1
  241. lightning_sdk/lightning_cloud/openapi/models/v1_billing_tier.py +1 -0
  242. lightning_sdk/lightning_cloud/openapi/models/v1_blog_post.py +435 -0
  243. lightning_sdk/lightning_cloud/openapi/models/v1_cancel_running_cloud_space_instance_transfer_response.py +97 -0
  244. lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +27 -1
  245. lightning_sdk/lightning_cloud/openapi/models/v1_check_cluster_name_availability_request.py +123 -0
  246. lightning_sdk/lightning_cloud/openapi/models/v1_check_cluster_name_availability_response.py +123 -0
  247. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +117 -0
  248. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +313 -1
  249. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_artifact_event.py +149 -0
  250. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_artifact_event_type.py +103 -0
  251. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_cold_start_metrics.py +669 -0
  252. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_cold_start_metrics_stats.py +357 -0
  253. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_config.py +149 -0
  254. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template.py +409 -0
  255. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +331 -0
  256. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_type.py +105 -0
  257. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_session.py +29 -3
  258. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_source_type.py +103 -0
  259. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +105 -0
  260. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_state.py +1 -0
  261. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_transfer_metadata.py +331 -0
  262. lightning_sdk/lightning_cloud/openapi/models/v1_cloudflare_v1.py +227 -0
  263. lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_expert.py +279 -0
  264. lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_settings.py +227 -0
  265. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
  266. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +211 -3
  267. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_deletion_options.py +27 -1
  268. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_metrics.py +1527 -0
  269. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +209 -1
  270. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +521 -1
  271. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +27 -1
  272. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +55 -3
  273. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +2 -0
  274. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_service_execution_artifact_response.py → v1_cluster_upload.py} +34 -34
  275. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_usage_restriction.py +227 -0
  276. lightning_sdk/lightning_cloud/openapi/models/v1_complete_lit_dataset_multi_part_upload_response.py +97 -0
  277. lightning_sdk/lightning_cloud/openapi/models/v1_complete_lit_dataset_upload_response.py +97 -0
  278. lightning_sdk/lightning_cloud/openapi/models/v1_complete_running_cloud_space_instance_transfer_response.py +97 -0
  279. lightning_sdk/lightning_cloud/openapi/models/{id_complete_body.py → v1_complete_upload_temporary_artifact_request.py} +29 -29
  280. lightning_sdk/lightning_cloud/openapi/models/v1_contact_assistant_owner_reason.py +102 -0
  281. lightning_sdk/lightning_cloud/openapi/models/v1_contact_assistant_owner_response.py +97 -0
  282. lightning_sdk/lightning_cloud/openapi/models/v1_container_metrics.py +461 -0
  283. lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +53 -1
  284. lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +107 -3
  285. lightning_sdk/lightning_cloud/openapi/models/v1_create_billing_upgrade_trigger_record_response.py +97 -0
  286. lightning_sdk/lightning_cloud/openapi/models/v1_create_blog_post_request.py +305 -0
  287. lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +27 -1
  288. lightning_sdk/lightning_cloud/openapi/models/v1_create_cloud_space_environment_template_request.py +409 -0
  289. lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_capacity_reservation_response.py +27 -1
  290. lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_request.py +539 -0
  291. lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +27 -1
  292. lightning_sdk/lightning_cloud/openapi/models/v1_create_git_credentials_request.py +175 -0
  293. lightning_sdk/lightning_cloud/openapi/models/v1_create_incident_request.py +305 -0
  294. lightning_sdk/lightning_cloud/openapi/models/v1_create_job_request.py +201 -0
  295. lightning_sdk/lightning_cloud/openapi/models/v1_create_license_request.py +175 -0
  296. lightning_sdk/lightning_cloud/openapi/models/v1_create_lit_dataset_multi_part_upload_response.py +123 -0
  297. lightning_sdk/lightning_cloud/openapi/models/v1_create_machine_response.py +123 -0
  298. lightning_sdk/lightning_cloud/openapi/models/v1_create_managed_endpoint_response.py +149 -0
  299. lightning_sdk/lightning_cloud/openapi/models/v1_create_model_metrics_response.py +97 -0
  300. lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_machine_job_request.py +253 -0
  301. lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +105 -1
  302. lightning_sdk/lightning_cloud/openapi/models/v1_create_pipeline_template_request.py +383 -0
  303. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +209 -1
  304. lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_request.py +253 -0
  305. lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_response.py +97 -0
  306. lightning_sdk/lightning_cloud/openapi/models/v1_create_server_alert_response.py +97 -0
  307. lightning_sdk/lightning_cloud/openapi/models/v1_create_subscription_checkout_session_request.py +55 -3
  308. lightning_sdk/lightning_cloud/openapi/models/v1_daily_model_metrics.py +149 -0
  309. lightning_sdk/lightning_cloud/openapi/models/v1_daily_usage.py +81 -3
  310. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +261 -1
  311. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection_tier.py +103 -0
  312. lightning_sdk/lightning_cloud/openapi/models/v1_delete_blog_post_response.py +123 -0
  313. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_environment_template_response.py +97 -0
  314. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_usage_restriction_response.py +97 -0
  315. lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_alerting_policy_response.py +175 -0
  316. lightning_sdk/lightning_cloud/openapi/models/v1_delete_git_credentials_response.py +97 -0
  317. lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_message_response.py +97 -0
  318. lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_response.py +97 -0
  319. lightning_sdk/lightning_cloud/openapi/models/v1_delete_kubernetes_template_response.py +97 -0
  320. lightning_sdk/lightning_cloud/openapi/models/v1_delete_license_response.py +97 -0
  321. lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_dataset_response.py +97 -0
  322. lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_dataset_version_response.py +97 -0
  323. lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_registry_repository_image_artifact_version_by_digest_response.py +97 -0
  324. lightning_sdk/lightning_cloud/openapi/models/v1_delete_machine_response.py +97 -0
  325. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_file_endpoint_response.py → v1_delete_pipeline_response.py} +25 -25
  326. lightning_sdk/lightning_cloud/openapi/models/v1_delete_schedule_response.py +175 -0
  327. lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +315 -3
  328. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_event.py +487 -0
  329. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy.py +409 -0
  330. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_frequency.py +105 -0
  331. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_operation.py +105 -0
  332. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_severity.py +106 -0
  333. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_type.py +112 -0
  334. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_recipients.py +175 -0
  335. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +79 -1
  336. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_details.py +175 -0
  337. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +4 -2
  338. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +47 -21
  339. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +53 -1
  340. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +27 -1
  341. lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster.py +253 -0
  342. lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +931 -0
  343. lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +53 -1
  344. lightning_sdk/lightning_cloud/openapi/models/v1_filestore_data_connection.py +253 -0
  345. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +53 -1
  346. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metric.py +201 -0
  347. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metrics.py +227 -0
  348. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_mmt.py +227 -0
  349. lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +29 -3
  350. lightning_sdk/lightning_cloud/openapi/models/{id_uploads_body1.py → v1_firewall_rule.py} +53 -53
  351. lightning_sdk/lightning_cloud/openapi/models/v1_function_call.py +149 -0
  352. lightning_sdk/lightning_cloud/openapi/models/v1_function_tool.py +175 -0
  353. lightning_sdk/lightning_cloud/openapi/models/{v1_list_file_endpoints_response.py → v1_gcp_data_connection_setup.py} +23 -23
  354. lightning_sdk/lightning_cloud/openapi/models/v1_gcp_direct_vpc.py +149 -0
  355. lightning_sdk/lightning_cloud/openapi/models/v1_ge_list_deployment_routing_telemetry_response.py +123 -0
  356. lightning_sdk/lightning_cloud/openapi/models/v1_get_artifacts_page_response.py +29 -3
  357. lightning_sdk/lightning_cloud/openapi/models/v1_get_assistant_session_daily_aggregated_response.py +201 -0
  358. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_cold_start_metrics_stats_response.py +123 -0
  359. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_instance_open_ports_response.py +123 -0
  360. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_instance_system_metrics_aggregate_response.py +123 -0
  361. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_required_balance_status_response.py +149 -0
  362. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_size_response.py +79 -1
  363. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_transfer_estimate_response.py +149 -0
  364. lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_accelerator_demand_response.py +123 -0
  365. lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_health_response.py +149 -0
  366. lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_content_response.py +123 -0
  367. lightning_sdk/lightning_cloud/openapi/models/v1_get_job_stats_response.py +105 -1
  368. lightning_sdk/lightning_cloud/openapi/models/v1_get_latest_model_metrics_response.py +123 -0
  369. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_service_execution_artifact_parts_response.py → v1_get_lit_dataset_file_upload_urls_response.py} +16 -16
  370. lightning_sdk/lightning_cloud/openapi/models/v1_get_lit_dataset_files_url_response.py +149 -0
  371. lightning_sdk/lightning_cloud/openapi/models/v1_get_machine_response.py +123 -0
  372. lightning_sdk/lightning_cloud/openapi/models/v1_get_market_pricing_response.py +201 -0
  373. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_metrics_response.py +123 -0
  374. lightning_sdk/lightning_cloud/openapi/models/v1_get_organization_storage_metadata_response.py +487 -0
  375. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +1 -27
  376. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +263 -3
  377. lightning_sdk/lightning_cloud/openapi/models/v1_get_temp_bucket_credentials_response.py +201 -0
  378. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +235 -1
  379. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +105 -1
  380. lightning_sdk/lightning_cloud/openapi/models/v1_get_volume_response.py +123 -0
  381. lightning_sdk/lightning_cloud/openapi/models/v1_git_credentials.py +227 -0
  382. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +185 -3
  383. lightning_sdk/lightning_cloud/openapi/models/v1_group_node_metrics.py +1215 -0
  384. lightning_sdk/lightning_cloud/openapi/models/v1_group_pod_metrics.py +1241 -0
  385. lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_request.py +177 -0
  386. lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_response.py +149 -0
  387. lightning_sdk/lightning_cloud/openapi/models/{v1_service_artifact.py → v1_guest_user.py} +60 -60
  388. lightning_sdk/lightning_cloud/openapi/models/v1_incident.py +565 -0
  389. lightning_sdk/lightning_cloud/openapi/models/v1_incident_detail.py +149 -0
  390. lightning_sdk/lightning_cloud/openapi/models/v1_incident_event.py +591 -0
  391. lightning_sdk/lightning_cloud/openapi/models/v1_incident_message.py +253 -0
  392. lightning_sdk/lightning_cloud/openapi/models/v1_incident_severity.py +105 -0
  393. lightning_sdk/lightning_cloud/openapi/models/v1_incident_type.py +108 -0
  394. lightning_sdk/lightning_cloud/openapi/models/v1_instance_overprovisioning_spec.py +95 -41
  395. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +237 -3
  396. lightning_sdk/lightning_cloud/openapi/models/v1_job_artifacts_type.py +103 -0
  397. lightning_sdk/lightning_cloud/openapi/models/v1_job_resource.py +279 -0
  398. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +209 -1
  399. lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +27 -1
  400. lightning_sdk/lightning_cloud/openapi/models/v1_job_type.py +109 -0
  401. lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_indexes.py +149 -0
  402. lightning_sdk/lightning_cloud/openapi/models/v1_kai_scheduler_queue_metrics.py +627 -0
  403. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_aws_config.py +279 -0
  404. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +253 -0
  405. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +357 -0
  406. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1_status.py +149 -0
  407. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template.py +357 -0
  408. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template_property.py +227 -0
  409. lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +67 -17
  410. lightning_sdk/lightning_cloud/openapi/models/v1_license.py +227 -0
  411. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_elastic_cluster_v1.py +97 -0
  412. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +53 -1
  413. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_artifact.py +27 -1
  414. lightning_sdk/lightning_cloud/openapi/models/v1_like_status.py +104 -0
  415. lightning_sdk/lightning_cloud/openapi/models/v1_list_aggregated_pod_metrics_response.py +123 -0
  416. lightning_sdk/lightning_cloud/openapi/models/{v1_download_service_execution_artifact_response.py → v1_list_blog_posts_response.py} +41 -41
  417. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_cold_start_metrics_response.py +123 -0
  418. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_environment_templates_response.py +123 -0
  419. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloudy_experts_response.py +123 -0
  420. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metric_timestamps_response.py +123 -0
  421. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metrics_response.py +123 -0
  422. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_metrics_response.py +123 -0
  423. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_user_metrics_response.py +123 -0
  424. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_usage_restrictions_response.py +123 -0
  425. lightning_sdk/lightning_cloud/openapi/models/v1_list_clusters_response.py +6 -6
  426. lightning_sdk/lightning_cloud/openapi/models/v1_list_container_metrics_response.py +123 -0
  427. lightning_sdk/lightning_cloud/openapi/models/v1_list_conversation_message_actions_response.py +123 -0
  428. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_alerting_events_response.py +123 -0
  429. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_alerting_policies_response.py +175 -0
  430. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_metrics_response.py +123 -0
  431. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_mm_ts_response.py +123 -0
  432. lightning_sdk/lightning_cloud/openapi/models/v1_list_git_credentials_response.py +123 -0
  433. lightning_sdk/lightning_cloud/openapi/models/v1_list_group_pod_metrics_response.py +123 -0
  434. lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_events_response.py +123 -0
  435. lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_messages_response.py +149 -0
  436. lightning_sdk/lightning_cloud/openapi/models/v1_list_incidents_response.py +149 -0
  437. lightning_sdk/lightning_cloud/openapi/models/v1_list_job_resources_response.py +123 -0
  438. lightning_sdk/lightning_cloud/openapi/models/v1_list_kai_scheduler_queues_metrics_response.py +123 -0
  439. lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_templates_response.py +123 -0
  440. lightning_sdk/lightning_cloud/openapi/models/v1_list_license_response.py +123 -0
  441. lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_dataset_versions_response.py +123 -0
  442. lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_datasets_response.py +123 -0
  443. lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_registry_repository_image_artifact_versions_response.py +257 -0
  444. lightning_sdk/lightning_cloud/openapi/models/v1_list_machines_response.py +149 -0
  445. lightning_sdk/lightning_cloud/openapi/models/v1_list_node_file_system_metrics_response.py +97 -0
  446. lightning_sdk/lightning_cloud/openapi/models/v1_list_node_metrics_response.py +123 -0
  447. lightning_sdk/lightning_cloud/openapi/models/v1_list_notification_dialogs_response.py +149 -0
  448. lightning_sdk/lightning_cloud/openapi/models/v1_list_pipelines_response.py +123 -0
  449. lightning_sdk/lightning_cloud/openapi/models/v1_list_platform_notifications_response.py +123 -0
  450. lightning_sdk/lightning_cloud/openapi/models/v1_list_pod_metrics_response.py +123 -0
  451. lightning_sdk/lightning_cloud/openapi/models/v1_list_project_clusters_response.py +6 -6
  452. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_managed_endpoints_response.py +123 -0
  453. lightning_sdk/lightning_cloud/openapi/models/v1_list_schedule_runs_response.py +123 -0
  454. lightning_sdk/lightning_cloud/openapi/models/v1_list_schedules_response.py +123 -0
  455. lightning_sdk/lightning_cloud/openapi/models/v1_list_slurm_cluster_users_response.py +123 -0
  456. lightning_sdk/lightning_cloud/openapi/models/v1_list_storage_transfers_response.py +123 -0
  457. lightning_sdk/lightning_cloud/openapi/models/v1_lit_dataset.py +539 -0
  458. lightning_sdk/lightning_cloud/openapi/models/{id_storage_body.py → v1_lit_dataset_file.py} +49 -49
  459. lightning_sdk/lightning_cloud/openapi/models/v1_lit_dataset_version_archive.py +435 -0
  460. lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_artifact.py +305 -0
  461. lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +35 -1
  462. lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +81 -1
  463. lightning_sdk/lightning_cloud/openapi/models/v1_lite_published_cloud_space_response.py +513 -0
  464. lightning_sdk/lightning_cloud/openapi/models/v1_lustre_data_connection.py +149 -0
  465. lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +617 -0
  466. lightning_sdk/lightning_cloud/openapi/models/v1_machine_direct_v1.py +123 -0
  467. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
  468. lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +27 -1
  469. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +341 -3
  470. lightning_sdk/lightning_cloud/openapi/models/v1_market_price.py +149 -0
  471. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +121 -17
  472. lightning_sdk/lightning_cloud/openapi/models/v1_message.py +159 -3
  473. lightning_sdk/lightning_cloud/openapi/models/v1_message_action.py +279 -0
  474. lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +27 -1
  475. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +79 -1
  476. lightning_sdk/lightning_cloud/openapi/models/v1_model.py +27 -1
  477. lightning_sdk/lightning_cloud/openapi/models/v1_model_metrics.py +175 -0
  478. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_service_execution_response.py → v1_modify_filesystem_volume_response.py} +6 -6
  479. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +27 -1
  480. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +2 -0
  481. lightning_sdk/lightning_cloud/openapi/models/v1_namespace_metrics.py +591 -0
  482. lightning_sdk/lightning_cloud/openapi/models/v1_namespace_user_metrics.py +435 -0
  483. lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py +175 -0
  484. lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +695 -0
  485. lightning_sdk/lightning_cloud/openapi/models/v1_notification_type.py +2 -0
  486. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +837 -3
  487. lightning_sdk/lightning_cloud/openapi/models/v1_path_mapping.py +175 -0
  488. lightning_sdk/lightning_cloud/openapi/models/v1_pause_storage_transfer_response.py +97 -0
  489. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline.py +591 -0
  490. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter.py +435 -0
  491. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_placement.py +149 -0
  492. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_placement_type.py +106 -0
  493. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_type.py +106 -0
  494. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_state.py +111 -0
  495. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step.py +253 -0
  496. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step_status.py +331 -0
  497. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step_type.py +104 -0
  498. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template.py +513 -0
  499. lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template_visibility_type.py +105 -0
  500. lightning_sdk/lightning_cloud/openapi/models/v1_platform_notification.py +279 -0
  501. lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +747 -0
  502. lightning_sdk/lightning_cloud/openapi/models/v1_post_cloud_space_artifact_events_response.py +97 -0
  503. lightning_sdk/lightning_cloud/openapi/models/v1_project.py +105 -1
  504. lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +53 -1
  505. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +121 -17
  506. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +525 -3
  507. lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +235 -1
  508. lightning_sdk/lightning_cloud/openapi/models/v1_project_tab.py +149 -0
  509. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_request.py +123 -0
  510. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_response.py +123 -0
  511. lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +227 -0
  512. lightning_sdk/lightning_cloud/openapi/models/v1_quote_subscription_response.py +27 -1
  513. lightning_sdk/lightning_cloud/openapi/models/v1_r2_data_connection.py +305 -0
  514. lightning_sdk/lightning_cloud/openapi/models/v1_render_kubernetes_template_response.py +123 -0
  515. lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_stop_at_response.py +97 -0
  516. lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_system_metrics_response.py +97 -0
  517. lightning_sdk/lightning_cloud/openapi/models/v1_report_deployment_routing_telemetry_response.py +97 -0
  518. lightning_sdk/lightning_cloud/openapi/models/v1_report_k8s_cluster_metrics_response.py +97 -0
  519. lightning_sdk/lightning_cloud/openapi/models/v1_report_restart_timings_response.py +97 -0
  520. lightning_sdk/lightning_cloud/openapi/models/v1_request_cloud_space_access_response.py +97 -0
  521. lightning_sdk/lightning_cloud/openapi/models/v1_required_balance_reason.py +107 -0
  522. lightning_sdk/lightning_cloud/openapi/models/v1_reservation_details.py +201 -0
  523. lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_request.py +97 -0
  524. lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_response.py +123 -0
  525. lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +27 -1
  526. lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +55 -3
  527. lightning_sdk/lightning_cloud/openapi/models/v1_response_choice.py +29 -3
  528. lightning_sdk/lightning_cloud/openapi/models/v1_restart_timing.py +201 -0
  529. lightning_sdk/lightning_cloud/openapi/models/v1_resume_storage_transfer_response.py +97 -0
  530. lightning_sdk/lightning_cloud/openapi/models/v1_routing_telemetry.py +357 -0
  531. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +5 -0
  532. lightning_sdk/lightning_cloud/openapi/models/v1_schedule.py +565 -0
  533. lightning_sdk/lightning_cloud/openapi/models/{command_argument_command_argument_type.py → v1_schedule_action_type.py} +9 -8
  534. lightning_sdk/lightning_cloud/openapi/models/v1_schedule_resource_type.py +104 -0
  535. lightning_sdk/lightning_cloud/openapi/models/v1_schedule_run.py +357 -0
  536. lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_severity.py +104 -0
  537. lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_type.py +104 -0
  538. lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +2 -0
  539. lightning_sdk/lightning_cloud/openapi/models/{v1_get_service_execution_status_response.py → v1_server_alert.py} +74 -48
  540. lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_phase.py +105 -0
  541. lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_severity.py +103 -0
  542. lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_type.py +108 -0
  543. lightning_sdk/lightning_cloud/openapi/models/v1_service_health.py +27 -1
  544. lightning_sdk/lightning_cloud/openapi/models/v1_setup_data_connection_response.py +123 -0
  545. lightning_sdk/lightning_cloud/openapi/models/v1_shared_filesystem.py +331 -0
  546. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +201 -0
  547. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier_type.py +105 -0
  548. lightning_sdk/lightning_cloud/openapi/models/v1_sleep_server_response.py +97 -0
  549. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_cluster_user.py +227 -0
  550. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +84 -6
  551. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +31 -291
  552. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +79 -1
  553. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1_status.py +79 -1
  554. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +159 -3
  555. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +4 -0
  556. lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer.py +435 -0
  557. lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer_status.py +108 -0
  558. lightning_sdk/lightning_cloud/openapi/models/v1_subnet_spec.py +149 -0
  559. lightning_sdk/lightning_cloud/openapi/models/v1_system_metrics_aggregated.py +227 -0
  560. lightning_sdk/lightning_cloud/openapi/models/v1_token_login_request.py +123 -0
  561. lightning_sdk/lightning_cloud/openapi/models/v1_token_login_response.py +123 -0
  562. lightning_sdk/lightning_cloud/openapi/models/v1_token_owner_type.py +104 -0
  563. lightning_sdk/lightning_cloud/openapi/models/v1_token_usage.py +175 -0
  564. lightning_sdk/lightning_cloud/openapi/models/v1_tool.py +149 -0
  565. lightning_sdk/lightning_cloud/openapi/models/v1_tool_call.py +175 -0
  566. lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
  567. lightning_sdk/lightning_cloud/openapi/models/v1_transfer_cloud_space_response.py +97 -0
  568. lightning_sdk/lightning_cloud/openapi/models/v1_trigger_filesystem_upgrade_response.py +123 -0
  569. lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_instance_config_request.py +253 -0
  570. lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_visibility_response.py +97 -0
  571. lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_like_response.py +149 -0
  572. lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_message_like_response.py +149 -0
  573. lightning_sdk/lightning_cloud/openapi/models/v1_update_deployment_visibility_response.py +97 -0
  574. lightning_sdk/lightning_cloud/openapi/models/v1_update_job_visibility_response.py +97 -0
  575. lightning_sdk/lightning_cloud/openapi/models/v1_update_lit_dataset_visibility_response.py +123 -0
  576. lightning_sdk/lightning_cloud/openapi/models/v1_update_lit_repository_response.py +97 -0
  577. lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +27 -1
  578. lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +27 -1
  579. lightning_sdk/lightning_cloud/openapi/models/{v1_complete_upload_service_execution_artifact_response.py → v1_update_organization_credits_auto_replenish_response.py} +6 -6
  580. lightning_sdk/lightning_cloud/openapi/models/v1_update_project_tab_order_response.py +123 -0
  581. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_credits_auto_replenish_response.py +97 -0
  582. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +131 -1
  583. lightning_sdk/lightning_cloud/openapi/models/v1_update_volume_response.py +123 -0
  584. lightning_sdk/lightning_cloud/openapi/models/v1_upload_project_artifact_response.py +27 -1
  585. lightning_sdk/lightning_cloud/openapi/models/{v1_list_new_features_for_user_response.py → v1_upload_temporary_artifact_request.py} +23 -23
  586. lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +105 -1
  587. lightning_sdk/lightning_cloud/openapi/models/v1_usage_report.py +79 -1
  588. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +894 -842
  589. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +27 -1
  590. lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +27 -1
  591. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +27 -1
  592. lightning_sdk/lightning_cloud/openapi/models/v1_validate_license_response.py +123 -0
  593. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +27 -1
  594. lightning_sdk/lightning_cloud/openapi/models/v1_validate_storage_transfer_response.py +123 -0
  595. lightning_sdk/lightning_cloud/openapi/models/v1_voltage_park_direct_v1.py +229 -0
  596. lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +513 -45
  597. lightning_sdk/lightning_cloud/openapi/models/v1_volume_state.py +105 -0
  598. lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +1 -27
  599. lightning_sdk/lightning_cloud/openapi/models/v1_weka_data_connection.py +201 -0
  600. lightning_sdk/lightning_cloud/openapi/models/validate.py +53 -1
  601. lightning_sdk/lightning_cloud/openapi/models/version_default_body.py +29 -29
  602. lightning_sdk/lightning_cloud/openapi/models/version_default_body1.py +149 -0
  603. lightning_sdk/lightning_cloud/openapi/models/version_uploads_body1.py +123 -0
  604. lightning_sdk/lightning_cloud/openapi/models/versions_version_body1.py +123 -0
  605. lightning_sdk/lightning_cloud/openapi/models/volumes_id_body.py +123 -0
  606. lightning_sdk/lightning_cloud/rest_client.py +61 -48
  607. lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +8 -3
  608. lightning_sdk/lightning_cloud/utils/data_connection.py +234 -7
  609. lightning_sdk/lit_container.py +68 -9
  610. lightning_sdk/llm/__init__.py +3 -0
  611. lightning_sdk/llm/llm.py +497 -0
  612. lightning_sdk/llm/public_assistants.py +54 -0
  613. lightning_sdk/machine.py +221 -30
  614. lightning_sdk/mmt/base.py +67 -32
  615. lightning_sdk/mmt/mmt.py +68 -50
  616. lightning_sdk/mmt/v1.py +16 -32
  617. lightning_sdk/mmt/v2.py +47 -18
  618. lightning_sdk/models.py +74 -24
  619. lightning_sdk/organization.py +4 -0
  620. lightning_sdk/owner.py +2 -1
  621. lightning_sdk/pipeline/__init__.py +14 -0
  622. lightning_sdk/pipeline/pipeline.py +163 -0
  623. lightning_sdk/pipeline/printer.py +124 -0
  624. lightning_sdk/pipeline/schedule.py +859 -0
  625. lightning_sdk/pipeline/steps.py +365 -0
  626. lightning_sdk/pipeline/utils.py +116 -0
  627. lightning_sdk/plugin.py +39 -20
  628. lightning_sdk/sandbox.py +160 -0
  629. lightning_sdk/serve.py +309 -0
  630. lightning_sdk/services/__init__.py +1 -1
  631. lightning_sdk/services/file_endpoint.py +3 -4
  632. lightning_sdk/services/utilities.py +16 -2
  633. lightning_sdk/studio.py +515 -41
  634. lightning_sdk/teamspace.py +335 -30
  635. lightning_sdk/user.py +19 -1
  636. lightning_sdk/utils/config.py +179 -0
  637. lightning_sdk/utils/license.py +13 -0
  638. lightning_sdk/utils/logging.py +79 -0
  639. lightning_sdk/utils/names.py +1179 -0
  640. lightning_sdk/utils/progress.py +283 -0
  641. lightning_sdk/utils/resolve.py +149 -13
  642. {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/METADATA +14 -11
  643. {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/RECORD +649 -250
  644. {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/WHEEL +1 -1
  645. {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/entry_points.txt +1 -0
  646. lightning_sdk/cli/ai_hub.py +0 -49
  647. lightning_sdk/cli/delete.py +0 -58
  648. lightning_sdk/cli/download.py +0 -132
  649. lightning_sdk/cli/inspect.py +0 -31
  650. lightning_sdk/cli/legacy.py +0 -135
  651. lightning_sdk/cli/list.py +0 -112
  652. lightning_sdk/cli/run.py +0 -225
  653. lightning_sdk/cli/serve.py +0 -218
  654. lightning_sdk/cli/stop.py +0 -37
  655. lightning_sdk/cli/upload.py +0 -255
  656. lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +0 -409
  657. lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +0 -357
  658. lightning_sdk/lightning_cloud/openapi/models/project_id_serviceexecution_body.py +0 -175
  659. lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +0 -331
  660. lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +0 -305
  661. lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +0 -279
  662. lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +0 -461
  663. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +0 -201
  664. lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +0 -175
  665. lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +0 -383
  666. /lightning_sdk/cli/{exceptions.py → legacy/exceptions.py} +0 -0
  667. /lightning_sdk/services/{finetune/__init__.py → finetune_llm.py} +0 -0
  668. {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/LICENSE +0 -0
  669. {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/top_level.txt +0 -0
lightning_sdk/studio.py CHANGED
@@ -1,25 +1,41 @@
1
+ import glob
1
2
  import os
3
+ import threading
2
4
  import warnings
3
- from typing import TYPE_CHECKING, Any, Mapping, Optional, Tuple, Union
5
+ from typing import TYPE_CHECKING, Any, Dict, Mapping, Optional, Tuple, Union
4
6
 
7
+ from tqdm.auto import tqdm
8
+
9
+ from lightning_sdk.api.cloud_account_api import CloudAccountApi
5
10
  from lightning_sdk.api.studio_api import StudioApi
6
- from lightning_sdk.api.utils import _machine_to_compute_name
11
+ from lightning_sdk.base_studio import BaseStudio
7
12
  from lightning_sdk.constants import _LIGHTNING_DEBUG
8
- from lightning_sdk.machine import Machine
13
+ from lightning_sdk.lightning_cloud.openapi import V1ClusterType
14
+ from lightning_sdk.machine import DEFAULT_MACHINE, CloudProvider, Machine
9
15
  from lightning_sdk.organization import Organization
10
16
  from lightning_sdk.owner import Owner
11
17
  from lightning_sdk.status import Status
12
18
  from lightning_sdk.teamspace import Teamspace
13
19
  from lightning_sdk.user import User
14
- from lightning_sdk.utils.resolve import _resolve_deprecated_cluster, _resolve_teamspace, _setup_logger
20
+ from lightning_sdk.utils.logging import TrackCallsMeta
21
+ from lightning_sdk.utils.names import random_unique_name
22
+ from lightning_sdk.utils.resolve import (
23
+ _get_org_id,
24
+ _resolve_deprecated_cluster,
25
+ _resolve_deprecated_provider,
26
+ _resolve_teamspace,
27
+ _setup_logger,
28
+ )
15
29
 
16
30
  if TYPE_CHECKING:
31
+ from lightning_sdk.job import Job
32
+ from lightning_sdk.mmt import MMT
17
33
  from lightning_sdk.plugin import Plugin
18
34
 
19
35
  _logger = _setup_logger(__name__)
20
36
 
21
37
 
22
- class Studio:
38
+ class Studio(metaclass=TrackCallsMeta):
23
39
  """A single Lightning AI Studio.
24
40
 
25
41
  Allows to fully control a studio, including retrieving the status, running commands
@@ -32,7 +48,14 @@ class Studio:
32
48
  user: the name of the user owning the :param`teamspace` in case it is owned directly by a user instead of an org
33
49
  cloud_account: the name of the cloud account, the studio should be created on.
34
50
  Doesn't matter when the studio already exists.
51
+ cloud_account_provider: The provider to select the cloud-account from.
52
+ If set, must be in agreement with the provider from the cloud_account (if specified).
53
+ If not specified, falls back to the teamspace default cloud account.
35
54
  create_ok: whether the studio will be created if it does not yet exist. Defaults to True
55
+ provider: the provider of the machine, the studio should be created on.
56
+ studio_type: Type of studio to create. Only effective during initial creation;
57
+ ignored for existing studios.
58
+
36
59
  Note:
37
60
  Since a teamspace can either be owned by an org or by a user directly,
38
61
  only one of the arguments can be provided.
@@ -40,7 +63,11 @@ class Studio:
40
63
  """
41
64
 
42
65
  # skips init of studio, only set when using this as a shell for names, ids etc.
43
- _skip_init = False
66
+ _skip_init = threading.local()
67
+ _skip_setup = threading.local()
68
+
69
+ # whether to show progress bars during operations
70
+ show_progress = False
44
71
 
45
72
  def __init__(
46
73
  self,
@@ -49,35 +76,123 @@ class Studio:
49
76
  org: Optional[Union[str, Organization]] = None,
50
77
  user: Optional[Union[str, User]] = None,
51
78
  cloud_account: Optional[str] = None,
79
+ cloud_provider: Optional[Union[CloudProvider, str]] = None,
52
80
  create_ok: bool = True,
53
81
  cluster: Optional[str] = None, # deprecated in favor of cloud_account
82
+ source: Optional[str] = None,
83
+ disable_secrets: bool = False,
84
+ provider: Optional[Union[CloudProvider, str]] = None, # deprecated in favor of cloud_provider
85
+ studio_type: Optional[str] = None, # for base studio templates
54
86
  ) -> None:
55
87
  self._studio_api = StudioApi()
88
+ self._cloud_account_api = CloudAccountApi()
89
+
90
+ self._prevent_refetch = False
91
+ self._teamspace = None
56
92
 
57
- self._teamspace = _resolve_teamspace(teamspace=teamspace, org=org, user=user)
58
- self._cloud_account = _resolve_deprecated_cluster(cloud_account, cluster)
59
- self._setup_done = False
93
+ # don't resolve anything if we're skipping init
94
+ if not getattr(self._skip_init, "value", False):
95
+ _teamspace = _resolve_teamspace(teamspace=teamspace, org=org, user=user)
96
+ if _teamspace is None:
97
+ raise ValueError("Couldn't resolve teamspace from the provided name, org, or user")
98
+
99
+ self._teamspace = _teamspace
100
+
101
+ self._setup_done = getattr(self._skip_setup, "value", False)
102
+ self._disable_secrets = disable_secrets
60
103
 
61
104
  self._plugins = {}
105
+ self._studio = None
106
+
107
+ # Check to see if we're inside a studio
108
+ current_studio = None
109
+ studio_id = os.environ.get("LIGHTNING_CLOUD_SPACE_ID", None)
110
+ if studio_id is not None and self._teamspace is not None:
111
+ # We're inside a studio, get it by ID
112
+ current_studio = self._studio_api.get_studio_by_id(studio_id=studio_id, teamspace_id=self._teamspace.id)
113
+
114
+ if cloud_account or not cloud_provider:
115
+ cloud_account = _resolve_deprecated_cluster(
116
+ cloud_account, cluster, current_studio.cluster_id if current_studio else None
117
+ )
118
+ cloud_provider = _resolve_deprecated_provider(cloud_provider, provider)
119
+ else:
120
+ cloud_provider = _resolve_deprecated_provider(cloud_provider, provider)
62
121
 
63
- if name is None:
64
- studio_id = os.environ.get("LIGHTNING_CLOUD_SPACE_ID", None)
65
- if studio_id is None:
66
- raise ValueError("Cannot autodetect Studio. Either use the SDK from within a Studio or pass a name!")
67
- self._studio = self._studio_api.get_studio_by_id(studio_id=studio_id, teamspace_id=self._teamspace.id)
122
+ cls_name = self._cls_name
123
+
124
+ # if we're skipping init, we don't need to resolve the cloud account as then we're not creating a studio
125
+ if self._teamspace is not None:
126
+ _cloud_account = self._cloud_account_api.resolve_cloud_account(
127
+ self._teamspace.id,
128
+ cloud_account=cloud_account,
129
+ cloud_provider=cloud_provider,
130
+ default_cloud_account=self._teamspace.default_cloud_account,
131
+ )
132
+
133
+ self._studio_type = None
134
+ if studio_type:
135
+ self._base_studio = BaseStudio(teamspace=self._teamspace)
136
+ self._available_base_studios = self._base_studio.list()
137
+ for bst in self._available_base_studios:
138
+ if (
139
+ bst.id == studio_type
140
+ or bst.name == studio_type
141
+ or bst.name.lower().replace(" ", "-") == studio_type
142
+ ):
143
+ self._studio_type = bst.id
144
+
145
+ if not self._studio_type:
146
+ raise ValueError(
147
+ f"Could not find studio type with ID or name '{studio_type}'. "
148
+ f"Available studio types: "
149
+ f"{[bst.name.lower().replace(' ', '-') for bst in self._available_base_studios]}"
150
+ )
68
151
  else:
152
+ if current_studio:
153
+ self._studio_type = current_studio.environment_template_id
154
+
155
+ # Resolve studio name if not provided: explicit → env (LIGHTNING_CLOUD_SPACE_ID) → config defaults
156
+ if name is None and not getattr(self._skip_init, "value", False):
157
+ if current_studio:
158
+ name = current_studio.name
159
+ else:
160
+ # Try config defaults
161
+ from lightning_sdk.utils.config import Config, DefaultConfigKeys
162
+
163
+ config = Config()
164
+ name = config.get_value(DefaultConfigKeys.studio)
165
+ if name is None and not create_ok:
166
+ raise ValueError(
167
+ f"Cannot autodetect {cls_name}. Either use the SDK from within a {cls_name} or pass a name!"
168
+ )
169
+
170
+ if self._studio is None and not getattr(self._skip_init, "value", False):
171
+ # If we have a name (explicit or from config), get studio by name
69
172
  try:
173
+ if name is None:
174
+ # if we don't have a name, raise an error to get
175
+ # to the exception path and optionally create a studio
176
+ raise ValueError(
177
+ f"Cannot autodetect {cls_name}. Either use the SDK from within a {cls_name} or pass a name!"
178
+ )
70
179
  self._studio = self._studio_api.get_studio(name, self._teamspace.id)
71
180
  except ValueError as e:
72
181
  if create_ok:
182
+ name = name or random_unique_name()
73
183
  self._studio = self._studio_api.create_studio(
74
- name, self._teamspace.id, cloud_account=self._cloud_account
184
+ name,
185
+ self._teamspace.id,
186
+ cloud_account=_cloud_account,
187
+ source=source,
188
+ disable_secrets=self._disable_secrets,
189
+ cloud_space_environment_template_id=self._studio_type,
75
190
  )
76
191
  else:
77
- raise ValueError(f"Studio {name} does not exist.") from e
192
+ raise e
78
193
 
79
194
  if (
80
- not self._skip_init
195
+ not getattr(self._skip_init, "value", False)
81
196
  and _internal_status_to_external_status(
82
197
  self._studio_api._get_studio_instance_status_from_object(self._studio)
83
198
  )
@@ -133,7 +248,20 @@ class Studio:
133
248
  """Returns the current machine type the Studio is running on."""
134
249
  if self.status != Status.Running:
135
250
  return None
136
- return self._studio_api.get_machine(self._studio.id, self._teamspace.id)
251
+ return self._studio_api.get_machine(
252
+ self._studio.id,
253
+ self._teamspace.id,
254
+ self.cloud_account,
255
+ _get_org_id(self._teamspace),
256
+ )
257
+
258
+ @property
259
+ def public_ip(self) -> Optional[str]:
260
+ """Returns the public IP address of the machine the Studio is running on."""
261
+ return self._studio_api.get_public_ip(
262
+ self._studio.id,
263
+ self._teamspace.id,
264
+ )
137
265
 
138
266
  @property
139
267
  def interruptible(self) -> bool:
@@ -146,29 +274,104 @@ class Studio:
146
274
  @property
147
275
  def cluster(self) -> str:
148
276
  """Returns the cluster the Studio is running on."""
149
- warnings.warn("Studio.cluster is deprecated. Use Studio.cloud_account instead", DeprecationWarning)
277
+ warnings.warn(
278
+ f"{self._cls_name}.cluster is deprecated. Use {self._cls_name}.cloud_account instead", DeprecationWarning
279
+ )
150
280
  return self.cloud_account
151
281
 
152
282
  @property
153
283
  def cloud_account(self) -> str:
154
284
  return self._studio.cluster_id
155
285
 
156
- def start(self, machine: Union[Machine, str] = Machine.CPU, interruptible: bool = False) -> None:
157
- """Starts a Studio on the specified machine type (default: CPU-4)."""
286
+ def start(
287
+ self,
288
+ machine: Optional[Union[Machine, str]] = None,
289
+ interruptible: Optional[bool] = None,
290
+ max_runtime: Optional[int] = None,
291
+ ) -> None:
292
+ """Starts a Studio on the specified machine type (default: CPU-4).
293
+
294
+ Args:
295
+ machine: the machine type to start the studio on. Defaults to CPU-4
296
+ interruptible: whether to use interruptible machines
297
+ max_runtime: the duration (in seconds) for which to allocate the machine.
298
+ Irrelevant for most machines, required for some of the top-end machines on GCP.
299
+ If in doubt, set it. Won't have an effect on machines not requiring it.
300
+ Defaults to 3h
301
+
302
+ """
303
+ # Check to see if we're inside a studio and if its running
304
+ current_studio_machine = None
305
+ studio_id = os.environ.get("LIGHTNING_CLOUD_SPACE_ID", None)
306
+ if studio_id is not None:
307
+ # We're inside a studio, get the machine if it is running
308
+ current_studio = self._studio_api.get_studio_by_id(studio_id=studio_id, teamspace_id=self._teamspace.id)
309
+ current_status = self._studio_api._get_studio_instance_status_from_object(current_studio)
310
+
311
+ if current_status and _internal_status_to_external_status(current_status) == Status.Running:
312
+ current_studio_machine = self._studio_api.get_machine(
313
+ current_studio.id,
314
+ self._teamspace.id,
315
+ current_studio.cluster_id,
316
+ _get_org_id(self._teamspace),
317
+ )
318
+
158
319
  status = self.status
320
+
321
+ if interruptible is None:
322
+ interruptible_override = os.environ.get("LIGHTNING_INTERRUPTIBLE_OVERRIDE", None)
323
+ if interruptible_override is not None:
324
+ interruptible = interruptible_override.lower() == "true"
325
+ else:
326
+ interruptible = self.teamspace.start_studios_on_interruptible
327
+
328
+ new_machine = DEFAULT_MACHINE
329
+ if machine is not None:
330
+ new_machine = machine
331
+ elif current_studio_machine is not None:
332
+ new_machine = current_studio_machine
333
+
334
+ if not isinstance(new_machine, Machine):
335
+ new_machine = Machine.from_str(new_machine)
336
+
159
337
  if status == Status.Running:
160
- curr_machine = _machine_to_compute_name(self.machine) if self.machine is not None else None
161
- if curr_machine != _machine_to_compute_name(machine):
338
+ if new_machine != self.machine:
162
339
  raise RuntimeError(
163
- f"Requested to start studio on {machine}, but studio is already running on {self.machine}."
340
+ f"Requested to start {self._cls_name} on {new_machine}, "
341
+ "but {self._cls_name} is already running on {self.machine}."
164
342
  " Consider switching instead!"
165
343
  )
166
- _logger.info(f"Studio {self.name} is already running")
344
+ _logger.info(f"{self._cls_name} {self.name} is already running")
167
345
  return
168
346
 
169
347
  if status != Status.Stopped:
170
- raise RuntimeError(f"Cannot start a studio that is not stopped. Studio {self.name} is {status}.")
171
- self._studio_api.start_studio(self._studio.id, self._teamspace.id, machine, interruptible=interruptible)
348
+ raise RuntimeError(
349
+ f"Cannot start a {self._cls_name} that is not stopped. {self._cls_name} {self.name} is {status}."
350
+ )
351
+
352
+ # Show progress bar during startup
353
+ if self.show_progress:
354
+ from lightning_sdk.utils.progress import StudioProgressTracker
355
+
356
+ with StudioProgressTracker("start", show_progress=True) as progress:
357
+ # Start the studio without blocking
358
+ self._studio_api.start_studio_async(
359
+ self._studio.id,
360
+ self._teamspace.id,
361
+ new_machine,
362
+ interruptible=interruptible,
363
+ max_runtime=max_runtime,
364
+ )
365
+
366
+ # Track progress through completion
367
+ progress.track_startup_phases(
368
+ lambda: self._studio_api.get_studio_status(self._studio.id, self._teamspace.id)
369
+ )
370
+ else:
371
+ # Use the blocking version if no progress is needed
372
+ self._studio_api.start_studio(
373
+ self._studio.id, self._teamspace.id, new_machine, interruptible=interruptible, max_runtime=max_runtime
374
+ )
172
375
 
173
376
  self._setup()
174
377
 
@@ -183,17 +386,56 @@ class Studio:
183
386
  """Deletes the current Studio."""
184
387
  self._studio_api.delete_studio(self._studio.id, self._teamspace.id)
185
388
 
186
- def duplicate(self) -> "Studio":
187
- """Duplicates the existing Studio to the same teamspace."""
188
- kwargs = self._studio_api.duplicate_studio(self._studio.id, self._teamspace.id, self._teamspace.id)
389
+ def duplicate(
390
+ self,
391
+ target_teamspace: Optional[Union["Teamspace", str]] = None,
392
+ machine: Machine = Machine.CPU,
393
+ name: Optional[str] = None,
394
+ ) -> "Studio":
395
+ """Duplicates the existing Studio.
396
+
397
+ Args:
398
+ target_teamspace: the teamspace to duplicate the studio to.
399
+ Must have the same owner as the source teamspace.
400
+ If not provided, defaults to current teamspace.
401
+ machine: the machine to start the duplicated studio on.
402
+ Defaults to CPU
403
+ """
404
+ if target_teamspace is None:
405
+ target_teamspace_id = self._teamspace.id
406
+ else:
407
+ target_teamspace = _resolve_teamspace(
408
+ target_teamspace,
409
+ org=self._teamspace.owner if isinstance(self._teamspace.owner, Organization) else None,
410
+ user=self._teamspace.owner if isinstance(self._teamspace.owner, User) else None,
411
+ )
412
+
413
+ if target_teamspace is None:
414
+ raise ValueError(
415
+ f"Could not resolve target teamspace {target_teamspace} "
416
+ f"with owner {self.teamspace.owner} for duplication!"
417
+ )
418
+
419
+ target_teamspace_id = target_teamspace.id
420
+
421
+ kwargs = self._studio_api.duplicate_studio(
422
+ studio_id=self._studio.id,
423
+ teamspace_id=self._teamspace.id,
424
+ target_teamspace_id=target_teamspace_id,
425
+ machine=machine,
426
+ new_name=name,
427
+ )
189
428
  return Studio(**kwargs)
190
429
 
191
- def switch_machine(self, machine: Union[Machine, str], interruptible: bool = False) -> None:
430
+ def switch_machine(
431
+ self, machine: Union[Machine, str], interruptible: bool = False, cloud_provider: Optional[CloudProvider] = None
432
+ ) -> None:
192
433
  """Switches machine to the provided machine type/.
193
434
 
194
435
  Args:
195
436
  machine: the new machine type to switch to
196
437
  interruptible: determines whether to switch to an interruptible instance
438
+ cloud_provider: the cloud provider to switch to, has no effect if the Studio is not on Lightning Cloud
197
439
 
198
440
  Note:
199
441
  this call is blocking until the new machine is provisioned
@@ -202,12 +444,82 @@ class Studio:
202
444
  status = self.status
203
445
  if status != Status.Running:
204
446
  raise RuntimeError(
205
- f"Cannot switch machine on a studio that is not running. Studio {self.name} is {status}."
447
+ f"Cannot switch machine on a {self._cls_name} that is not running. "
448
+ "{self._cls_name} {self.name} is {status}."
206
449
  )
207
- self._studio_api.switch_studio_machine(
208
- self._studio.id, self._teamspace.id, machine, interruptible=interruptible
450
+
451
+ current_cloud = self._cloud_account_api.get_cloud_account_non_org(
452
+ self._teamspace.id,
453
+ self._studio.cluster_id,
209
454
  )
210
455
 
456
+ cloud_account = ""
457
+ if cloud_provider is not None and current_cloud.spec.cluster_type == V1ClusterType.GLOBAL:
458
+ cloud_account = self._cloud_account_api.resolve_cloud_account(
459
+ self._teamspace.id,
460
+ cloud_account=None,
461
+ cloud_provider=cloud_provider,
462
+ default_cloud_account=None,
463
+ )
464
+
465
+ if self.show_progress:
466
+ from lightning_sdk.utils.progress import StudioProgressTracker
467
+
468
+ with StudioProgressTracker("switch", show_progress=True) as progress:
469
+ # Update progress before starting the switch
470
+ progress.update_progress(5, "Initiating machine switch...")
471
+
472
+ # Start the switch operation with progress tracking
473
+ self._studio_api.switch_studio_machine_with_progress(
474
+ self._studio.id,
475
+ self._teamspace.id,
476
+ machine,
477
+ interruptible=interruptible,
478
+ progress=progress,
479
+ cloud_account=cloud_account,
480
+ )
481
+ else:
482
+ self._studio_api.switch_studio_machine(
483
+ self._studio.id, self._teamspace.id, machine, interruptible=interruptible, cloud_account=cloud_account
484
+ )
485
+
486
+ if self._studio and cloud_account:
487
+ # TODO: get this from the API
488
+ self._studio.cluster_id = cloud_account
489
+
490
+ def run_and_detach(self, *commands: str, timeout: float = 10, check_interval: float = 1) -> str:
491
+ """Runs given commands on the Studio and returns immediately.
492
+
493
+ The command will continue to run in the background.
494
+
495
+ Args:
496
+ timeout: wait for this many seconds for the command to finish.
497
+ check_interval: check the status of the command every this many seconds.
498
+ """
499
+ if check_interval > timeout:
500
+ raise ValueError("check_interval must be less than timeout")
501
+
502
+ if _LIGHTNING_DEBUG:
503
+ print(f"Running {commands=}")
504
+ status = self.status
505
+ if status != Status.Running:
506
+ raise RuntimeError(
507
+ f"Cannot run a command in a {self._cls_name} that is not running. "
508
+ "{self._cls_name} {self.name} is {status}."
509
+ )
510
+
511
+ iter_output = self._studio_api.run_studio_commands_and_yield(
512
+ self._studio.id, self._teamspace.id, *commands, timeout=timeout, check_interval=check_interval
513
+ )
514
+
515
+ output = ""
516
+ code = None
517
+ for line, exit_code in iter_output:
518
+ print(line)
519
+ output += line
520
+ code = exit_code
521
+ return output, code
522
+
211
523
  def run_with_exit_code(self, *commands: str) -> Tuple[str, int]:
212
524
  """Runs given commands on the Studio while returning output and exit code.
213
525
 
@@ -220,7 +532,10 @@ class Studio:
220
532
 
221
533
  status = self.status
222
534
  if status != Status.Running:
223
- raise RuntimeError(f"Cannot run a command in a studio that is not running. Studio {self.name} is {status}.")
535
+ raise RuntimeError(
536
+ f"Cannot run a command in a {self._cls_name} that is not running. "
537
+ "{self._cls_name} {self.name} is {status}."
538
+ )
224
539
  output, exit_code = self._studio_api.run_studio_commands(self._studio.id, self._teamspace.id, *commands)
225
540
  output = output.strip()
226
541
 
@@ -255,6 +570,34 @@ class Studio:
255
570
  progress_bar=progress_bar,
256
571
  )
257
572
 
573
+ def upload_folder(self, folder_path: str, remote_path: Optional[str] = None, progress_bar: bool = True) -> None:
574
+ """Uploads a given folder to a remote path on the Studio."""
575
+ if folder_path is None:
576
+ raise ValueError("Cannot upload a folder that is None.")
577
+ folder_path = os.path.normpath(folder_path)
578
+ if os.path.isfile(folder_path):
579
+ raise NotADirectoryError(f"Cannot upload a file as a folder. '{folder_path}' is a file.")
580
+ if not os.path.exists(folder_path):
581
+ raise NotADirectoryError(f"Cannot upload a folder that does not exist. '{folder_path}' is not a directory.")
582
+ all_files = []
583
+ for fp in glob.glob(os.path.join(folder_path, "**"), recursive=True):
584
+ if not os.path.isfile(fp):
585
+ continue
586
+ rel_path = os.path.relpath(fp, folder_path)
587
+ remote_file = os.path.join(remote_path, rel_path) if remote_path else rel_path
588
+ all_files.append((fp, remote_file))
589
+
590
+ if progress_bar:
591
+ progress_bar = tqdm(total=len(all_files), desc="Uploading files", unit="file")
592
+ for local_file, remote_path in sorted(all_files, key=lambda p: p[1]):
593
+ if progress_bar:
594
+ progress_bar.set_description(f"Uploading {local_file}")
595
+ self.upload_file(local_file, remote_path=remote_path, progress_bar=False)
596
+ if progress_bar:
597
+ progress_bar.update(1)
598
+ if progress_bar:
599
+ progress_bar.close()
600
+
258
601
  def download_file(self, remote_path: str, file_path: Optional[str] = None) -> None:
259
602
  """Downloads a file from the Studio to a given target path."""
260
603
  if file_path is None:
@@ -281,6 +624,91 @@ class Studio:
281
624
  cloud_account=self._studio.cluster_id,
282
625
  )
283
626
 
627
+ def run_job(
628
+ self,
629
+ name: str,
630
+ machine: Union["Machine", str],
631
+ command: str,
632
+ env: Optional[Dict[str, str]] = None,
633
+ interruptible: bool = False,
634
+ reuse_snapshot: bool = True,
635
+ ) -> "Job":
636
+ """Run async workloads using the compute environment from your studio.
637
+
638
+ Args:
639
+ name: The name of the job. Needs to be unique within the teamspace.
640
+ machine: The machine type to run the job on. One of {", ".join(_MACHINE_VALUES)}.
641
+ command: The command to run inside your job.
642
+ env: Environment variables to set inside the job.
643
+ interruptible: Whether the job should run on interruptible instances. They are cheaper but can be preempted.
644
+ reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
645
+ submitted. Turning this off may result in longer job startup times. Defaults to True.
646
+ """
647
+ from lightning_sdk.job import Job
648
+
649
+ return Job.run(
650
+ name=name,
651
+ machine=machine,
652
+ command=command,
653
+ studio=self,
654
+ image=None,
655
+ teamspace=self.teamspace,
656
+ cloud_account=self.cloud_account,
657
+ env=env,
658
+ interruptible=interruptible,
659
+ reuse_snapshot=reuse_snapshot,
660
+ )
661
+
662
+ def run_mmt(
663
+ self,
664
+ name: str,
665
+ num_machines: int,
666
+ machine: Union["Machine", str],
667
+ command: str,
668
+ env: Optional[Dict[str, str]] = None,
669
+ interruptible: bool = False,
670
+ ) -> "MMT":
671
+ """Run async workloads using the compute environment from your studio.
672
+
673
+ Args:
674
+ name: The name of the job. Needs to be unique within the teamspace.
675
+ num_machines: The number of machines to run on.
676
+ machine: The machine type to run the job on. One of {", ".join(_MACHINE_VALUES)}.
677
+ command: The command to run inside your job.
678
+ env: Environment variables to set inside the job.
679
+ interruptible: Whether the job should run on interruptible instances. They are cheaper but can be preempted.
680
+ """
681
+ from lightning_sdk.mmt import MMT
682
+
683
+ return MMT.run(
684
+ name=name,
685
+ num_machines=num_machines,
686
+ machine=machine,
687
+ command=command,
688
+ studio=self,
689
+ image=None,
690
+ teamspace=self.teamspace,
691
+ cloud_account=self.cloud_account,
692
+ env=env,
693
+ interruptible=interruptible,
694
+ )
695
+
696
+ def create_assistant(self, name: str, port: int) -> None:
697
+ assistant = self._studio_api.create_assistant(
698
+ studio_id=self._studio.id, teamspace_id=self._teamspace.id, port=port, assistant_name=name
699
+ )
700
+ assistant_info = f"Created assisant with name: {assistant.name}, ID: {assistant.id}"
701
+ self._assistant_id = assistant.id
702
+ _logger.info(assistant_info)
703
+
704
+ def rename(self, new_name: str) -> None:
705
+ """Renames the current Studio to the provided new name."""
706
+ if new_name == self._studio.name:
707
+ return
708
+
709
+ self._studio_api._update_cloudspace(self._studio, self._teamspace.id, "display_name", new_name)
710
+ self._update_studio_reference()
711
+
284
712
  @property
285
713
  def auto_sleep(self) -> bool:
286
714
  """Returns if a Studio has auto-sleep enabled."""
@@ -289,8 +717,8 @@ class Studio:
289
717
  @auto_sleep.setter
290
718
  def auto_sleep(self, value: bool) -> None:
291
719
  if not value and self.machine == Machine.CPU:
292
- warnings.warn("Disabling auto-sleep will convert the Studio from free to paid!")
293
- self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, enabled=value, studio=self._studio)
720
+ warnings.warn(f"Disabling auto-sleep will convert the {self._cls_name} from free to paid!")
721
+ self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, enabled=value)
294
722
  self._update_studio_reference()
295
723
 
296
724
  @property
@@ -300,10 +728,8 @@ class Studio:
300
728
 
301
729
  @auto_sleep_time.setter
302
730
  def auto_sleep_time(self, value: int) -> None:
303
- warnings.warn("Setting auto-sleep time will convert the Studio from free to paid!")
304
- self._studio_api.update_autoshutdown(
305
- self._studio.id, self._teamspace.id, idle_shutdown_seconds=value, studio=self._studio
306
- )
731
+ warnings.warn(f"Setting auto-sleep time will convert the {self._cls_name} from free to paid!")
732
+ self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, idle_shutdown_seconds=value)
307
733
  self._update_studio_reference()
308
734
 
309
735
  @property
@@ -326,6 +752,22 @@ class Studio:
326
752
  warnings.warn("auto_shutdown_time is deprecated. Use auto_sleep_time instead", DeprecationWarning)
327
753
  self.auto_sleep_time = value
328
754
 
755
+ @property
756
+ def env(self) -> Dict[str, str]:
757
+ self._update_studio_reference()
758
+ return self._studio_api.get_env(self._studio)
759
+
760
+ def set_env(self, new_env: Dict[str, str], partial: bool = True) -> None:
761
+ """Set the environment variables for the Studio.
762
+
763
+ Args:
764
+ new_env: The new environment variables to set.
765
+ partial: Whether to only set the environment variables that are provided.
766
+ If False, existing environment variables that are not in new_env will be removed.
767
+ If True, existing environment variables that are not in new_env will be kept.
768
+ """
769
+ self._studio_api.set_env(self._studio, self._teamspace.id, new_env, partial=partial)
770
+
329
771
  @property
330
772
  def available_plugins(self) -> Mapping[str, str]:
331
773
  """All available plugins to install in the current Studio."""
@@ -370,6 +812,7 @@ class Studio:
370
812
  def _add_plugin(self, plugin_name: str) -> None:
371
813
  """Adds the just installed plugin to the internal list of plugins."""
372
814
  from lightning_sdk.plugin import (
815
+ CustomPortPlugin,
373
816
  InferenceServerPlugin,
374
817
  JobsPlugin,
375
818
  MultiMachineTrainingPlugin,
@@ -383,6 +826,7 @@ class Studio:
383
826
  "jobs": JobsPlugin,
384
827
  "multi-machine-training": MultiMachineTrainingPlugin,
385
828
  "inference-server": InferenceServerPlugin,
829
+ "custom-port": CustomPortPlugin,
386
830
  }.get(plugin_name, Plugin)
387
831
 
388
832
  description = self._list_installed_plugins()[plugin_name]
@@ -415,6 +859,36 @@ class Studio:
415
859
  def _update_studio_reference(self) -> None:
416
860
  self._studio = self._studio_api.get_studio_by_id(studio_id=self._studio.id, teamspace_id=self._teamspace.id)
417
861
 
862
+ @property
863
+ def _cls_name(self) -> str:
864
+ return self.__class__.__qualname__
865
+
866
+
867
+ class VM(Studio):
868
+ """A single Lightning AI VM.
869
+
870
+ Allows to fully control a vm, including retrieving the status, running commands
871
+ and switching machine types.
872
+
873
+ Args:
874
+ name: the name of the vm
875
+ teamspace: the name of the teamspace the vm is contained by
876
+ org: the name of the organization owning the :param`teamspace` in case it is owned by an org
877
+ user: the name of the user owning the :param`teamspace` in case it is owned directly by a user instead of an org
878
+ cloud_account: the name of the cloud account, the vm should be created on.
879
+ Doesn't matter when the vm already exists.
880
+ cloud_account_provider: The provider to select the cloud-account from.
881
+ If set, must be in agreement with the provider from the cloud_account (if specified).
882
+ If not specified, falls backto the teamspace default cloud account.
883
+ create_ok: whether the vm will be created if it does not yet exist. Defaults to True
884
+ provider: the provider of the machine, the vm should be created on.
885
+
886
+ Note:
887
+ Since a teamspace can either be owned by an org or by a user directly,
888
+ only one of the arguments can be provided.
889
+
890
+ """
891
+
418
892
 
419
893
  def _internal_status_to_external_status(internal_status: str) -> Status:
420
894
  """Converts internal status strings from HTTP requests to external enums."""