lightning-sdk 2025.8.6rc2__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 (330) hide show
  1. lightning_sdk/__init__.py +13 -7
  2. lightning_sdk/__version__.py +3 -0
  3. lightning_sdk/agents.py +2 -1
  4. lightning_sdk/ai_hub.py +2 -1
  5. lightning_sdk/api/__init__.py +2 -0
  6. lightning_sdk/api/base_studio_api.py +13 -9
  7. lightning_sdk/api/cloud_account_api.py +31 -10
  8. lightning_sdk/api/deployment_api.py +27 -1
  9. lightning_sdk/api/job_api.py +16 -12
  10. lightning_sdk/api/license_api.py +26 -59
  11. lightning_sdk/api/llm_api.py +25 -2
  12. lightning_sdk/api/mmt_api.py +5 -2
  13. lightning_sdk/api/studio_api.py +252 -55
  14. lightning_sdk/api/teamspace_api.py +106 -30
  15. lightning_sdk/api/user_api.py +56 -2
  16. lightning_sdk/api/utils.py +108 -18
  17. lightning_sdk/base_studio.py +51 -27
  18. lightning_sdk/cli/__init__.py +1 -0
  19. lightning_sdk/cli/base_studio/__init__.py +10 -0
  20. lightning_sdk/cli/base_studio/list.py +43 -0
  21. lightning_sdk/cli/config/__init__.py +14 -0
  22. lightning_sdk/cli/config/get.py +57 -0
  23. lightning_sdk/cli/config/set.py +92 -0
  24. lightning_sdk/cli/config/show.py +9 -0
  25. lightning_sdk/cli/entrypoint.py +71 -71
  26. lightning_sdk/cli/groups.py +56 -0
  27. lightning_sdk/cli/job/__init__.py +7 -0
  28. lightning_sdk/cli/{clusters_menu.py → legacy/clusters_menu.py} +9 -6
  29. lightning_sdk/cli/{configure.py → legacy/configure.py} +2 -2
  30. lightning_sdk/cli/{connect.py → legacy/connect.py} +2 -2
  31. lightning_sdk/cli/{create.py → legacy/create.py} +12 -14
  32. lightning_sdk/cli/{delete.py → legacy/delete.py} +5 -5
  33. lightning_sdk/cli/legacy/deploy/__init__.py +0 -0
  34. lightning_sdk/cli/{deploy → legacy/deploy}/_auth.py +5 -6
  35. lightning_sdk/cli/{deploy → legacy/deploy}/devbox.py +8 -2
  36. lightning_sdk/cli/{deploy → legacy/deploy}/serve.py +19 -8
  37. lightning_sdk/cli/{download.py → legacy/download.py} +14 -15
  38. lightning_sdk/cli/legacy/entrypoint.py +110 -0
  39. lightning_sdk/cli/{generate.py → legacy/generate.py} +1 -1
  40. lightning_sdk/cli/{inspection.py → legacy/inspection.py} +1 -1
  41. lightning_sdk/cli/{job_and_mmt_action.py → legacy/job_and_mmt_action.py} +6 -6
  42. lightning_sdk/cli/{jobs_menu.py → legacy/jobs_menu.py} +1 -1
  43. lightning_sdk/cli/{list.py → legacy/list.py} +12 -13
  44. lightning_sdk/cli/{mmts_menu.py → legacy/mmts_menu.py} +1 -1
  45. lightning_sdk/cli/{open.py → legacy/open.py} +4 -4
  46. lightning_sdk/cli/{start.py → legacy/start.py} +1 -0
  47. lightning_sdk/cli/{stop.py → legacy/stop.py} +1 -1
  48. lightning_sdk/cli/{switch.py → legacy/switch.py} +1 -0
  49. lightning_sdk/cli/{teamspace_menu.py → legacy/teamspace_menu.py} +1 -1
  50. lightning_sdk/cli/{upload.py → legacy/upload.py} +7 -8
  51. lightning_sdk/cli/license/__init__.py +14 -0
  52. lightning_sdk/cli/license/get.py +15 -0
  53. lightning_sdk/cli/license/list.py +45 -0
  54. lightning_sdk/cli/license/set.py +13 -0
  55. lightning_sdk/cli/mmt/__init__.py +7 -0
  56. lightning_sdk/cli/studio/__init__.py +24 -0
  57. lightning_sdk/cli/studio/connect.py +139 -0
  58. lightning_sdk/cli/studio/create.py +96 -0
  59. lightning_sdk/cli/studio/delete.py +49 -0
  60. lightning_sdk/cli/studio/list.py +85 -0
  61. lightning_sdk/cli/studio/ssh.py +64 -0
  62. lightning_sdk/cli/studio/start.py +115 -0
  63. lightning_sdk/cli/studio/stop.py +45 -0
  64. lightning_sdk/cli/studio/switch.py +66 -0
  65. lightning_sdk/cli/utils/__init__.py +7 -0
  66. lightning_sdk/cli/utils/cloud_account_map.py +10 -0
  67. lightning_sdk/cli/utils/get_base_studio.py +24 -0
  68. lightning_sdk/cli/utils/handle_machine_and_gpus_args.py +69 -0
  69. lightning_sdk/cli/utils/logging.py +122 -0
  70. lightning_sdk/cli/utils/owner_selection.py +110 -0
  71. lightning_sdk/cli/utils/resolve.py +28 -0
  72. lightning_sdk/cli/utils/richt_print.py +35 -0
  73. lightning_sdk/cli/utils/save_to_config.py +27 -0
  74. lightning_sdk/cli/utils/ssh_connection.py +59 -0
  75. lightning_sdk/cli/utils/studio_selection.py +113 -0
  76. lightning_sdk/cli/utils/teamspace_selection.py +125 -0
  77. lightning_sdk/cli/vm/__init__.py +20 -0
  78. lightning_sdk/cli/vm/create.py +33 -0
  79. lightning_sdk/cli/vm/delete.py +25 -0
  80. lightning_sdk/cli/vm/list.py +30 -0
  81. lightning_sdk/cli/vm/ssh.py +31 -0
  82. lightning_sdk/cli/vm/start.py +60 -0
  83. lightning_sdk/cli/vm/stop.py +25 -0
  84. lightning_sdk/cli/vm/switch.py +38 -0
  85. lightning_sdk/constants.py +1 -0
  86. lightning_sdk/deployment/__init__.py +2 -0
  87. lightning_sdk/deployment/deployment.py +17 -2
  88. lightning_sdk/helpers.py +56 -37
  89. lightning_sdk/job/base.py +21 -6
  90. lightning_sdk/job/job.py +13 -0
  91. lightning_sdk/job/v1.py +11 -0
  92. lightning_sdk/job/v2.py +12 -0
  93. lightning_sdk/lightning_cloud/login.py +320 -10
  94. lightning_sdk/lightning_cloud/openapi/__init__.py +113 -3
  95. lightning_sdk/lightning_cloud/openapi/api/__init__.py +3 -0
  96. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +713 -75
  97. lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py +376 -0
  98. lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +191 -1
  99. lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py +5 -1
  100. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +420 -0
  101. lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py +0 -97
  102. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +420 -0
  103. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +101 -0
  104. lightning_sdk/lightning_cloud/openapi/api/incidents_service_api.py +1058 -0
  105. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +121 -0
  106. lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +1742 -94
  107. lightning_sdk/lightning_cloud/openapi/api/markets_service_api.py +145 -0
  108. lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +4 -4
  109. lightning_sdk/lightning_cloud/openapi/api/product_license_service_api.py +108 -108
  110. lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +105 -0
  111. lightning_sdk/lightning_cloud/openapi/api/schedules_service_api.py +347 -0
  112. lightning_sdk/lightning_cloud/openapi/api/sdk_command_history_service_api.py +141 -0
  113. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +761 -1
  114. lightning_sdk/lightning_cloud/openapi/configuration.py +3 -19
  115. lightning_sdk/lightning_cloud/openapi/models/__init__.py +110 -3
  116. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +15 -15
  117. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_visibility_body.py +27 -1
  118. lightning_sdk/lightning_cloud/openapi/models/cluster_id_kubernetestemplates_body.py +201 -0
  119. lightning_sdk/lightning_cloud/openapi/models/cluster_id_metrics_body.py +131 -1
  120. lightning_sdk/lightning_cloud/openapi/models/create.py +27 -1
  121. lightning_sdk/lightning_cloud/openapi/models/create_machine_request_represents_the_request_to_create_a_machine.py +461 -0
  122. lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +27 -1
  123. lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +105 -1
  124. lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
  125. lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +3 -81
  126. lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +27 -1
  127. lightning_sdk/lightning_cloud/openapi/models/id_render_body.py +123 -0
  128. lightning_sdk/lightning_cloud/openapi/models/id_sleepconfig_body.py +175 -0
  129. lightning_sdk/lightning_cloud/openapi/models/id_transfer_body.py +53 -1
  130. lightning_sdk/lightning_cloud/openapi/models/incident_id_messages_body.py +123 -0
  131. lightning_sdk/lightning_cloud/openapi/models/incidents_id_body.py +279 -0
  132. lightning_sdk/lightning_cloud/openapi/models/job_id_reportroutingtelemetry_body.py +123 -0
  133. lightning_sdk/lightning_cloud/openapi/models/kubernetestemplates_id_body.py +201 -0
  134. lightning_sdk/lightning_cloud/openapi/models/license_key_validate_body.py +123 -0
  135. lightning_sdk/lightning_cloud/openapi/models/message_id_actions_body.py +201 -0
  136. lightning_sdk/lightning_cloud/openapi/models/messages_message_id_body.py +123 -0
  137. lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +27 -1
  138. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +109 -31
  139. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body1.py +149 -0
  140. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +53 -1
  141. lightning_sdk/lightning_cloud/openapi/models/project_id_storage_body.py +27 -1
  142. lightning_sdk/lightning_cloud/openapi/models/project_id_storagetransfers_body.py +175 -0
  143. lightning_sdk/lightning_cloud/openapi/models/project_tab_management_messages.py +123 -0
  144. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +79 -1
  145. lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +41 -15
  146. lightning_sdk/lightning_cloud/openapi/models/storagetransfers_validate_body.py +149 -0
  147. lightning_sdk/lightning_cloud/openapi/models/update1.py +27 -1
  148. lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body1.py +27 -1
  149. lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +107 -3
  150. lightning_sdk/lightning_cloud/openapi/models/v1_abort_storage_transfer_response.py +97 -0
  151. lightning_sdk/lightning_cloud/openapi/models/v1_aggregated_pod_metrics.py +799 -0
  152. lightning_sdk/lightning_cloud/openapi/models/v1_ai_pod_v1.py +53 -1
  153. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_session_daily_aggregated.py +27 -1
  154. lightning_sdk/lightning_cloud/openapi/models/v1_billing_tier.py +0 -1
  155. lightning_sdk/lightning_cloud/openapi/models/v1_cancel_running_cloud_space_instance_transfer_response.py +97 -0
  156. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +2 -0
  157. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +27 -1
  158. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +1 -0
  159. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_transfer_metadata.py +147 -17
  160. lightning_sdk/lightning_cloud/openapi/models/v1_cloudflare_v1.py +3 -29
  161. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +53 -1
  162. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +27 -1
  163. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_metrics.py +1527 -0
  164. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +27 -1
  165. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +53 -1
  166. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +1 -0
  167. lightning_sdk/lightning_cloud/openapi/models/v1_container_metrics.py +21 -21
  168. lightning_sdk/lightning_cloud/openapi/models/v1_create_incident_request.py +305 -0
  169. lightning_sdk/lightning_cloud/openapi/models/v1_create_license_request.py +175 -0
  170. lightning_sdk/lightning_cloud/openapi/models/v1_create_machine_response.py +123 -0
  171. lightning_sdk/lightning_cloud/openapi/models/v1_create_model_metrics_response.py +97 -0
  172. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +79 -1
  173. lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_request.py +253 -0
  174. lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_response.py +97 -0
  175. lightning_sdk/lightning_cloud/openapi/models/v1_daily_model_metrics.py +149 -0
  176. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +53 -1
  177. lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_message_response.py +97 -0
  178. lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_response.py +97 -0
  179. lightning_sdk/lightning_cloud/openapi/models/v1_delete_kubernetes_template_response.py +97 -0
  180. lightning_sdk/lightning_cloud/openapi/models/v1_delete_license_response.py +97 -0
  181. lightning_sdk/lightning_cloud/openapi/models/v1_delete_machine_response.py +97 -0
  182. lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +27 -1
  183. lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +53 -1
  184. lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +27 -1
  185. lightning_sdk/lightning_cloud/openapi/models/v1_filestore_data_connection.py +27 -1
  186. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metric.py +201 -0
  187. lightning_sdk/lightning_cloud/openapi/models/v1_firewall_rule.py +175 -0
  188. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_required_balance_status_response.py +149 -0
  189. lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_transfer_estimate_response.py +149 -0
  190. lightning_sdk/lightning_cloud/openapi/models/v1_get_latest_model_metrics_response.py +123 -0
  191. lightning_sdk/lightning_cloud/openapi/models/v1_get_machine_response.py +123 -0
  192. lightning_sdk/lightning_cloud/openapi/models/v1_get_market_pricing_response.py +201 -0
  193. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_metrics_response.py +123 -0
  194. lightning_sdk/lightning_cloud/openapi/models/v1_get_temp_bucket_credentials_response.py +201 -0
  195. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +41 -15
  196. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +27 -1
  197. lightning_sdk/lightning_cloud/openapi/models/v1_group_node_metrics.py +1215 -0
  198. lightning_sdk/lightning_cloud/openapi/models/v1_group_pod_metrics.py +1241 -0
  199. lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_request.py +177 -0
  200. lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_response.py +149 -0
  201. lightning_sdk/lightning_cloud/openapi/models/v1_guest_user.py +201 -0
  202. lightning_sdk/lightning_cloud/openapi/models/v1_incident.py +565 -0
  203. lightning_sdk/lightning_cloud/openapi/models/v1_incident_detail.py +149 -0
  204. lightning_sdk/lightning_cloud/openapi/models/v1_incident_event.py +591 -0
  205. lightning_sdk/lightning_cloud/openapi/models/v1_incident_message.py +253 -0
  206. lightning_sdk/lightning_cloud/openapi/models/v1_incident_severity.py +105 -0
  207. lightning_sdk/lightning_cloud/openapi/models/v1_incident_type.py +108 -0
  208. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +53 -1
  209. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +27 -1
  210. lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_indexes.py +149 -0
  211. lightning_sdk/lightning_cloud/openapi/models/v1_kai_scheduler_queue_metrics.py +627 -0
  212. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_aws_config.py +279 -0
  213. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +253 -0
  214. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +107 -3
  215. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template.py +357 -0
  216. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template_property.py +227 -0
  217. lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +29 -3
  218. lightning_sdk/lightning_cloud/openapi/models/v1_license.py +227 -0
  219. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_elastic_cluster_v1.py +97 -0
  220. lightning_sdk/lightning_cloud/openapi/models/v1_list_aggregated_pod_metrics_response.py +123 -0
  221. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metric_timestamps_response.py +123 -0
  222. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metrics_response.py +123 -0
  223. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_metrics_response.py +123 -0
  224. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_user_metrics_response.py +123 -0
  225. lightning_sdk/lightning_cloud/openapi/models/v1_list_conversation_message_actions_response.py +123 -0
  226. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_metrics_response.py +123 -0
  227. lightning_sdk/lightning_cloud/openapi/models/v1_list_group_pod_metrics_response.py +123 -0
  228. lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_events_response.py +123 -0
  229. lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_messages_response.py +149 -0
  230. lightning_sdk/lightning_cloud/openapi/models/v1_list_incidents_response.py +149 -0
  231. lightning_sdk/lightning_cloud/openapi/models/v1_list_kai_scheduler_queues_metrics_response.py +123 -0
  232. lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_templates_response.py +123 -0
  233. lightning_sdk/lightning_cloud/openapi/models/{v1_list_product_licenses_response.py → v1_list_license_response.py} +16 -16
  234. lightning_sdk/lightning_cloud/openapi/models/v1_list_machines_response.py +149 -0
  235. lightning_sdk/lightning_cloud/openapi/models/v1_list_platform_notifications_response.py +123 -0
  236. lightning_sdk/lightning_cloud/openapi/models/v1_list_schedule_runs_response.py +123 -0
  237. lightning_sdk/lightning_cloud/openapi/models/v1_list_storage_transfers_response.py +123 -0
  238. lightning_sdk/lightning_cloud/openapi/models/v1_lustre_data_connection.py +149 -0
  239. lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +617 -0
  240. lightning_sdk/lightning_cloud/openapi/models/v1_machine_direct_v1.py +123 -0
  241. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +1 -27
  242. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +27 -1
  243. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +29 -3
  244. lightning_sdk/lightning_cloud/openapi/models/v1_market_price.py +149 -0
  245. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +53 -1
  246. lightning_sdk/lightning_cloud/openapi/models/v1_message_action.py +279 -0
  247. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +27 -1
  248. lightning_sdk/lightning_cloud/openapi/models/v1_model_metrics.py +175 -0
  249. lightning_sdk/lightning_cloud/openapi/models/v1_namespace_metrics.py +591 -0
  250. lightning_sdk/lightning_cloud/openapi/models/v1_namespace_user_metrics.py +435 -0
  251. lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py +29 -3
  252. lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +361 -23
  253. lightning_sdk/lightning_cloud/openapi/models/v1_notification_type.py +1 -0
  254. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +53 -1
  255. lightning_sdk/lightning_cloud/openapi/models/v1_pause_storage_transfer_response.py +97 -0
  256. lightning_sdk/lightning_cloud/openapi/models/v1_platform_notification.py +279 -0
  257. lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +335 -23
  258. lightning_sdk/lightning_cloud/openapi/models/v1_project.py +27 -1
  259. lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +27 -1
  260. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +53 -1
  261. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +53 -1
  262. lightning_sdk/lightning_cloud/openapi/models/v1_project_tab.py +149 -0
  263. lightning_sdk/lightning_cloud/openapi/models/{v1_product_license_check_response.py → v1_purchase_annual_upsell_request.py} +23 -23
  264. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_response.py +123 -0
  265. lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +227 -0
  266. lightning_sdk/lightning_cloud/openapi/models/v1_render_kubernetes_template_response.py +123 -0
  267. lightning_sdk/lightning_cloud/openapi/models/v1_report_deployment_routing_telemetry_response.py +97 -0
  268. lightning_sdk/lightning_cloud/openapi/models/v1_required_balance_reason.py +107 -0
  269. lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_request.py +97 -0
  270. lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_response.py +123 -0
  271. lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +1 -27
  272. lightning_sdk/lightning_cloud/openapi/models/v1_resume_storage_transfer_response.py +97 -0
  273. lightning_sdk/lightning_cloud/openapi/models/v1_routing_telemetry.py +79 -1
  274. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +1 -0
  275. lightning_sdk/lightning_cloud/openapi/models/v1_schedule_run.py +357 -0
  276. lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_severity.py +104 -0
  277. lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_type.py +104 -0
  278. lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +1 -0
  279. lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_type.py +1 -0
  280. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +201 -0
  281. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier_type.py +105 -0
  282. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +133 -3
  283. lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer.py +435 -0
  284. lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer_status.py +108 -0
  285. lightning_sdk/lightning_cloud/openapi/models/v1_token_login_request.py +123 -0
  286. lightning_sdk/lightning_cloud/openapi/models/v1_token_login_response.py +123 -0
  287. lightning_sdk/lightning_cloud/openapi/models/v1_token_owner_type.py +104 -0
  288. lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_instance_config_request.py +3 -81
  289. lightning_sdk/lightning_cloud/openapi/models/v1_update_project_tab_order_response.py +123 -0
  290. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +41 -15
  291. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +444 -600
  292. lightning_sdk/lightning_cloud/openapi/models/v1_validate_license_response.py +123 -0
  293. lightning_sdk/lightning_cloud/openapi/models/v1_validate_storage_transfer_response.py +123 -0
  294. lightning_sdk/lightning_cloud/openapi/models/v1_voltage_park_direct_v1.py +29 -3
  295. lightning_sdk/lightning_cloud/rest_client.py +48 -45
  296. lightning_sdk/lightning_cloud/utils/data_connection.py +51 -1
  297. lightning_sdk/llm/llm.py +175 -56
  298. lightning_sdk/llm/public_assistants.py +44 -7
  299. lightning_sdk/machine.py +21 -2
  300. lightning_sdk/mmt/base.py +7 -0
  301. lightning_sdk/mmt/mmt.py +11 -3
  302. lightning_sdk/mmt/v1.py +3 -1
  303. lightning_sdk/mmt/v2.py +4 -0
  304. lightning_sdk/owner.py +2 -1
  305. lightning_sdk/pipeline/steps.py +6 -0
  306. lightning_sdk/plugin.py +6 -1
  307. lightning_sdk/studio.py +294 -53
  308. lightning_sdk/teamspace.py +167 -7
  309. lightning_sdk/user.py +19 -1
  310. lightning_sdk/utils/config.py +179 -0
  311. lightning_sdk/utils/license.py +13 -0
  312. lightning_sdk/utils/logging.py +79 -0
  313. lightning_sdk/utils/names.py +1179 -0
  314. lightning_sdk/utils/progress.py +283 -0
  315. lightning_sdk/utils/resolve.py +82 -7
  316. {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/METADATA +2 -1
  317. {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/RECORD +328 -169
  318. {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/entry_points.txt +1 -0
  319. lightning_sdk/lightning_cloud/openapi/models/v1_product_license.py +0 -435
  320. lightning_sdk/services/license.py +0 -363
  321. /lightning_sdk/cli/{deploy → legacy}/__init__.py +0 -0
  322. /lightning_sdk/cli/{ai_hub.py → legacy/ai_hub.py} +0 -0
  323. /lightning_sdk/cli/{docker_cli.py → legacy/docker_cli.py} +0 -0
  324. /lightning_sdk/cli/{exceptions.py → legacy/exceptions.py} +0 -0
  325. /lightning_sdk/cli/{run.py → legacy/run.py} +0 -0
  326. /lightning_sdk/cli/{studios_menu.py → legacy/studios_menu.py} +0 -0
  327. /lightning_sdk/cli/{coloring.py → utils/coloring.py} +0 -0
  328. {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/LICENSE +0 -0
  329. {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/WHEEL +0 -0
  330. {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/top_level.txt +0 -0
@@ -1,69 +1,38 @@
1
+ """New Lightning CLI entrypoint with organized command groups."""
2
+
3
+ import os
1
4
  import sys
2
- import traceback
3
- from types import TracebackType
4
- from typing import Type
5
5
 
6
6
  import click
7
- from rich.console import Console, Group
8
- from rich.panel import Panel
9
- from rich.syntax import Syntax
10
- from rich.text import Text
11
7
 
12
8
  from lightning_sdk import __version__
13
9
  from lightning_sdk.api.studio_api import _cloud_url
14
- from lightning_sdk.cli.ai_hub import aihub
15
- from lightning_sdk.cli.coloring import CustomHelpFormatter
16
- from lightning_sdk.cli.configure import configure
17
- from lightning_sdk.cli.connect import connect
18
- from lightning_sdk.cli.create import create
19
- from lightning_sdk.cli.delete import delete
20
- from lightning_sdk.cli.deploy.serve import deploy
21
- from lightning_sdk.cli.docker_cli import dockerize
22
- from lightning_sdk.cli.download import download
23
- from lightning_sdk.cli.generate import generate
24
- from lightning_sdk.cli.inspection import inspect
25
- from lightning_sdk.cli.list import list_cli
26
- from lightning_sdk.cli.open import open
27
- from lightning_sdk.cli.run import run
28
- from lightning_sdk.cli.start import start
29
- from lightning_sdk.cli.stop import stop
30
- from lightning_sdk.cli.switch import switch
31
- from lightning_sdk.cli.upload import upload
32
- from lightning_sdk.constants import _LIGHTNING_DEBUG
33
- from lightning_sdk.lightning_cloud.login import Auth
34
-
35
-
36
- def _notify_exception(exception_type: Type[BaseException], value: BaseException, tb: TracebackType) -> None:
37
- """CLI won't show tracebacks, just print the exception message."""
38
- console = Console()
39
-
40
- message = str(value.args[0]) if value.args else str(value) or "An unknown error occurred"
41
10
 
42
- error_text = Text()
43
- error_text.append(f"{exception_type.__name__}: ", style="bold red")
44
- error_text.append(message, style="white")
45
-
46
- renderables = [error_text]
47
-
48
- if _LIGHTNING_DEBUG:
49
- tb_text = "".join(traceback.format_exception(exception_type, value, tb))
50
- renderables.append(Text("\n\nFull traceback:\n", style="bold yellow"))
51
- renderables.append(Syntax(tb_text, "python", theme="monokai", line_numbers=False, word_wrap=True))
52
- else:
53
- renderables.append(Text("\n\n🐞 To view the full traceback, set: LIGHTNING_DEBUG=1"))
54
-
55
- renderables.append(Text("\n📘 Need help? Run: lightning <command> --help", style="cyan"))
56
-
57
- console.print(Panel(Group(*renderables), title="⚡ Lightning CLI Error", border_style="red"))
11
+ # Import legacy groups directly from groups.py
12
+ from lightning_sdk.cli.groups import (
13
+ base_studio,
14
+ config,
15
+ # job,
16
+ license,
17
+ # mmt,
18
+ studio,
19
+ vm,
20
+ )
21
+ from lightning_sdk.cli.utils import CustomHelpFormatter
22
+ from lightning_sdk.cli.utils.logging import CommandLoggingGroup, logging_excepthook
23
+ from lightning_sdk.lightning_cloud.login import Auth
58
24
 
59
25
 
60
- @click.group(name="lightning", help="Command line interface (CLI) to interact with/manage Lightning AI Studios.")
26
+ @click.group(
27
+ name="lightning",
28
+ help="Command line interface (CLI) to interact with/manage Lightning AI Studios.",
29
+ cls=CommandLoggingGroup,
30
+ )
61
31
  @click.version_option(__version__, message="Lightning CLI version %(version)s")
62
32
  def main_cli() -> None:
63
- sys.excepthook = _notify_exception
33
+ sys.excepthook = logging_excepthook
64
34
 
65
35
 
66
- # colorful help messages
67
36
  main_cli.context_class.formatter_class = CustomHelpFormatter
68
37
 
69
38
 
@@ -86,24 +55,55 @@ def logout() -> None:
86
55
  auth.clear()
87
56
 
88
57
 
89
- # additional commands
90
- main_cli.add_command(aihub)
91
- main_cli.add_command(configure)
92
- main_cli.add_command(connect)
93
- main_cli.add_command(create)
94
- main_cli.add_command(delete)
95
- main_cli.add_command(dockerize)
96
- main_cli.add_command(download)
97
- main_cli.add_command(generate)
98
- main_cli.add_command(inspect)
99
- main_cli.add_command(list_cli)
100
- main_cli.add_command(run)
101
- main_cli.add_command(deploy)
102
- main_cli.add_command(start)
103
- main_cli.add_command(stop)
104
- main_cli.add_command(switch)
105
- main_cli.add_command(upload)
106
- main_cli.add_command(open)
58
+ # Add new command groups
59
+ main_cli.add_command(config)
60
+ # main_cli.add_command(job)
61
+ # main_cli.add_command(mmt)
62
+ main_cli.add_command(studio)
63
+ main_cli.add_command(vm)
64
+ main_cli.add_command(base_studio)
65
+ main_cli.add_command(license)
66
+
67
+ if os.environ.get("LIGHTNING_EXPERIMENTAL_CLI_ONLY", "0") != "1":
68
+ #### LEGACY COMMANDS ####
69
+ # these commands are currently supported for backwards compatibility, but will potentially be removed in the future.
70
+ # they've grown pretty wild and provide a very inconsistent UX.
71
+ from lightning_sdk.cli.legacy.ai_hub import aihub
72
+ from lightning_sdk.cli.legacy.configure import configure
73
+ from lightning_sdk.cli.legacy.connect import connect
74
+ from lightning_sdk.cli.legacy.create import create
75
+ from lightning_sdk.cli.legacy.delete import delete
76
+ from lightning_sdk.cli.legacy.deploy.serve import deploy
77
+ from lightning_sdk.cli.legacy.docker_cli import dockerize
78
+ from lightning_sdk.cli.legacy.download import download
79
+ from lightning_sdk.cli.legacy.generate import generate
80
+ from lightning_sdk.cli.legacy.inspection import inspect
81
+ from lightning_sdk.cli.legacy.list import list_cli
82
+ from lightning_sdk.cli.legacy.open import open as open_cmd
83
+ from lightning_sdk.cli.legacy.run import run
84
+ from lightning_sdk.cli.legacy.start import start
85
+ from lightning_sdk.cli.legacy.stop import stop
86
+ from lightning_sdk.cli.legacy.switch import switch
87
+ from lightning_sdk.cli.legacy.upload import upload
88
+
89
+ # Add old command groups
90
+ main_cli.add_command(aihub)
91
+ main_cli.add_command(configure)
92
+ main_cli.add_command(connect)
93
+ main_cli.add_command(create)
94
+ main_cli.add_command(delete)
95
+ main_cli.add_command(deploy)
96
+ main_cli.add_command(dockerize)
97
+ main_cli.add_command(download)
98
+ main_cli.add_command(generate)
99
+ main_cli.add_command(inspect)
100
+ main_cli.add_command(list_cli)
101
+ main_cli.add_command(open_cmd)
102
+ main_cli.add_command(run)
103
+ main_cli.add_command(start)
104
+ main_cli.add_command(stop)
105
+ main_cli.add_command(switch)
106
+ main_cli.add_command(upload)
107
107
 
108
108
 
109
109
  if __name__ == "__main__":
@@ -0,0 +1,56 @@
1
+ """CLI groups for organizing Lightning SDK commands."""
2
+
3
+ import click
4
+
5
+ from lightning_sdk.cli.base_studio import register_commands as register_base_studio_commands
6
+ from lightning_sdk.cli.config import register_commands as register_config_commands
7
+ from lightning_sdk.cli.job import register_commands as register_job_commands
8
+ from lightning_sdk.cli.license import register_commands as register_license_commands
9
+ from lightning_sdk.cli.mmt import register_commands as register_mmt_commands
10
+ from lightning_sdk.cli.studio import register_commands as register_studio_commands
11
+ from lightning_sdk.cli.vm import register_commands as register_vm_commands
12
+
13
+
14
+ @click.group(name="studio")
15
+ def studio() -> None:
16
+ """Manage Lightning AI Studios."""
17
+
18
+
19
+ @click.group(name="job")
20
+ def job() -> None:
21
+ """Manage Lightning AI Jobs."""
22
+
23
+
24
+ @click.group(name="mmt")
25
+ def mmt() -> None:
26
+ """Manage Lightning AI Multi-Machine Training (MMT)."""
27
+
28
+
29
+ @click.group(name="config")
30
+ def config() -> None:
31
+ """Manage Lightning SDK and CLI configuration."""
32
+
33
+
34
+ @click.group(name="vm")
35
+ def vm() -> None:
36
+ """Manage Lightning AI VMs."""
37
+
38
+
39
+ @click.group(name="base-studio")
40
+ def base_studio() -> None:
41
+ """Manage Lightning AI Base Studios."""
42
+
43
+
44
+ @click.group(name="license")
45
+ def license() -> None: # noqa: A001
46
+ """Manage Lightning AI Product Licenses."""
47
+
48
+
49
+ # Register config commands with the main config group
50
+ register_job_commands(job)
51
+ register_mmt_commands(mmt)
52
+ register_studio_commands(studio)
53
+ register_config_commands(config)
54
+ register_vm_commands(vm)
55
+ register_base_studio_commands(base_studio)
56
+ register_license_commands(license)
@@ -0,0 +1,7 @@
1
+ """Job CLI commands."""
2
+
3
+ import click
4
+
5
+
6
+ def register_commands(group: click.Group) -> None:
7
+ """Register job commands with the given group."""
@@ -1,12 +1,12 @@
1
1
  import sys
2
- from typing import List
2
+ from typing import List, Optional
3
3
 
4
4
  from rich.console import Console
5
5
  from simple_term_menu import TerminalMenu
6
6
 
7
7
  from lightning_sdk import Teamspace
8
8
  from lightning_sdk.api.cloud_account_api import CloudAccountApi
9
- from lightning_sdk.lightning_cloud.openapi import Externalv1Cluster, V1ProjectClusterBinding
9
+ from lightning_sdk.lightning_cloud.openapi import V1ClusterType, V1ProjectClusterBinding
10
10
 
11
11
 
12
12
  class _ClustersMenu:
@@ -22,18 +22,21 @@ class _ClustersMenu:
22
22
 
23
23
  return TerminalMenu(cluster_ids, title=title, clear_menu_on_exit=True)
24
24
 
25
- def _resolve_cluster(self, teamspace: Teamspace) -> Externalv1Cluster:
25
+ def _resolve_cluster(self, teamspace: Teamspace) -> Optional[str]:
26
26
  selected_cluster_id = None
27
27
  console = Console()
28
28
  try:
29
- selected_cluster_id = self._get_cluster_from_interactive_menu(
29
+ selected_cluster_id = teamspace.default_cloud_account or self._get_cluster_from_interactive_menu(
30
30
  possible_clusters=teamspace.cloud_account_objs
31
31
  )
32
+
32
33
  cloud_account_api = CloudAccountApi()
33
34
 
34
- return cloud_account_api.get_cloud_account(
35
- cluster_id=selected_cluster_id, org_id=teamspace.owner.id, project_id=teamspace.id
35
+ resolved_cluster_obj = cloud_account_api.get_cloud_account(
36
+ cloud_account_id=selected_cluster_id, org_id=teamspace.owner.id, teamspace_id=teamspace.id
36
37
  )
38
+
39
+ return None if resolved_cluster_obj.spec.cluster_type == V1ClusterType.GLOBAL else resolved_cluster_obj.id
37
40
  except KeyboardInterrupt:
38
41
  console.print("Operation cancelled by user")
39
42
  sys.exit(0)
@@ -7,8 +7,8 @@ from typing import Optional, Union
7
7
  import click
8
8
  from rich.console import Console
9
9
 
10
- from lightning_sdk.cli.generate import _generate_ssh_config
11
- from lightning_sdk.cli.studios_menu import _StudiosMenu
10
+ from lightning_sdk.cli.legacy.generate import _generate_ssh_config
11
+ from lightning_sdk.cli.legacy.studios_menu import _StudiosMenu
12
12
  from lightning_sdk.lightning_cloud.login import Auth
13
13
 
14
14
 
@@ -4,8 +4,8 @@ from typing import Optional
4
4
 
5
5
  import click
6
6
 
7
- from lightning_sdk.cli.configure import _configure_ssh_internal
8
- from lightning_sdk.cli.studios_menu import _StudiosMenu
7
+ from lightning_sdk.cli.legacy.configure import _configure_ssh_internal
8
+ from lightning_sdk.cli.legacy.studios_menu import _StudiosMenu
9
9
 
10
10
 
11
11
  @click.group(name="connect")
@@ -7,10 +7,8 @@ import click
7
7
  from rich.console import Console
8
8
 
9
9
  from lightning_sdk import Machine, Studio
10
- from lightning_sdk.api.cloud_account_api import CloudAccountApi
11
- from lightning_sdk.cli.teamspace_menu import _TeamspacesMenu
10
+ from lightning_sdk.cli.utils.teamspace_selection import TeamspacesMenu
12
11
  from lightning_sdk.machine import CloudProvider
13
- from lightning_sdk.utils.resolve import _resolve_deprecated_provider
14
12
 
15
13
  _MACHINE_VALUES = tuple(
16
14
  [machine.name for machine in Machine.__dict__.values() if isinstance(machine, Machine) and machine._include_in_cli]
@@ -80,16 +78,8 @@ def studio(
80
78
 
81
79
  NAME: the name of the studio to create. If already present within teamspace, will add a random suffix.
82
80
  """
83
- menu = _TeamspacesMenu()
84
- teamspace_resolved = menu._resolve_teamspace(teamspace)
85
-
86
- cloud_provider = str(_resolve_deprecated_provider(cloud_provider, provider))
87
-
88
- if cloud_provider is not None:
89
- cloud_account_api = CloudAccountApi()
90
- cloud_account = cloud_account_api.resolve_cloud_account(
91
- teamspace_resolved.id, cloud_account, cloud_provider, teamspace_resolved.default_cloud_account
92
- )
81
+ menu = TeamspacesMenu()
82
+ teamspace_resolved = menu(teamspace)
93
83
 
94
84
  # default cloud account to current studios cloud account if run from studio
95
85
  # else it will fall back to teamspace default in the backend
@@ -107,11 +97,19 @@ def studio(
107
97
  console.print(f"Studio with name {name} already exists. Using {new_name} instead.")
108
98
  name = new_name
109
99
 
110
- studio = Studio(name=name, teamspace=teamspace_resolved, cloud_account=cloud_account, create_ok=True)
100
+ studio = Studio(
101
+ name=name,
102
+ teamspace=teamspace_resolved,
103
+ cloud_account=cloud_account,
104
+ create_ok=True,
105
+ cloud_provider=cloud_provider,
106
+ provider=provider,
107
+ )
111
108
 
112
109
  console.print(f"Created Studio {studio.name}.")
113
110
 
114
111
  if start is not None:
115
112
  start_machine = getattr(Machine, start, start)
113
+ Studio.show_progress = True
116
114
  studio.start(start_machine)
117
115
  console.print(f"Started Studio {studio.name} on machine {start}")
@@ -3,9 +3,9 @@ from typing import Optional
3
3
  import click
4
4
  from rich.console import Console
5
5
 
6
- from lightning_sdk.cli.exceptions import StudioCliError
7
- from lightning_sdk.cli.job_and_mmt_action import _JobAndMMTAction
8
- from lightning_sdk.cli.teamspace_menu import _TeamspacesMenu
6
+ from lightning_sdk.cli.legacy.exceptions import StudioCliError
7
+ from lightning_sdk.cli.legacy.job_and_mmt_action import _JobAndMMTAction
8
+ from lightning_sdk.cli.utils.teamspace_selection import TeamspacesMenu
9
9
  from lightning_sdk.lightning_cloud.openapi.rest import ApiException
10
10
  from lightning_sdk.lit_container import LitContainer
11
11
  from lightning_sdk.studio import Studio
@@ -30,8 +30,8 @@ def delete() -> None:
30
30
  def container(name: str, teamspace: Optional[str] = None) -> None:
31
31
  """Delete the docker container NAME."""
32
32
  api = LitContainer()
33
- menu = _TeamspacesMenu()
34
- resolved_teamspace = menu._resolve_teamspace(teamspace=teamspace)
33
+ menu = TeamspacesMenu()
34
+ resolved_teamspace = menu(teamspace=teamspace)
35
35
  try:
36
36
  api.delete_container(name, resolved_teamspace.name, resolved_teamspace.owner.name)
37
37
  Console().print(f"Container {name} deleted successfully.")
File without changes
@@ -10,7 +10,7 @@ from rich.prompt import Confirm
10
10
 
11
11
  from lightning_sdk import Teamspace
12
12
  from lightning_sdk.api import UserApi
13
- from lightning_sdk.cli.teamspace_menu import _TeamspacesMenu
13
+ from lightning_sdk.cli.utils.teamspace_selection import TeamspacesMenu
14
14
  from lightning_sdk.lightning_cloud import env
15
15
  from lightning_sdk.lightning_cloud.login import Auth, AuthServer
16
16
  from lightning_sdk.lightning_cloud.openapi import V1CloudSpace
@@ -73,14 +73,13 @@ def authenticate(mode: _AuthMode, shall_confirm: bool = True) -> None:
73
73
 
74
74
  def select_teamspace(teamspace: Optional[str], org: Optional[str], user: Optional[str]) -> Teamspace:
75
75
  if teamspace is None:
76
- user = _get_authed_user()
77
- menu = _TeamspacesMenu()
78
- possible_teamspaces = menu._get_possible_teamspaces(user)
76
+ menu = TeamspacesMenu()
77
+ possible_teamspaces = menu._get_possible_teamspaces(_get_authed_user())
79
78
  if len(possible_teamspaces) == 1:
80
79
  name = next(iter(possible_teamspaces.values()))["name"]
81
80
  return Teamspace(name=name, org=org, user=user)
82
81
 
83
- return menu._resolve_teamspace(teamspace)
82
+ return menu(teamspace)
84
83
 
85
84
  return _resolve_teamspace(teamspace=teamspace, org=org, user=user)
86
85
 
@@ -180,7 +179,7 @@ class _Onboarding:
180
179
  return select_teamspace(teamspace, org, user)
181
180
 
182
181
  # Run only when user hasn't completed onboarding yet.
183
- menu = _TeamspacesMenu()
182
+ menu = TeamspacesMenu()
184
183
  self._wait_user_onboarding()
185
184
  # Onboarding has been completed - user already selected organization if they could
186
185
  possible_teamspaces = menu._get_possible_teamspaces(self.user)
@@ -12,8 +12,14 @@ from rich.prompt import Confirm
12
12
  from rich.syntax import Syntax
13
13
 
14
14
  from lightning_sdk import Machine
15
- from lightning_sdk.cli.deploy._auth import _AuthMode, _Onboarding, authenticate, poll_verified_status, select_teamspace
16
- from lightning_sdk.cli.upload import (
15
+ from lightning_sdk.cli.legacy.deploy._auth import (
16
+ _AuthMode,
17
+ _Onboarding,
18
+ authenticate,
19
+ poll_verified_status,
20
+ select_teamspace,
21
+ )
22
+ from lightning_sdk.cli.legacy.upload import (
17
23
  _dump_current_upload_state,
18
24
  _resolve_previous_upload_state,
19
25
  _single_file_upload,
@@ -15,14 +15,15 @@ from rich.prompt import Confirm
15
15
  from lightning_sdk import Machine, Teamspace
16
16
  from lightning_sdk.api.lit_container_api import LitContainerApi
17
17
  from lightning_sdk.api.utils import _get_registry_url
18
- from lightning_sdk.cli.deploy._auth import (
18
+ from lightning_sdk.cli.legacy.clusters_menu import _ClustersMenu
19
+ from lightning_sdk.cli.legacy.deploy._auth import (
19
20
  _AuthMode,
20
21
  _Onboarding,
21
22
  authenticate,
22
23
  poll_verified_status,
23
24
  select_teamspace,
24
25
  )
25
- from lightning_sdk.cli.deploy.devbox import _handle_devbox
26
+ from lightning_sdk.cli.legacy.deploy.devbox import _handle_devbox
26
27
  from lightning_sdk.serve import _LitServeDeployer
27
28
 
28
29
  _MACHINE_VALUES = tuple(
@@ -377,18 +378,24 @@ def _handle_cloud(
377
378
  else:
378
379
  resolved_teamspace = select_teamspace(teamspace, org, user)
379
380
 
381
+ lightning_containers_cloud_account = cloud_account
382
+ if not cloud_account:
383
+ clusters_menu = _ClustersMenu()
384
+ lightning_containers_cloud_account = clusters_menu._resolve_cluster(resolved_teamspace)
385
+ cloud_account = resolved_teamspace.default_cloud_account
386
+
380
387
  # list containers to create the project if it doesn't exist
381
388
  lit_cr = LitContainerApi()
382
- lit_cr.list_containers(resolved_teamspace.id, cloud_account=cloud_account)
389
+ lit_cr.list_containers(resolved_teamspace.id, cloud_account=lightning_containers_cloud_account)
383
390
 
384
391
  registry_url = _get_registry_url()
385
392
  container_basename = repository.split("/")[-1]
386
393
  image = (
387
- f"{registry_url}/lit-container{f'-{cloud_account}' if cloud_account is not None else ''}/"
388
- f"{resolved_teamspace.owner.name}/{resolved_teamspace.name}/{container_basename}"
394
+ f"{registry_url}/lit-container"
395
+ + (f"-{lightning_containers_cloud_account}" if lightning_containers_cloud_account is not None else "")
396
+ + f"/{resolved_teamspace.owner.name}/{resolved_teamspace.name}/{container_basename}"
389
397
  )
390
398
 
391
- cloud_account = cloud_account or resolved_teamspace.default_cloud_account
392
399
  if from_onboarding:
393
400
  thread = Thread(
394
401
  target=ls_deployer.run_on_cloud,
@@ -411,13 +418,17 @@ def _handle_cloud(
411
418
  )
412
419
  thread.start()
413
420
  console.print("🚀 Deployment started")
414
- if not _upload_container(console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, cloud_account):
421
+ if not _upload_container(
422
+ console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, lightning_containers_cloud_account
423
+ ):
415
424
  thread.join()
416
425
  return
417
426
  thread.join()
418
427
  return
419
428
 
420
- if not _upload_container(console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, cloud_account):
429
+ if not _upload_container(
430
+ console, ls_deployer, repository, tag, resolved_teamspace, lit_cr, lightning_containers_cloud_account
431
+ ):
421
432
  return
422
433
 
423
434
  deployment_status = ls_deployer.run_on_cloud(
@@ -9,12 +9,12 @@ from rich.console import Console
9
9
 
10
10
  from lightning_sdk.api.license_api import LicenseApi
11
11
  from lightning_sdk.api.lit_container_api import LitContainerApi
12
- from lightning_sdk.cli.exceptions import StudioCliError
13
- from lightning_sdk.cli.studios_menu import _StudiosMenu
14
- from lightning_sdk.cli.teamspace_menu import _TeamspacesMenu
12
+ from lightning_sdk.cli.legacy.exceptions import StudioCliError
13
+ from lightning_sdk.cli.legacy.studios_menu import _StudiosMenu
14
+ from lightning_sdk.cli.utils.teamspace_selection import TeamspacesMenu
15
15
  from lightning_sdk.models import download_model
16
16
  from lightning_sdk.studio import Studio
17
- from lightning_sdk.utils.resolve import _get_authed_user, skip_studio_init
17
+ from lightning_sdk.utils.resolve import _get_authed_user
18
18
 
19
19
 
20
20
  def _expand_remote_path(path: str) -> str:
@@ -110,8 +110,8 @@ def folder(
110
110
  path = _expand_remote_path(path)
111
111
  resolved_downloader = _resolve_studio(studio)
112
112
  elif teamspace:
113
- menu = _TeamspacesMenu()
114
- resolved_downloader = menu._resolve_teamspace(teamspace)
113
+ menu = TeamspacesMenu()
114
+ resolved_downloader = menu(teamspace)
115
115
  else:
116
116
  raise ValueError("Either --studio or --teamspace must be provided")
117
117
 
@@ -136,7 +136,7 @@ def folder(
136
136
  "--studio",
137
137
  default=None,
138
138
  help=(
139
- "The name of the studio to upload to. "
139
+ "The name of the studio to download from. "
140
140
  "Will show a menu with user's owned studios for selection if not specified. "
141
141
  "If provided, should be in the form of <TEAMSPACE-NAME>/<STUDIO-NAME> where the names are case-sensitive. "
142
142
  "The teamspace and studio names can be regular expressions to match, "
@@ -173,8 +173,8 @@ def file(path: str = "", studio: Optional[str] = None, teamspace: Optional[str]
173
173
  if studio:
174
174
  resolved_downloader = _resolve_studio(studio)
175
175
  elif teamspace:
176
- menu = _TeamspacesMenu()
177
- resolved_downloader = menu._resolve_teamspace(teamspace)
176
+ menu = TeamspacesMenu()
177
+ resolved_downloader = menu(teamspace)
178
178
  else:
179
179
  raise ValueError("Either --studio or --teamspace must be provided")
180
180
 
@@ -214,8 +214,8 @@ def download_container(
214
214
  CONTAINER: The name of the container to download.
215
215
  """
216
216
  console = Console()
217
- menu = _TeamspacesMenu()
218
- resolved_teamspace = menu._resolve_teamspace(teamspace)
217
+ menu = TeamspacesMenu()
218
+ resolved_teamspace = menu(teamspace)
219
219
  with console.status("Downloading container..."):
220
220
  api = LitContainerApi()
221
221
  api.download_container(container, resolved_teamspace, tag, cloud_account)
@@ -242,7 +242,7 @@ def _resolve_studio(studio: Optional[str]) -> Studio:
242
242
  and (re.match(studio_name, st["name"]) or studio_name in st["name"]),
243
243
  possible_studios,
244
244
  )
245
- if not possible_studios:
245
+ if not len(possible_studios):
246
246
  raise ValueError(
247
247
  f"Could not find Studio like '{studio}', please consider update your filtering pattern."
248
248
  )
@@ -256,12 +256,11 @@ def _resolve_studio(studio: Optional[str]) -> Studio:
256
256
  # give user friendlier error message
257
257
  except Exception as e:
258
258
  raise StudioCliError(
259
- f"Could not find the given Studio {studio} to upload files to. "
259
+ f"Could not find the given Studio {studio} to download files from. "
260
260
  "Please contact Lightning AI directly to resolve this issue."
261
261
  ) from e
262
262
 
263
- with skip_studio_init():
264
- return Studio(**selected_studio)
263
+ return Studio(**selected_studio)
265
264
 
266
265
 
267
266
  @download.command(name="licenses")