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
@@ -1,20 +1,17 @@
1
1
  import json
2
2
  import os
3
- import tempfile
4
3
  import time
5
- import warnings
6
- import zipfile
4
+ from pathlib import Path
7
5
  from threading import Event, Thread
8
- from typing import Any, Dict, Mapping, Optional, Tuple, Union
6
+ from typing import Any, Dict, Generator, List, Mapping, Optional, Tuple, Union
9
7
 
10
8
  import backoff
11
9
  import requests
12
10
  from tqdm import tqdm
13
11
 
14
12
  from lightning_sdk.api.utils import (
15
- _COMPUTE_NAME_TO_MACHINE,
16
- _MACHINE_TO_COMPUTE_NAME,
17
13
  _create_app,
14
+ _download_teamspace_files,
18
15
  _DummyBody,
19
16
  _DummyResponse,
20
17
  _FileUploader,
@@ -28,23 +25,42 @@ from lightning_sdk.constants import _LIGHTNING_DEBUG
28
25
  from lightning_sdk.lightning_cloud.login import Auth
29
26
  from lightning_sdk.lightning_cloud.openapi import (
30
27
  CloudspaceIdRunsBody,
28
+ CloudspacesIdBody,
31
29
  Externalv1LightningappInstance,
32
30
  IdCodeconfigBody,
33
31
  IdExecuteBody1,
34
32
  IdForkBody1,
33
+ IdSleepconfigBody,
35
34
  IdStartBody,
36
35
  ProjectIdCloudspacesBody,
36
+ V1Assistant,
37
37
  V1CloudSpace,
38
38
  V1CloudSpaceInstanceConfig,
39
39
  V1CloudSpaceSeedFile,
40
+ V1CloudSpaceSourceType,
40
41
  V1CloudSpaceState,
42
+ V1ClusterAccelerator,
43
+ V1EndpointType,
44
+ V1EnvVar,
41
45
  V1GetCloudSpaceInstanceStatusResponse,
42
46
  V1GetLongRunningCommandInCloudSpaceResponse,
43
47
  V1LoginRequest,
44
48
  V1Plugin,
45
49
  V1PluginsListResponse,
50
+ V1UpstreamCloudSpace,
46
51
  V1UserRequestedComputeConfig,
47
52
  )
53
+ from lightning_sdk.lightning_cloud.openapi.models import ProjectIdEndpointsBody
54
+ from lightning_sdk.lightning_cloud.openapi.models.project_id_agentmanagedendpoints_body import (
55
+ ProjectIdAgentmanagedendpointsBody,
56
+ )
57
+ from lightning_sdk.lightning_cloud.openapi.models.project_id_agents_body import (
58
+ ProjectIdAgentsBody,
59
+ )
60
+ from lightning_sdk.lightning_cloud.openapi.models.v1_endpoint import V1Endpoint
61
+ from lightning_sdk.lightning_cloud.openapi.models.v1_managed_endpoint import V1ManagedEndpoint
62
+ from lightning_sdk.lightning_cloud.openapi.models.v1_managed_model import V1ManagedModel
63
+ from lightning_sdk.lightning_cloud.openapi.models.v1_upstream_managed import V1UpstreamManaged
48
64
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
49
65
  from lightning_sdk.machine import Machine
50
66
 
@@ -109,6 +125,10 @@ class StudioApi:
109
125
  name: str,
110
126
  teamspace_id: str,
111
127
  cloud_account: Optional[str] = None,
128
+ source: Optional[Union[V1CloudSpaceSourceType, str]] = None,
129
+ disable_secrets: bool = False,
130
+ sandbox: bool = False,
131
+ cloud_space_environment_template_id: Optional[str] = None,
112
132
  ) -> V1CloudSpace:
113
133
  """Create a Studio with a given name in a given Teamspace on a possibly given cloud_account."""
114
134
  body = ProjectIdCloudspacesBody(
@@ -116,6 +136,10 @@ class StudioApi:
116
136
  name=name,
117
137
  display_name=name,
118
138
  seed_files=[V1CloudSpaceSeedFile(path="main.py", contents="print('Hello, Lightning World!')\n")],
139
+ source=source,
140
+ disable_secrets=disable_secrets,
141
+ sandbox=sandbox,
142
+ cloud_space_environment_template_id=cloud_space_environment_template_id,
119
143
  )
120
144
  studio = self._client.cloud_space_service_create_cloud_space(body, teamspace_id)
121
145
 
@@ -139,37 +163,40 @@ class StudioApi:
139
163
  @backoff.on_exception(backoff.expo, AttributeError, max_tries=10)
140
164
  def _check_code_status_top_up_restore_finished(self, studio_id: str, teamspace_id: str) -> bool:
141
165
  """Retries checking the top_up_restore_finished value of the code status when there's an AttributeError."""
166
+ if (
167
+ self.get_studio_status(studio_id, teamspace_id) is None
168
+ or self.get_studio_status(studio_id, teamspace_id).in_use is None
169
+ ):
170
+ return False
142
171
  startup_status = self.get_studio_status(studio_id, teamspace_id).in_use.startup_status
143
172
  return startup_status and startup_status.top_up_restore_finished
144
173
 
145
- @backoff.on_exception(backoff.expo, AttributeError, max_tries=10)
146
- def _check_code_status_sync_in_progress(self, studio_id: str, teamspace_id: str) -> bool:
147
- """Retries checking the sync_in_progress value of the code status when there's an AttributeError."""
148
- return self.get_studio_status(studio_id, teamspace_id).in_use.sync_in_progress
149
-
150
174
  def start_studio(
151
- self, studio_id: str, teamspace_id: str, machine: Union[Machine, str], interruptible: False
175
+ self,
176
+ studio_id: str,
177
+ teamspace_id: str,
178
+ machine: Union[Machine, str],
179
+ interruptible: bool = False,
180
+ max_runtime: Optional[int] = None,
152
181
  ) -> None:
153
182
  """Start an existing Studio."""
154
- if _machine_to_compute_name(machine) == _machine_to_compute_name(Machine.CPU_SMALL):
155
- warnings.warn(
156
- f"{Machine.CPU_SMALL} is not a valid machine for starting a Studio. "
157
- "It is reserved for running jobs only. "
158
- "The Studio will be started with a CPU machine instead."
159
- )
160
- machine = Machine.CPU
183
+ # need to go via kwargs for typing compatibility since autogenerated apis accept None but aren't typed with None
184
+ optional_kwargs_compute_body = {}
161
185
 
186
+ if max_runtime is not None:
187
+ optional_kwargs_compute_body["requested_run_duration_seconds"] = str(max_runtime)
162
188
  self._client.cloud_space_service_start_cloud_space_instance(
163
189
  IdStartBody(
164
- compute_config=V1UserRequestedComputeConfig(name=_machine_to_compute_name(machine), spot=interruptible)
190
+ compute_config=V1UserRequestedComputeConfig(
191
+ name=_machine_to_compute_name(machine),
192
+ spot=interruptible,
193
+ **optional_kwargs_compute_body,
194
+ )
165
195
  ),
166
196
  teamspace_id,
167
197
  studio_id,
168
198
  )
169
199
 
170
- while self._check_code_status_sync_in_progress(studio_id, teamspace_id):
171
- time.sleep(1)
172
-
173
200
  while True:
174
201
  if self._check_code_status_top_up_restore_finished(studio_id, teamspace_id):
175
202
  break
@@ -180,6 +207,32 @@ class StudioApi:
180
207
  instance_id = code_status.in_use.cloud_space_instance_id
181
208
  print(f"Studio started | {teamspace_id=} {studio_id=} {instance_id=}")
182
209
 
210
+ def start_studio_async(
211
+ self,
212
+ studio_id: str,
213
+ teamspace_id: str,
214
+ machine: Union[Machine, str],
215
+ interruptible: bool = False,
216
+ max_runtime: Optional[int] = None,
217
+ ) -> None:
218
+ """Start an existing Studio without blocking."""
219
+ # need to go via kwargs for typing compatibility since autogenerated apis accept None but aren't typed with None
220
+ optional_kwargs_compute_body = {}
221
+
222
+ if max_runtime is not None:
223
+ optional_kwargs_compute_body["requested_run_duration_seconds"] = str(max_runtime)
224
+ self._client.cloud_space_service_start_cloud_space_instance(
225
+ IdStartBody(
226
+ compute_config=V1UserRequestedComputeConfig(
227
+ name=_machine_to_compute_name(machine),
228
+ spot=interruptible,
229
+ **optional_kwargs_compute_body,
230
+ )
231
+ ),
232
+ teamspace_id,
233
+ studio_id,
234
+ )
235
+
183
236
  def stop_studio(self, studio_id: str, teamspace_id: str) -> None:
184
237
  """Stop an existing Studio."""
185
238
  self.stop_keeping_alive(teamspace_id=teamspace_id, studio_id=studio_id)
@@ -208,20 +261,19 @@ class StudioApi:
208
261
  return getattr(getattr(studio.code_status, "in_use", None), "phase", None)
209
262
 
210
263
  def _request_switch(
211
- self, studio_id: str, teamspace_id: str, machine: Union[Machine, str], interruptible: bool
264
+ self,
265
+ studio_id: str,
266
+ teamspace_id: str,
267
+ machine: Union[Machine, str],
268
+ interruptible: bool,
269
+ cloud_account: Optional[str],
212
270
  ) -> None:
213
271
  """Switches given Studio to a new machine type."""
214
- if _machine_to_compute_name(machine) == _machine_to_compute_name(Machine.CPU_SMALL):
215
- warnings.warn(
216
- f"{Machine.CPU_SMALL} is not a valid machine for switching a Studio. "
217
- "It is reserved for running jobs only. "
218
- "The Studio will be switched to a CPU machine instead."
219
- )
220
- machine = Machine.CPU
221
-
222
272
  compute_name = _machine_to_compute_name(machine)
223
273
  # TODO: UI sends disk size here, maybe we need to also?
224
274
  body = IdCodeconfigBody(compute_config=V1UserRequestedComputeConfig(name=compute_name, spot=interruptible))
275
+ if cloud_account:
276
+ body.compute_config.cluster_override = cloud_account
225
277
  self._client.cloud_space_service_update_cloud_space_instance_config(
226
278
  id=studio_id,
227
279
  project_id=teamspace_id,
@@ -229,35 +281,154 @@ class StudioApi:
229
281
  )
230
282
 
231
283
  def switch_studio_machine(
232
- self, studio_id: str, teamspace_id: str, machine: Union[Machine, str], interruptible: bool
284
+ self,
285
+ studio_id: str,
286
+ teamspace_id: str,
287
+ machine: Union[Machine, str],
288
+ interruptible: bool,
289
+ cloud_account: Optional[str],
233
290
  ) -> None:
234
291
  """Switches given Studio to a new machine type."""
235
292
  self._request_switch(
236
- studio_id=studio_id, teamspace_id=teamspace_id, machine=machine, interruptible=interruptible
293
+ studio_id=studio_id,
294
+ teamspace_id=teamspace_id,
295
+ machine=machine,
296
+ interruptible=interruptible,
297
+ cloud_account=cloud_account,
298
+ )
299
+
300
+ # Wait until it's time to switch
301
+ requested_was_found = False
302
+ startup_status = None
303
+ while True:
304
+ status = self.get_studio_status(studio_id, teamspace_id)
305
+ requested_machine = status.requested
306
+
307
+ if requested_machine is not None:
308
+ requested_was_found = True
309
+ startup_status = requested_machine.startup_status
310
+
311
+ # if the requested machine was found in the past, use the in_use status instead.
312
+ # it might be that it either was cancelled or it actually is ready.
313
+ # Either way, since we're actually blocking below for the in use startup status
314
+ # it's safe to switch at this point
315
+ elif requested_was_found:
316
+ in_use_machine = status.in_use
317
+ if in_use_machine is not None:
318
+ startup_status = in_use_machine.startup_status
319
+
320
+ if startup_status and startup_status.initial_restore_finished:
321
+ break
322
+ time.sleep(1)
323
+
324
+ self._client.cloud_space_service_switch_cloud_space_instance(teamspace_id, studio_id)
325
+
326
+ # Wait until the new machine is ready to use
327
+ while True:
328
+ in_use = self.get_studio_status(studio_id, teamspace_id).in_use
329
+ if in_use is None:
330
+ continue
331
+ startup_status = in_use.startup_status
332
+ if startup_status and startup_status.top_up_restore_finished:
333
+ break
334
+ time.sleep(1)
335
+
336
+ def switch_studio_machine_with_progress(
337
+ self,
338
+ studio_id: str,
339
+ teamspace_id: str,
340
+ machine: Union[Machine, str],
341
+ interruptible: bool,
342
+ progress: Any, # StudioProgressTracker - avoid circular import
343
+ cloud_account: Optional[str],
344
+ ) -> None:
345
+ """Switches given Studio to a new machine type with progress tracking."""
346
+ progress.update_progress(10, "Requesting machine switch...")
347
+
348
+ self._request_switch(
349
+ studio_id=studio_id,
350
+ teamspace_id=teamspace_id,
351
+ machine=machine,
352
+ interruptible=interruptible,
353
+ cloud_account=cloud_account,
237
354
  )
238
355
 
356
+ progress.update_progress(20, "Waiting for machine allocation...")
357
+
239
358
  # Wait until it's time to switch
359
+ requested_was_found = False
360
+ startup_status = None
361
+ base_progress = 20
362
+ max_wait_progress = 60
363
+ wait_counter = 0
364
+
240
365
  while True:
241
- startup_status = self.get_studio_status(studio_id, teamspace_id).requested.startup_status
366
+ status = self.get_studio_status(studio_id, teamspace_id)
367
+ requested_machine = status.requested
368
+
369
+ if requested_machine is not None:
370
+ requested_was_found = True
371
+ startup_status = requested_machine.startup_status
372
+
373
+ # if the requested machine was found in the past, use the in_use status instead.
374
+ # it might be that it either was cancelled or it actually is ready.
375
+ # Either way, since we're actually blocking below for the in use startup status
376
+ # it's safe to switch at this point
377
+ elif requested_was_found:
378
+ in_use_machine = status.in_use
379
+ if in_use_machine is not None:
380
+ startup_status = in_use_machine.startup_status
381
+
242
382
  if startup_status and startup_status.initial_restore_finished:
243
383
  break
384
+
385
+ # Update progress gradually while waiting
386
+ wait_counter += 1
387
+ current_progress = min(base_progress + (wait_counter * 2), max_wait_progress)
388
+ progress.update_progress(current_progress, "Allocating new machine...")
244
389
  time.sleep(1)
245
390
 
391
+ progress.update_progress(70, "Starting machine switch...")
246
392
  self._client.cloud_space_service_switch_cloud_space_instance(teamspace_id, studio_id)
247
393
 
394
+ progress.update_progress(80, "Configuring new machine...")
395
+
248
396
  # Wait until the new machine is ready to use
397
+ switch_counter = 0
249
398
  while True:
250
- startup_status = self.get_studio_status(studio_id, teamspace_id).in_use.startup_status
399
+ in_use = self.get_studio_status(studio_id, teamspace_id).in_use
400
+ if in_use is None:
401
+ continue
402
+ startup_status = in_use.startup_status
251
403
  if startup_status and startup_status.top_up_restore_finished:
252
404
  break
405
+
406
+ # Update progress while waiting for machine to be ready
407
+ switch_counter += 1
408
+ current_progress = min(80 + switch_counter, 95)
409
+ progress.update_progress(current_progress, "Finalizing machine setup...")
253
410
  time.sleep(1)
254
411
 
255
- def get_machine(self, studio_id: str, teamspace_id: str) -> Machine:
412
+ progress.complete("Machine switch completed successfully")
413
+
414
+ def get_machine(self, studio_id: str, teamspace_id: str, cloud_account_id: str, org_id: str) -> Machine:
256
415
  """Get the current machine type the given Studio is running on."""
257
416
  response: V1CloudSpaceInstanceConfig = self._client.cloud_space_service_get_cloud_space_instance_config(
258
417
  project_id=teamspace_id, id=studio_id
259
418
  )
260
- return _COMPUTE_NAME_TO_MACHINE[response.compute_config.name]
419
+ accelerators = self._get_machines_for_cloud_account(
420
+ teamspace_id=teamspace_id, cloud_account_id=cloud_account_id, org_id=org_id
421
+ )
422
+
423
+ for accelerator in accelerators:
424
+ if response.compute_config.name in (
425
+ accelerator.slug,
426
+ accelerator.slug_multi_cloud,
427
+ accelerator.instance_id,
428
+ ):
429
+ return Machine._from_accelerator(accelerator)
430
+
431
+ return Machine.from_str(response.compute_config.name)
261
432
 
262
433
  def get_interruptible(self, studio_id: str, teamspace_id: str) -> bool:
263
434
  """Get whether the Studio is running on a interruptible instance."""
@@ -267,6 +438,30 @@ class StudioApi:
267
438
 
268
439
  return response.compute_config.spot
269
440
 
441
+ def get_public_ip(self, studio_id: str, teamspace_id: str) -> Optional[str]:
442
+ """Get the public IP address of the Studio."""
443
+ internal_status = self.get_studio_status(studio_id=studio_id, teamspace_id=teamspace_id).in_use
444
+ if internal_status is None:
445
+ return None
446
+
447
+ return internal_status.public_ip_address
448
+
449
+ def _get_machines_for_cloud_account(
450
+ self, teamspace_id: str, cloud_account_id: str, org_id: str
451
+ ) -> List[V1ClusterAccelerator]:
452
+ from lightning_sdk.api.cloud_account_api import CloudAccountApi
453
+
454
+ cloud_account_api = CloudAccountApi()
455
+ accelerators = cloud_account_api.list_cloud_account_accelerators(
456
+ teamspace_id=teamspace_id,
457
+ cloud_account_id=cloud_account_id,
458
+ org_id=org_id,
459
+ )
460
+ if not accelerators:
461
+ return []
462
+
463
+ return list(filter(lambda acc: acc.enabled, accelerators.accelerator))
464
+
270
465
  def _get_detached_command_status(
271
466
  self, studio_id: str, teamspace_id: str, session_id: str
272
467
  ) -> V1GetLongRunningCommandInCloudSpaceResponse:
@@ -292,6 +487,52 @@ class StudioApi:
292
487
  for response in responses:
293
488
  yield response.result
294
489
 
490
+ def run_studio_commands_and_yield(
491
+ self, studio_id: str, teamspace_id: str, *commands: str, timeout: float, check_interval: float
492
+ ) -> Generator[Tuple[str, int], None, None]:
493
+ """Run given commands in a given Studio and yield the output and exit code for the given timeout.
494
+
495
+ Args:
496
+ timeout: wait for this many seconds for the command to finish.
497
+ """
498
+ response_submit = self._client.cloud_space_service_execute_command_in_cloud_space(
499
+ IdExecuteBody1("; ".join(commands), detached=True),
500
+ project_id=teamspace_id,
501
+ id=studio_id,
502
+ )
503
+
504
+ if not response_submit:
505
+ raise RuntimeError("Unable to submit command")
506
+
507
+ if response_submit.session_name == "":
508
+ raise RuntimeError("The session name should be defined.")
509
+
510
+ start_time = time.time()
511
+ exit_code = None
512
+ while True:
513
+ for resp in self._get_detached_command_status(
514
+ studio_id=studio_id,
515
+ teamspace_id=teamspace_id,
516
+ session_id=response_submit.session_name,
517
+ ):
518
+ if time.time() - start_time >= timeout:
519
+ return
520
+
521
+ if resp.exit_code == -1:
522
+ break
523
+
524
+ if exit_code is None:
525
+ exit_code = resp.exit_code
526
+
527
+ elif exit_code != resp.exit_code:
528
+ raise RuntimeError("Cannot determine exit code")
529
+
530
+ if resp.exit_code is not None and resp.exit_code != 0:
531
+ raise RuntimeError(f"Command failed with exit code {resp.exit_code}. Output: {resp.output}")
532
+
533
+ yield resp.output, exit_code
534
+ time.sleep(check_interval)
535
+
295
536
  def run_studio_commands(self, studio_id: str, teamspace_id: str, *commands: str) -> Tuple[str, int]:
296
537
  """Run given commands in a given Studio."""
297
538
  response_submit = self._client.cloud_space_service_execute_command_in_cloud_space(
@@ -333,25 +574,28 @@ class StudioApi:
333
574
  self,
334
575
  studio_id: str,
335
576
  teamspace_id: str,
336
- studio: V1CloudSpace,
337
577
  enabled: Optional[bool] = None,
338
- idle_shutdown_seconds: int = 0,
339
- ) -> None:
340
- """Update the autoshutdown time of the given Studio."""
341
- if enabled is None:
342
- enabled = not studio.code_config.disable_auto_shutdown
343
- body = IdCodeconfigBody(
344
- disable_auto_shutdown=not enabled,
578
+ idle_shutdown_seconds: Optional[int] = None,
579
+ ) -> V1CloudSpaceInstanceConfig:
580
+ """Update the autoshutdown time and behaviour of the given Studio."""
581
+ body = IdSleepconfigBody(
582
+ disable_auto_shutdown=not enabled if enabled is not None else None,
345
583
  idle_shutdown_seconds=idle_shutdown_seconds,
346
- compute_config=studio.code_config.compute_config,
347
584
  )
348
- self._client.cloud_space_service_update_cloud_space_instance_config(
585
+ return self._client.cloud_space_service_update_cloud_space_sleep_config(
349
586
  id=studio_id,
350
587
  project_id=teamspace_id,
351
588
  body=body,
352
589
  )
353
590
 
354
- def duplicate_studio(self, studio_id: str, teamspace_id: str, target_teamspace_id: str) -> Dict[str, str]:
591
+ def duplicate_studio(
592
+ self,
593
+ studio_id: str,
594
+ teamspace_id: str,
595
+ target_teamspace_id: str,
596
+ machine: Machine = Machine.CPU,
597
+ new_name: Optional[str] = None,
598
+ ) -> Dict[str, Any]:
355
599
  """Duplicates the given Studio from a given Teamspace into a given target Teamspace."""
356
600
  target_teamspace = self._client.projects_service_get_project(target_teamspace_id)
357
601
  init_kwargs = {}
@@ -365,7 +609,7 @@ class StudioApi:
365
609
  init_kwargs["org"] = OrgApi()._get_org_by_id(target_teamspace.owner_id).name
366
610
 
367
611
  new_cloudspace = self._client.cloud_space_service_fork_cloud_space(
368
- IdForkBody1(target_project_id=target_teamspace_id), project_id=teamspace_id, id=studio_id
612
+ IdForkBody1(target_project_id=target_teamspace_id, new_name=new_name), project_id=teamspace_id, id=studio_id
369
613
  )
370
614
 
371
615
  while self.get_studio_by_id(new_cloudspace.id, target_teamspace_id).state != V1CloudSpaceState.READY:
@@ -374,7 +618,7 @@ class StudioApi:
374
618
  init_kwargs["name"] = new_cloudspace.name
375
619
  init_kwargs["teamspace"] = target_teamspace.name
376
620
 
377
- self.start_studio(new_cloudspace.id, target_teamspace_id, Machine.CPU, False)
621
+ self.start_studio(new_cloudspace.id, target_teamspace_id, machine, False, None)
378
622
  return init_kwargs
379
623
 
380
624
  def delete_studio(self, studio_id: str, teamspace_id: str) -> None:
@@ -460,46 +704,24 @@ class StudioApi:
460
704
  progress_bar: bool = True,
461
705
  ) -> None:
462
706
  """Downloads a given folder from a Studio to a target location."""
463
- # TODO: Update this endpoint to permit basic auth
707
+ # TODO: implement resumable downloads
464
708
  auth = Auth()
465
709
  auth.authenticate()
466
- token = self._client.auth_service_login(V1LoginRequest(auth.api_key)).token
467
710
 
468
- query_params = {
469
- "clusterId": cloud_account,
470
- "prefix": _sanitize_studio_remote_path(path, studio_id),
471
- "token": token,
472
- }
711
+ prefix = _sanitize_studio_remote_path(path, studio_id)
712
+ # ensure we only download as a directory and not the entire prefix
713
+ if prefix.endswith("/") is False:
714
+ prefix = prefix + "/"
473
715
 
474
- r = requests.get(
475
- f"{self._client.api_client.configuration.host}/v1/projects/{teamspace_id}/artifacts/download",
476
- params=query_params,
477
- stream=True,
716
+ _download_teamspace_files(
717
+ client=self._client,
718
+ teamspace_id=teamspace_id,
719
+ cluster_id=cloud_account,
720
+ prefix=prefix,
721
+ download_dir=Path(target_path),
722
+ progress_bar=progress_bar,
478
723
  )
479
724
 
480
- if progress_bar:
481
- pbar = tqdm(
482
- desc=f"Downloading {os.path.split(path)[1]}",
483
- unit="B",
484
- unit_scale=True,
485
- unit_divisor=1000,
486
- )
487
-
488
- pbar_update = pbar.update
489
- else:
490
- pbar_update = lambda x: None
491
-
492
- if target_path:
493
- os.makedirs(target_path, exist_ok=True)
494
-
495
- with tempfile.TemporaryFile() as f:
496
- for chunk in r.iter_content(chunk_size=4096 * 8):
497
- f.write(chunk)
498
- pbar_update(len(chunk))
499
-
500
- with zipfile.ZipFile(f) as z:
501
- z.extractall(target_path)
502
-
503
725
  def install_plugin(self, studio_id: str, teamspace_id: str, plugin_name: str) -> str:
504
726
  """Installs the given plugin."""
505
727
  resp: V1Plugin = self._client.cloud_space_service_install_plugin(
@@ -582,7 +804,7 @@ class StudioApi:
582
804
  plugin_type="job",
583
805
  entrypoint=entrypoint,
584
806
  name=name,
585
- compute=_MACHINE_TO_COMPUTE_NAME[machine],
807
+ compute=_machine_to_compute_name(machine),
586
808
  interruptible=interruptible,
587
809
  )
588
810
 
@@ -600,7 +822,7 @@ class StudioApi:
600
822
  ) -> Externalv1LightningappInstance:
601
823
  """Creates a multi-machine job with given commands."""
602
824
  distributed_args = {
603
- "cloud_compute": _MACHINE_TO_COMPUTE_NAME[machine],
825
+ "cloud_compute": _machine_to_compute_name(machine),
604
826
  "num_instances": num_instances,
605
827
  "strategy": strategy,
606
828
  }
@@ -628,7 +850,7 @@ class StudioApi:
628
850
  ) -> Externalv1LightningappInstance:
629
851
  """Creates a multi-machine job with given commands."""
630
852
  data_prep_args = {
631
- "cloud_compute": _MACHINE_TO_COMPUTE_NAME[machine],
853
+ "cloud_compute": _machine_to_compute_name(machine),
632
854
  "num_instances": num_instances,
633
855
  }
634
856
  return self._create_app(
@@ -665,7 +887,7 @@ class StudioApi:
665
887
  teamspace_id=teamspace_id,
666
888
  cloud_account=cloud_account,
667
889
  plugin_type="inference_plugin",
668
- compute=_MACHINE_TO_COMPUTE_NAME[machine],
890
+ compute=_machine_to_compute_name(machine),
669
891
  entrypoint=entrypoint,
670
892
  name=name,
671
893
  min_replicas=min_replicas,
@@ -678,6 +900,70 @@ class StudioApi:
678
900
  interruptible=interruptible,
679
901
  )
680
902
 
903
+ def start_new_port(self, teamspace_id: str, studio_id: str, name: str, port: int, auto_start: bool = False) -> str:
904
+ """Starts a new port to the given Studio."""
905
+ endpoint = self._client.endpoint_service_create_endpoint(
906
+ project_id=teamspace_id,
907
+ body=ProjectIdEndpointsBody(
908
+ name=name,
909
+ ports=[str(port)],
910
+ cloudspace=V1UpstreamCloudSpace(
911
+ cloudspace_id=studio_id, port=str(port), type=V1EndpointType.PLUGIN_PORT, auto_start=auto_start
912
+ ),
913
+ ),
914
+ )
915
+ return endpoint.urls[0]
916
+
917
+ def create_assistant(self, studio_id: str, teamspace_id: str, port: int, assistant_name: str) -> V1Assistant:
918
+ target_teamspace = self._client.projects_service_get_project(teamspace_id)
919
+ org_id = ""
920
+ if target_teamspace.owner_type == "ORGANIZATION":
921
+ org_id = target_teamspace.owner_id
922
+ endpoint = self._client.endpoint_service_create_endpoint(
923
+ project_id=teamspace_id,
924
+ body=ProjectIdEndpointsBody(
925
+ ports=[str(port)],
926
+ cloudspace=V1UpstreamCloudSpace(
927
+ cloudspace_id=studio_id,
928
+ port=str(port),
929
+ type=V1EndpointType.PLUGIN_API,
930
+ ),
931
+ ),
932
+ )
933
+ valid_url = endpoint.urls[0]
934
+ managed_endpoint = self._client.assistants_service_create_assistant_managed_endpoint(
935
+ body=ProjectIdAgentmanagedendpointsBody(
936
+ endpoint=V1ManagedEndpoint(
937
+ name=assistant_name,
938
+ base_url=valid_url + "/v1",
939
+ models_metadata=[
940
+ V1ManagedModel(
941
+ name=assistant_name,
942
+ )
943
+ ],
944
+ ),
945
+ org_id=org_id,
946
+ ),
947
+ project_id=teamspace_id,
948
+ )
949
+
950
+ body = ProjectIdAgentsBody(
951
+ endpoint=V1Endpoint(
952
+ cloudspace=V1UpstreamCloudSpace(cloudspace_id=studio_id),
953
+ name=assistant_name,
954
+ managed=V1UpstreamManaged(id=managed_endpoint.endpoint.id),
955
+ ),
956
+ name=assistant_name,
957
+ model=assistant_name,
958
+ cloudspace_id=studio_id,
959
+ model_provider="",
960
+ )
961
+
962
+ return self._client.assistants_service_create_assistant(
963
+ body=body,
964
+ project_id=teamspace_id,
965
+ )
966
+
681
967
  def _create_app(
682
968
  self, studio_id: str, teamspace_id: str, cloud_account: str, plugin_type: str, **other_arguments: Any
683
969
  ) -> Externalv1LightningappInstance:
@@ -690,3 +976,68 @@ class StudioApi:
690
976
  plugin_type=plugin_type,
691
977
  **other_arguments,
692
978
  )
979
+
980
+ def _update_cloudspace(self, studio: V1CloudSpace, teamspace_id: str, key: str, value: Any) -> None:
981
+ body = CloudspacesIdBody(
982
+ code_url=studio.code_url,
983
+ data_connection_mounts=studio.data_connection_mounts,
984
+ description=studio.description,
985
+ display_name=studio.display_name,
986
+ env=studio.env,
987
+ featured=studio.featured,
988
+ hide_files=studio.hide_files,
989
+ is_cloudspace_private=studio.is_cloudspace_private,
990
+ is_code_private=studio.is_code_private,
991
+ is_favorite=studio.is_favorite,
992
+ is_published=studio.is_published,
993
+ license=studio.license,
994
+ license_url=studio.license_url,
995
+ message=studio.message,
996
+ multi_user_edit=studio.multi_user_edit,
997
+ operating_cost=studio.operating_cost,
998
+ paper_authors=studio.paper_authors,
999
+ paper_org=studio.paper_org,
1000
+ paper_org_avatar_url=studio.paper_org_avatar_url,
1001
+ paper_url=studio.paper_url,
1002
+ switch_to_default_machine_on_idle=studio.switch_to_default_machine_on_idle,
1003
+ tags=studio.tags,
1004
+ thumbnail_file_type=studio.thumbnail_file_type,
1005
+ user_metadata=studio.user_metadata,
1006
+ )
1007
+
1008
+ setattr(body, key, value)
1009
+
1010
+ self._client.cloud_space_service_update_cloud_space(
1011
+ id=studio.id,
1012
+ project_id=teamspace_id,
1013
+ body=body,
1014
+ )
1015
+
1016
+ def set_env(
1017
+ self,
1018
+ studio: V1CloudSpace,
1019
+ teamspace_id: str,
1020
+ new_env: Dict[str, str],
1021
+ partial: bool = True,
1022
+ ) -> None:
1023
+ """Set the environment variables for the Studio.
1024
+
1025
+ Args:
1026
+ new_env: The new environment variables to set.
1027
+ partial: Whether to only set the environment variables that are provided.
1028
+ If False, existing environment variables that are not in new_env will be removed.
1029
+ If True, existing environment variables that are not in new_env will be kept.
1030
+ """
1031
+ updated_env_dict = {}
1032
+ if partial:
1033
+ updated_env_dict = {env.name: env.value for env in studio.env}
1034
+ updated_env_dict.update(new_env)
1035
+ else:
1036
+ updated_env_dict = new_env
1037
+
1038
+ updated_env = [V1EnvVar(name=key, value=value) for key, value in updated_env_dict.items()]
1039
+
1040
+ self._update_cloudspace(studio, teamspace_id, "env", updated_env)
1041
+
1042
+ def get_env(self, studio: V1CloudSpace) -> Dict[str, str]:
1043
+ return {env.name: env.value for env in studio.env}