lightning-sdk 0.1.3__py3-none-any.whl → 0.1.46__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 (498) hide show
  1. lightning_sdk/__init__.py +12 -2
  2. lightning_sdk/agents.py +46 -0
  3. lightning_sdk/ai_hub.py +185 -0
  4. lightning_sdk/api/__init__.py +4 -0
  5. lightning_sdk/api/agents_api.py +107 -0
  6. lightning_sdk/api/ai_hub_api.py +130 -0
  7. lightning_sdk/api/deployment_api.py +574 -0
  8. lightning_sdk/api/job_api.py +308 -0
  9. lightning_sdk/api/mmt_api.py +188 -0
  10. lightning_sdk/api/org_api.py +1 -3
  11. lightning_sdk/api/studio_api.py +172 -81
  12. lightning_sdk/api/teamspace_api.py +219 -20
  13. lightning_sdk/api/user_api.py +24 -9
  14. lightning_sdk/api/utils.py +429 -48
  15. lightning_sdk/cli/ai_hub.py +49 -0
  16. lightning_sdk/cli/download.py +132 -0
  17. lightning_sdk/cli/entrypoint.py +11 -3
  18. lightning_sdk/cli/run.py +206 -0
  19. lightning_sdk/cli/serve.py +218 -0
  20. lightning_sdk/cli/studios_menu.py +78 -0
  21. lightning_sdk/cli/upload.py +79 -89
  22. lightning_sdk/constants.py +29 -1
  23. lightning_sdk/deployment/__init__.py +25 -0
  24. lightning_sdk/deployment/deployment.py +389 -0
  25. lightning_sdk/helpers.py +49 -0
  26. lightning_sdk/job/__init__.py +5 -0
  27. lightning_sdk/job/base.py +295 -0
  28. lightning_sdk/job/job.py +266 -0
  29. lightning_sdk/job/v1.py +241 -0
  30. lightning_sdk/job/v2.py +193 -0
  31. lightning_sdk/job/work.py +72 -0
  32. lightning_sdk/lightning_cloud/__version__.py +1 -1
  33. lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
  34. lightning_sdk/lightning_cloud/env.py +1 -0
  35. lightning_sdk/lightning_cloud/login.py +12 -8
  36. lightning_sdk/lightning_cloud/openapi/__init__.py +288 -42
  37. lightning_sdk/lightning_cloud/openapi/api/__init__.py +10 -0
  38. lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py +141 -0
  39. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1075 -227
  40. lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +9 -1
  41. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +992 -233
  42. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +883 -120
  43. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +10 -5
  44. lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py +756 -0
  45. lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +422 -1
  46. lightning_sdk/lightning_cloud/openapi/api/experiments_service_api.py +242 -0
  47. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +674 -0
  48. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +3823 -0
  49. lightning_sdk/lightning_cloud/openapi/api/lightningapp_instance_service_api.py +158 -594
  50. lightning_sdk/lightning_cloud/openapi/api/lightningapp_v2_service_api.py +0 -1086
  51. lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +113 -0
  52. lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +1753 -0
  53. lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +242 -0
  54. lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
  55. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
  56. lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
  57. lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
  58. lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
  59. lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
  60. lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
  61. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
  62. lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
  63. lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
  64. lightning_sdk/lightning_cloud/openapi/models/__init__.py +278 -40
  65. lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py +149 -0
  66. lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +305 -0
  67. lightning_sdk/lightning_cloud/openapi/models/{assistants_id_body.py → agents_id_body.py} +201 -71
  68. lightning_sdk/lightning_cloud/openapi/models/app_id_works_body.py +149 -0
  69. lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py +123 -0
  70. lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py +107 -3
  71. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +1 -27
  72. lightning_sdk/lightning_cloud/openapi/models/{v1_get_cluster_health_response.py → captures_id_body.py} +16 -16
  73. lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +27 -1
  74. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
  75. lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +58 -6
  76. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
  77. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
  78. lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
  79. lightning_sdk/lightning_cloud/openapi/models/create.py +157 -1
  80. lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +383 -0
  81. lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +565 -0
  82. lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +513 -0
  83. lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +43 -17
  84. lightning_sdk/lightning_cloud/openapi/models/experiment_name_variant_name_body.py +123 -0
  85. lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +107 -1
  86. lightning_sdk/lightning_cloud/openapi/models/externalv1_lightningapp_instance.py +27 -1
  87. lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
  88. lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +79 -1
  89. lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
  90. lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
  91. lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
  92. lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
  93. lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
  94. lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
  95. lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
  96. lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
  97. lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
  98. lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
  99. lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
  100. lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +52 -26
  101. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
  102. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
  103. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
  104. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
  105. lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
  106. lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
  107. lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
  108. lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
  109. lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
  110. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
  111. lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
  112. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
  113. lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
  114. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
  115. lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
  116. lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
  117. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
  118. lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
  119. lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
  120. lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
  121. lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +159 -55
  122. lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
  123. lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +27 -1
  124. lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
  125. lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
  126. lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
  127. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
  128. lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
  129. lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
  130. lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
  131. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
  132. lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
  133. lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
  134. lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
  135. lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
  136. lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +43 -43
  137. lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
  138. lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
  139. lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
  140. lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
  141. lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
  142. lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
  143. lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
  144. lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
  145. lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
  146. lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
  147. lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
  148. lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
  149. lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
  150. lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
  151. lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
  152. lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
  153. lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
  154. lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
  155. lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +131 -1
  156. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
  157. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
  158. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
  159. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
  160. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
  161. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
  162. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
  163. lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
  164. lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
  165. lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
  166. lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
  167. lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
  168. lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
  169. lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
  170. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +136 -6
  171. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +27 -1
  172. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
  173. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
  174. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
  175. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +53 -1
  176. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
  177. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
  178. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
  179. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
  180. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
  181. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
  182. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
  183. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
  184. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
  185. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
  186. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
  187. lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +79 -1
  188. lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
  189. lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
  190. lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
  191. lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
  192. lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
  193. lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
  194. lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
  195. lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
  196. lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
  197. lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
  198. lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
  199. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
  200. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
  201. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
  202. lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
  203. lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
  204. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
  205. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
  206. lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
  207. lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
  208. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
  209. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
  210. lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
  211. lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
  212. lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
  213. lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
  214. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
  215. lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
  216. lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
  217. lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
  218. lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
  219. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
  220. lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
  221. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +227 -0
  222. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
  223. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
  224. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
  225. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
  226. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
  227. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
  228. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +105 -0
  229. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
  230. lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_deployment_strategy.py} +39 -39
  231. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
  232. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
  233. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
  234. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
  235. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
  236. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
  237. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
  238. lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
  239. lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
  240. lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
  241. lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
  242. lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
  243. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
  244. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
  245. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
  246. lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
  247. lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
  248. lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
  249. lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
  250. lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
  251. lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +79 -1
  252. lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
  253. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
  254. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
  255. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
  256. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
  257. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
  258. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
  259. lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
  260. lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
  261. lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
  262. lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
  263. lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
  264. lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
  265. lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
  266. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
  267. lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
  268. lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
  269. lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
  270. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
  271. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
  272. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
  273. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
  274. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
  275. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
  276. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
  277. lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +67 -15
  278. lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
  279. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
  280. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
  281. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
  282. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
  283. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +163 -3
  284. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
  285. lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
  286. lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
  287. lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
  288. lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
  289. lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
  290. lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
  291. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +697 -0
  292. lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
  293. lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
  294. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
  295. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
  296. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
  297. lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
  298. lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
  299. lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
  300. lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
  301. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
  302. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
  303. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
  304. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
  305. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
  306. lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
  307. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
  308. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
  309. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
  310. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
  311. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
  312. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
  313. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
  314. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
  315. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
  316. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
  317. lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
  318. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
  319. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
  320. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
  321. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
  322. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
  323. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
  324. lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
  325. lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
  326. lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
  327. lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
  328. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
  329. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
  330. lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
  331. lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
  332. lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
  333. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
  334. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
  335. lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
  336. lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
  337. lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
  338. lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
  339. lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
  340. lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
  341. lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
  342. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
  343. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
  344. lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
  345. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
  346. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
  347. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
  348. lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
  349. lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
  350. lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
  351. lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
  352. lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
  353. lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
  354. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
  355. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
  356. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
  357. lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
  358. lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
  359. lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
  360. lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
  361. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
  362. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
  363. lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_multi_machine_job_event_type.py} +9 -9
  364. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
  365. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
  366. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
  367. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
  368. lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
  369. lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
  370. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
  371. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
  372. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
  373. lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
  374. lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
  375. lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
  376. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
  377. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
  378. lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
  379. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
  380. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
  381. lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
  382. lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
  383. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
  384. lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
  385. lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
  386. lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
  387. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
  388. lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
  389. lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
  390. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
  391. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
  392. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
  393. lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +123 -0
  394. lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
  395. lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
  396. lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
  397. lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
  398. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
  399. lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
  400. lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
  401. lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
  402. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_secret_type.py} +10 -9
  403. lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
  404. lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
  405. lightning_sdk/lightning_cloud/openapi/models/v1_service_artifact.py +201 -0
  406. lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +43 -43
  407. lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
  408. lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
  409. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
  410. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
  411. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
  412. lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
  413. lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
  414. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
  415. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
  416. lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
  417. lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
  418. lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
  419. lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
  420. lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
  421. lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
  422. lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +27 -1
  423. lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
  424. lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
  425. lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
  426. lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
  427. lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
  428. lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
  429. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
  430. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
  431. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
  432. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
  433. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
  434. lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
  435. lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
  436. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1006 -330
  437. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
  438. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
  439. lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
  440. lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
  441. lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
  442. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
  443. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
  444. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
  445. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
  446. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
  447. lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
  448. lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
  449. lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
  450. lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
  451. lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
  452. lightning_sdk/lightning_cloud/rest_client.py +47 -23
  453. lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
  454. lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
  455. lightning_sdk/lightning_cloud/utils/data_connection.py +145 -7
  456. lightning_sdk/machine.py +17 -4
  457. lightning_sdk/mmt/__init__.py +4 -0
  458. lightning_sdk/mmt/base.py +288 -0
  459. lightning_sdk/mmt/mmt.py +282 -0
  460. lightning_sdk/mmt/v1.py +185 -0
  461. lightning_sdk/mmt/v2.py +193 -0
  462. lightning_sdk/models.py +153 -0
  463. lightning_sdk/organization.py +1 -1
  464. lightning_sdk/plugin.py +207 -41
  465. lightning_sdk/services/__init__.py +2 -1
  466. lightning_sdk/services/file_endpoint.py +116 -213
  467. lightning_sdk/services/finetune/__init__.py +13 -15
  468. lightning_sdk/services/utilities.py +99 -26
  469. lightning_sdk/status.py +2 -1
  470. lightning_sdk/studio.py +90 -17
  471. lightning_sdk/teamspace.py +189 -11
  472. lightning_sdk/user.py +1 -1
  473. lightning_sdk/utils/__init__.py +0 -0
  474. lightning_sdk/utils/dynamic.py +61 -0
  475. lightning_sdk/utils/enum.py +116 -0
  476. lightning_sdk/{utils.py → utils/resolve.py} +41 -4
  477. lightning_sdk-0.1.46.dist-info/LICENSE +21 -0
  478. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/METADATA +30 -4
  479. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/RECORD +482 -204
  480. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/WHEEL +1 -1
  481. lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
  482. lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
  483. lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
  484. lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
  485. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
  486. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
  487. lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
  488. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
  489. lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
  490. lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
  491. lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
  492. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
  493. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
  494. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
  495. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
  496. lightning_sdk/services/uploader.py +0 -123
  497. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/entry_points.txt +0 -0
  498. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/top_level.txt +0 -0
@@ -1,23 +1,42 @@
1
+ import concurrent.futures
2
+ import errno
1
3
  import math
2
4
  import os
5
+ import re
3
6
  from concurrent.futures import ThreadPoolExecutor
4
7
  from functools import partial
5
- from typing import Dict, List
8
+ from pathlib import Path
9
+ from typing import Any, Dict, List, Optional, Tuple, Union
6
10
 
7
11
  import backoff
8
12
  import requests
9
- from tqdm import tqdm
10
- from tqdm.utils import CallbackIOWrapper
13
+ from tqdm.auto import tqdm
11
14
 
15
+ from lightning_sdk.constants import __GLOBAL_LIGHTNING_UNIQUE_IDS_STORE__, _LIGHTNING_DEBUG
12
16
  from lightning_sdk.lightning_cloud.openapi import (
17
+ CloudSpaceServiceApi,
18
+ Externalv1LightningappInstance,
19
+ ModelsStoreApi,
13
20
  ProjectIdStorageBody,
14
21
  StorageCompleteBody,
22
+ UploadIdCompleteBody,
23
+ UploadIdPartsBody,
15
24
  UploadsUploadIdBody,
25
+ V1CompletedPart,
16
26
  V1CompleteUpload,
17
27
  V1PresignedUrl,
28
+ V1SignedUrl,
18
29
  V1UploadProjectArtifactPartsResponse,
19
30
  V1UploadProjectArtifactResponse,
31
+ VersionUploadsBody,
20
32
  )
33
+ from lightning_sdk.lightning_cloud.openapi.models.v1_model_version_archive import V1ModelVersionArchive
34
+
35
+ try:
36
+ from lightning_sdk.lightning_cloud.openapi import AppsIdBody1 as AppsIdBody
37
+ except ImportError:
38
+ from lightning_sdk.lightning_cloud.openapi import AppsIdBody
39
+ from lightning_sdk.lightning_cloud.openapi.rest import ApiException
21
40
  from lightning_sdk.lightning_cloud.rest_client import LightningClient
22
41
  from lightning_sdk.machine import Machine
23
42
 
@@ -48,20 +67,19 @@ class _FileUploader:
48
67
  def __init__(
49
68
  self,
50
69
  client: LightningClient,
51
- studio_id: str,
52
70
  teamspace_id: str,
53
- cluster_id: str,
71
+ cloud_account: str,
54
72
  file_path: str,
55
73
  remote_path: str,
56
74
  progress_bar: bool,
57
75
  ) -> None:
58
76
  self.client = client
59
77
  self.teamspace_id = teamspace_id
60
- self.cluster_id = cluster_id
78
+ self.cloud_account = cloud_account
61
79
 
62
80
  self.local_path = file_path
63
81
 
64
- self.remote_path = _sanitize_remote_path(remote_path, studio_id)
82
+ self.remote_path = remote_path
65
83
  self.multipart_threshold = int(os.environ.get("LIGHTNING_MULTIPART_THRESHOLD", _MAX_SIZE_MULTI_PART_CHUNK))
66
84
  self.filesize = os.path.getsize(file_path)
67
85
  if progress_bar:
@@ -87,42 +105,140 @@ class _FileUploader:
87
105
  """
88
106
  count = 1 if self.filesize <= self.multipart_threshold else math.ceil(self.filesize / self.chunk_size)
89
107
 
90
- if count == 1:
91
- return self._singlepart_upload()
92
-
93
108
  return self._multipart_upload(count=count)
94
109
 
95
- @backoff.on_exception(backoff.expo, (requests.exceptions.HTTPError), max_tries=10)
96
- def _singlepart_upload(self) -> None:
97
- """Does a single part upload."""
98
- body = ProjectIdStorageBody(cluster_id=self.cluster_id, count=1, filename=self.remote_path)
99
- resp: V1UploadProjectArtifactResponse = self.client.lightningapp_instance_service_upload_project_artifact(
110
+ def _multipart_upload(self, count: int) -> None:
111
+ """Does a parallel multipart upload."""
112
+ body = ProjectIdStorageBody(cluster_id=self.cloud_account, filename=self.remote_path)
113
+ resp: V1UploadProjectArtifactResponse = self.client.storage_service_upload_project_artifact(
100
114
  body=body, project_id=self.teamspace_id
101
115
  )
102
116
 
103
- with open(self.local_path, "rb") as fd:
104
- reader_wrapper = CallbackIOWrapper(
105
- self.progress_bar.update if self.progress_bar is not None else lambda x: None, fd, "read"
117
+ # get indices for each batch, part numbers start at 1
118
+ batched_indices = [
119
+ list(range(i + 1, min(i + self.batch_size + 1, count + 1))) for i in range(0, count, self.batch_size)
120
+ ]
121
+
122
+ completed: List[V1CompleteUpload] = []
123
+ with ThreadPoolExecutor(self.max_workers) as p:
124
+ for batch in batched_indices:
125
+ completed.extend(self._process_upload_batch(executor=p, batch=batch, upload_id=resp.upload_id))
126
+
127
+ completed_body = StorageCompleteBody(
128
+ cluster_id=self.cloud_account, filename=self.remote_path, parts=completed, upload_id=resp.upload_id
129
+ )
130
+ self.client.storage_service_complete_upload_project_artifact(body=completed_body, project_id=self.teamspace_id)
131
+
132
+ def _process_upload_batch(self, executor: ThreadPoolExecutor, batch: List[int], upload_id: str) -> None:
133
+ """Uploads a single batch of chunks in parallel."""
134
+ urls = self._request_urls(parts=batch, upload_id=upload_id)
135
+ func = partial(self._handle_uploading_single_part, upload_id=upload_id)
136
+ return executor.map(func, urls)
137
+
138
+ def _request_urls(self, parts: List[int], upload_id: str) -> List[V1PresignedUrl]:
139
+ """Requests urls for a batch of parts."""
140
+ body = UploadsUploadIdBody(cluster_id=self.cloud_account, filename=self.remote_path, parts=parts)
141
+ resp: V1UploadProjectArtifactPartsResponse = self.client.storage_service_upload_project_artifact_parts(
142
+ body, self.teamspace_id, upload_id
143
+ )
144
+ return resp.urls
145
+
146
+ def _handle_uploading_single_part(self, presigned_url: V1PresignedUrl, upload_id: str) -> V1CompleteUpload:
147
+ """Uploads a single part of a multipart upload including retires with backoff."""
148
+ try:
149
+ return self._handle_upload_presigned_url(
150
+ presigned_url=presigned_url,
106
151
  )
152
+ except Exception:
153
+ return self._error_handling_upload(part=presigned_url.part_number, upload_id=upload_id)
154
+
155
+ def _handle_upload_presigned_url(self, presigned_url: V1PresignedUrl) -> V1CompleteUpload:
156
+ """Straightforward uploads the part given a single url."""
157
+ with open(self.local_path, "rb") as f:
158
+ f.seek((int(presigned_url.part_number) - 1) * self.chunk_size)
159
+ data = f.read(self.chunk_size)
107
160
 
108
- response = requests.put(resp.urls[0].url, data=reader_wrapper)
161
+ response = requests.put(presigned_url.url, data=data)
109
162
  response.raise_for_status()
163
+ if self.progress_bar is not None:
164
+ self.progress_bar.update(len(data))
110
165
 
111
166
  etag = response.headers.get("ETag")
112
- completed = [V1CompleteUpload(etag=etag, part_number=resp.urls[0].part_number)]
167
+ return V1CompleteUpload(etag=etag, part_number=presigned_url.part_number)
113
168
 
114
- completed_body = StorageCompleteBody(
115
- cluster_id=self.cluster_id, filename=self.remote_path, parts=completed, upload_id=resp.upload_id
116
- )
117
- self.client.lightningapp_instance_service_complete_upload_project_artifact(
118
- body=completed_body, project_id=self.teamspace_id
169
+ @backoff.on_exception(backoff.expo, (requests.exceptions.HTTPError), max_tries=10)
170
+ def _error_handling_upload(self, part: int, upload_id: str) -> V1CompleteUpload:
171
+ """Retries uploading with re-requesting the url."""
172
+ urls = self._request_urls(
173
+ parts=[part],
174
+ upload_id=upload_id,
119
175
  )
176
+ if len(urls) != 1:
177
+ raise ValueError(
178
+ f"expected to get exactly one url, but got {len(urls)} for part {part} of {self.remote_path}"
179
+ )
180
+
181
+ return self._handle_upload_presigned_url(presigned_url=urls[0])
182
+
183
+
184
+ class _ModelFileUploader:
185
+ """A class handling the upload of model artifacts.
186
+
187
+ Supports parallelized multi-part uploads.
188
+
189
+ """
190
+
191
+ def __init__(
192
+ self,
193
+ client: LightningClient,
194
+ model_id: str,
195
+ version: str,
196
+ teamspace_id: str,
197
+ cloud_account: str,
198
+ file_path: str,
199
+ remote_path: str,
200
+ progress_bar: bool,
201
+ ) -> None:
202
+ self.client = client
203
+ self.model_id = model_id
204
+ self.version = version
205
+ self.teamspace_id = teamspace_id
206
+ self.local_path = file_path
207
+ self.remote_path = remote_path
208
+
209
+ self.api = ModelsStoreApi(client.api_client)
210
+ self.multipart_threshold = int(os.environ.get("LIGHTNING_MULTIPART_THRESHOLD", _MAX_SIZE_MULTI_PART_CHUNK))
211
+ self.filesize = os.path.getsize(file_path)
212
+ if progress_bar:
213
+ self.progress_bar = tqdm(
214
+ desc=f"Uploading {os.path.split(file_path)[1]}",
215
+ total=self.filesize,
216
+ unit="B",
217
+ unit_scale=True,
218
+ unit_divisor=1000,
219
+ position=1,
220
+ leave=False,
221
+ )
222
+ else:
223
+ self.progress_bar = None
224
+ self.chunk_size = int(os.environ.get("LIGHTNING_MULTI_PART_PART_SIZE", _MAX_SIZE_MULTI_PART_CHUNK))
225
+ assert self.chunk_size < _SIZE_LIMIT_SINGLE_PART
226
+ self.max_workers = int(os.environ.get("LIGHTNING_MULTI_PART_MAX_WORKERS", _MAX_WORKERS))
227
+ self.batch_size = int(os.environ.get("LIGHTNING_MULTI_PART_BATCH_SIZE", _MAX_BATCH_SIZE))
228
+
229
+ def __call__(self) -> None:
230
+ """Does the actual uploading."""
231
+ count = 1 if self.filesize <= self.multipart_threshold else math.ceil(self.filesize / self.chunk_size)
232
+ return self._multipart_upload(count=count)
120
233
 
121
234
  def _multipart_upload(self, count: int) -> None:
122
235
  """Does a parallel multipart upload."""
123
- body = ProjectIdStorageBody(cluster_id=self.cluster_id, count=count, filename=self.remote_path)
124
- resp: V1UploadProjectArtifactResponse = self.client.lightningapp_instance_service_upload_project_artifact(
125
- body=body, project_id=self.teamspace_id
236
+ body = VersionUploadsBody(filepath=self.remote_path)
237
+ resp = self.api.models_store_create_multi_part_upload(
238
+ body,
239
+ project_id=self.teamspace_id,
240
+ model_id=self.model_id,
241
+ version=self.version,
126
242
  )
127
243
 
128
244
  # get indices for each batch, part numbers start at 1
@@ -130,16 +246,18 @@ class _FileUploader:
130
246
  list(range(i + 1, min(i + self.batch_size + 1, count + 1))) for i in range(0, count, self.batch_size)
131
247
  ]
132
248
 
133
- completed: List[V1CompleteUpload] = []
249
+ completed: List[V1CompletedPart] = []
134
250
  with ThreadPoolExecutor(self.max_workers) as p:
135
251
  for batch in batched_indices:
136
252
  completed.extend(self._process_upload_batch(executor=p, batch=batch, upload_id=resp.upload_id))
137
253
 
138
- completed_body = StorageCompleteBody(
139
- cluster_id=self.cluster_id, filename=self.remote_path, parts=completed, upload_id=resp.upload_id
140
- )
141
- self.client.lightningapp_instance_service_complete_upload_project_artifact(
142
- body=completed_body, project_id=self.teamspace_id
254
+ completed_body = UploadIdCompleteBody(filepath=self.remote_path, parts=completed)
255
+ self.api.models_store_complete_multi_part_upload(
256
+ completed_body,
257
+ project_id=self.teamspace_id,
258
+ model_id=self.model_id,
259
+ version=self.version,
260
+ upload_id=resp.upload_id,
143
261
  )
144
262
 
145
263
  def _process_upload_batch(self, executor: ThreadPoolExecutor, batch: List[int], upload_id: str) -> None:
@@ -148,15 +266,19 @@ class _FileUploader:
148
266
  func = partial(self._handle_uploading_single_part, upload_id=upload_id)
149
267
  return executor.map(func, urls)
150
268
 
151
- def _request_urls(self, parts: List[int], upload_id: str) -> List[V1PresignedUrl]:
269
+ def _request_urls(self, parts: List[int], upload_id: str) -> List[V1SignedUrl]:
152
270
  """Requests urls for a batch of parts."""
153
- body = UploadsUploadIdBody(cluster_id=self.cluster_id, filename=self.remote_path, parts=parts)
154
- resp: V1UploadProjectArtifactPartsResponse = (
155
- self.client.lightningapp_instance_service_upload_project_artifact_parts(body, self.teamspace_id, upload_id)
271
+ body = UploadIdPartsBody(filepath=self.remote_path, parts=parts)
272
+ resp = self.api.models_store_get_model_file_upload_urls(
273
+ body,
274
+ project_id=self.teamspace_id,
275
+ model_id=self.model_id,
276
+ version=self.version,
277
+ upload_id=upload_id,
156
278
  )
157
279
  return resp.urls
158
280
 
159
- def _handle_uploading_single_part(self, presigned_url: V1PresignedUrl, upload_id: str) -> V1CompleteUpload:
281
+ def _handle_uploading_single_part(self, presigned_url: V1SignedUrl, upload_id: str) -> V1CompletedPart:
160
282
  """Uploads a single part of a multipart upload including retires with backoff."""
161
283
  try:
162
284
  return self._handle_upload_presigned_url(
@@ -165,7 +287,7 @@ class _FileUploader:
165
287
  except Exception:
166
288
  return self._error_handling_upload(part=presigned_url.part_number, upload_id=upload_id)
167
289
 
168
- def _handle_upload_presigned_url(self, presigned_url: V1PresignedUrl) -> V1CompleteUpload:
290
+ def _handle_upload_presigned_url(self, presigned_url: V1SignedUrl) -> V1CompletedPart:
169
291
  """Straightforward uploads the part given a single url."""
170
292
  with open(self.local_path, "rb") as f:
171
293
  f.seek((int(presigned_url.part_number) - 1) * self.chunk_size)
@@ -174,13 +296,13 @@ class _FileUploader:
174
296
  response = requests.put(presigned_url.url, data=data)
175
297
  response.raise_for_status()
176
298
  if self.progress_bar is not None:
177
- self.progress_bar.update(self.chunk_size)
299
+ self.progress_bar.update(len(data))
178
300
 
179
301
  etag = response.headers.get("ETag")
180
- return V1CompleteUpload(etag=etag, part_number=presigned_url.part_number)
302
+ return V1CompletedPart(etag=etag, part_number=presigned_url.part_number)
181
303
 
182
304
  @backoff.on_exception(backoff.expo, (requests.exceptions.HTTPError), max_tries=10)
183
- def _error_handling_upload(self, part: int, upload_id: str) -> V1CompleteUpload:
305
+ def _error_handling_upload(self, part: int, upload_id: str) -> V1CompletedPart:
184
306
  """Retries uploading with re-requesting the url."""
185
307
  urls = self._request_urls(
186
308
  parts=[part],
@@ -200,19 +322,35 @@ class _DummyResponse:
200
322
 
201
323
 
202
324
  # TODO: This should really come from some kind of metadata service
203
- # TODO: Add trainium instances once feature flag is lifted
204
325
  _MACHINE_TO_COMPUTE_NAME: Dict[Machine, str] = {
326
+ Machine.CPU_SMALL: "m3.medium",
205
327
  Machine.CPU: "cpu-4",
206
- Machine.DATA_PREP: "data-large-3000",
328
+ Machine.DATA_PREP: "data-large",
329
+ Machine.DATA_PREP_MAX: "data-max",
330
+ Machine.DATA_PREP_ULTRA: "data-ultra",
207
331
  Machine.T4: "g4dn.2xlarge",
208
332
  Machine.T4_X_4: "g4dn.12xlarge",
209
- Machine.V100: "p3.2xlarge",
210
- Machine.V100_X_4: "p3.8xlarge",
333
+ Machine.L4: "g6.4xlarge",
334
+ Machine.L4_X_4: "g6.12xlarge",
335
+ Machine.L4_X_8: "g6.48xlarge",
211
336
  Machine.A10G: "g5.8xlarge",
212
337
  Machine.A10G_X_4: "g5.12xlarge",
338
+ Machine.A10G_X_8: "g5.48xlarge",
339
+ Machine.L40S: "g6e.4xlarge",
340
+ Machine.L40S_X_4: "g6e.12xlarge",
341
+ Machine.L40S_X_8: "g6e.48xlarge",
213
342
  Machine.A100_X_8: "p4d.24xlarge",
343
+ Machine.H100_X_8: "p5.48xlarge",
344
+ Machine.H200_X_8: "p5e.48xlarge",
214
345
  }
215
346
 
347
+
348
+ def _machine_to_compute_name(machine: Union[Machine, str]) -> str:
349
+ if isinstance(machine, Machine):
350
+ return _MACHINE_TO_COMPUTE_NAME[machine]
351
+ return machine
352
+
353
+
216
354
  _COMPUTE_NAME_TO_MACHINE: Dict[str, Machine] = {v: k for k, v in _MACHINE_TO_COMPUTE_NAME.items()}
217
355
 
218
356
  _DEFAULT_CLOUD_URL = "https://lightning.ai:443"
@@ -224,5 +362,248 @@ def _get_cloud_url() -> str:
224
362
  return cloud_url
225
363
 
226
364
 
227
- def _sanitize_remote_path(path: str, studio_id: str) -> str:
365
+ def _sanitize_studio_remote_path(path: str, studio_id: str) -> str:
228
366
  return f"/cloudspaces/{studio_id}/code/content/{path.replace('/teamspace/studios/this_studio/', '')}"
367
+
368
+
369
+ _DOWNLOAD_REQUEST_CHUNK_SIZE = 10 * _BYTES_PER_MB
370
+ _DOWNLOAD_MIN_CHUNK_SIZE = 100 * _BYTES_PER_KB
371
+
372
+
373
+ class _FileDownloader:
374
+ def __init__(
375
+ self,
376
+ client: LightningClient,
377
+ model_id: str,
378
+ version: str,
379
+ teamspace_id: str,
380
+ remote_path: str,
381
+ file_path: str,
382
+ executor: ThreadPoolExecutor,
383
+ num_workers: int = 20,
384
+ progress_bar: Optional[tqdm] = None,
385
+ ) -> None:
386
+ self.api = ModelsStoreApi(client.api_client)
387
+ self.model_id = model_id
388
+ self.version = version
389
+ self.teamspace_id = teamspace_id
390
+ self.local_path = file_path
391
+ self.remote_path = remote_path
392
+ self.progress_bar = progress_bar
393
+ self.num_workers = num_workers
394
+ self._url = ""
395
+ self._size = 0
396
+ self.executor = executor
397
+
398
+ @backoff.on_exception(backoff.expo, ApiException, max_tries=10)
399
+ def refresh(self) -> None:
400
+ response = self.api.models_store_get_model_file_url(
401
+ project_id=self.teamspace_id, model_id=self.model_id, version=self.version, filepath=self.remote_path
402
+ )
403
+ self._url = response.url
404
+ self._size = int(response.size)
405
+
406
+ @property
407
+ def url(self) -> str:
408
+ return self._url
409
+
410
+ @property
411
+ def size(self) -> int:
412
+ return self._size
413
+
414
+ def update_progress(self, n: int) -> None:
415
+ if self.progress_bar is None:
416
+ return
417
+ self.progress_bar.update(n)
418
+
419
+ @backoff.on_exception(backoff.expo, (requests.exceptions.HTTPError), max_tries=10)
420
+ def _download_chunk(self, filename: str, start_end: Tuple[int]) -> None:
421
+ start, end = start_end
422
+ headers = {"Range": f"bytes={start}-{end}"}
423
+
424
+ with requests.get(self.url, headers=headers, stream=True) as response:
425
+ if response.status_code in [200, 206]:
426
+ with open(filename, "r+b") as f:
427
+ f.seek(start)
428
+ for chunk in response.iter_content(chunk_size=_DOWNLOAD_REQUEST_CHUNK_SIZE):
429
+ f.write(chunk)
430
+ self.update_progress(len(chunk)) # tqdm write is thread-safe
431
+ if response.status_code == 403: # Expired
432
+ self.refresh()
433
+ response.raise_for_status()
434
+
435
+ def _create_empty_file(self, filename: str, file_size: int) -> None:
436
+ if hasattr(os, "posix_fallocate"):
437
+ fd = os.open(filename, os.O_RDWR | os.O_CREAT)
438
+ if file_size > 0:
439
+ os.posix_fallocate(fd, 0, file_size)
440
+ os.close(fd)
441
+ else:
442
+ with open(filename, "wb") as f:
443
+ block_size = 1024 * 1024
444
+ for _ in range(file_size // block_size):
445
+ f.write(b"\x00" * block_size)
446
+
447
+ remaining_size = file_size % block_size
448
+
449
+ if remaining_size > 0:
450
+ f.write(b"\x00" * remaining_size)
451
+
452
+ def _multipart_download(self, filename: str, num_workers: int) -> None:
453
+ num_chunks = num_workers
454
+ chunk_size = math.ceil(self.size / num_chunks)
455
+
456
+ if chunk_size < _DOWNLOAD_MIN_CHUNK_SIZE:
457
+ num_chunks = math.ceil(self.size / _DOWNLOAD_MIN_CHUNK_SIZE)
458
+ chunk_size = _DOWNLOAD_MIN_CHUNK_SIZE
459
+
460
+ ranges = []
461
+ for part_number in range(num_chunks):
462
+ start = part_number * chunk_size
463
+ end = min(start + chunk_size - 1, self.size - 1)
464
+ ranges.append((start, end))
465
+
466
+ futures = [self.executor.submit(self._download_chunk, filename, r) for r in ranges]
467
+ concurrent.futures.wait(futures)
468
+
469
+ def download(self) -> None:
470
+ self.refresh()
471
+
472
+ tmp_filename = f"{self.local_path}.download"
473
+
474
+ try:
475
+ self._create_empty_file(tmp_filename, self.size)
476
+ except OSError as e:
477
+ if e.errno == errno.ENOSPC:
478
+ print(f"Tried to create {self.local_path} of size {self.size}, but no space left on device.")
479
+ else:
480
+ print(f"An error occurred while creating file {self.local_path}: {e}.")
481
+
482
+ os.remove(tmp_filename)
483
+ raise
484
+
485
+ if self.size == 0:
486
+ os.rename(tmp_filename, self.local_path)
487
+ return
488
+
489
+ try:
490
+ self._multipart_download(tmp_filename, self.num_workers)
491
+ except Exception as e:
492
+ print(f"An error occurred while downloading file {self.remote_path}: {e}.")
493
+
494
+ os.remove(tmp_filename)
495
+ raise
496
+
497
+ os.rename(tmp_filename, self.local_path)
498
+
499
+
500
+ def _get_model_version(client: LightningClient, teamspace_id: str, name: str, version: str) -> V1ModelVersionArchive:
501
+ api = ModelsStoreApi(client.api_client)
502
+ models = api.models_store_list_models(project_id=teamspace_id, name=name).models
503
+ if not models:
504
+ raise ValueError(f"Model `{name}` does not exist")
505
+ elif len(models) > 1:
506
+ raise ValueError("Multiple models with the same name found")
507
+ if version == "latest":
508
+ return models[0].latest_version
509
+ versions = api.models_store_list_model_versions(project_id=teamspace_id, model_id=models[0].id).versions
510
+ if not versions:
511
+ raise ValueError(f"Model `{name}` does not have any versions")
512
+ for ver in versions:
513
+ if ver.version == version:
514
+ return ver
515
+ raise ValueError(f"Model `{name}` does not have version `{version}`")
516
+
517
+
518
+ def _download_model_files(
519
+ client: LightningClient,
520
+ teamspace_name: str,
521
+ teamspace_owner_name: str,
522
+ name: str,
523
+ version: str,
524
+ download_dir: Path,
525
+ progress_bar: bool,
526
+ num_workers: int = 20,
527
+ ) -> List[str]:
528
+ api = ModelsStoreApi(client.api_client)
529
+ response = api.models_store_get_model_files(
530
+ project_name=teamspace_name, project_owner_name=teamspace_owner_name, name=name, version=version
531
+ )
532
+
533
+ pbar = None
534
+ if progress_bar:
535
+ pbar = tqdm(
536
+ desc=f"Downloading {version}",
537
+ unit="B",
538
+ total=float(response.size_bytes),
539
+ unit_scale=True,
540
+ unit_divisor=1000,
541
+ )
542
+
543
+ with ThreadPoolExecutor(max_workers=min(num_workers, len(response.filepaths))) as file_executor, ThreadPoolExecutor(
544
+ max_workers=num_workers
545
+ ) as part_executor:
546
+ futures = []
547
+
548
+ for filepath in response.filepaths:
549
+ local_file = download_dir / filepath
550
+ local_file.parent.mkdir(parents=True, exist_ok=True)
551
+
552
+ file_downloader = _FileDownloader(
553
+ client=client,
554
+ model_id=response.model_id,
555
+ version=response.version,
556
+ teamspace_id=response.project_id,
557
+ remote_path=filepath,
558
+ file_path=str(local_file),
559
+ num_workers=num_workers,
560
+ progress_bar=pbar,
561
+ executor=part_executor,
562
+ )
563
+
564
+ futures.append(file_executor.submit(file_downloader.download))
565
+
566
+ # wait for all threads
567
+ concurrent.futures.wait(futures)
568
+
569
+ return response.filepaths
570
+
571
+
572
+ def _create_app(
573
+ client: CloudSpaceServiceApi,
574
+ studio_id: str,
575
+ teamspace_id: str,
576
+ cloud_account: str,
577
+ plugin_type: str,
578
+ **other_arguments: Any,
579
+ ) -> Externalv1LightningappInstance:
580
+ """Creates an arbitrary app."""
581
+ from lightning_sdk.utils.resolve import _LIGHTNING_SERVICE_EXECUTION_ID_KEY
582
+
583
+ # Check if 'interruptible' is in the arguments and convert it to a string
584
+ if isinstance(other_arguments, dict) and "interruptible" in other_arguments:
585
+ other_arguments["spot"] = str(other_arguments["interruptible"]).lower()
586
+ del other_arguments["interruptible"]
587
+
588
+ body = AppsIdBody(
589
+ cluster_id=cloud_account,
590
+ plugin_arguments=other_arguments,
591
+ service_id=os.getenv(_LIGHTNING_SERVICE_EXECUTION_ID_KEY),
592
+ unique_id=__GLOBAL_LIGHTNING_UNIQUE_IDS_STORE__[studio_id],
593
+ )
594
+
595
+ resp = client.cloud_space_service_create_cloud_space_app_instance(
596
+ body=body, project_id=teamspace_id, cloudspace_id=studio_id, id=plugin_type
597
+ ).lightningappinstance
598
+
599
+ if _LIGHTNING_DEBUG:
600
+ print(f"Create App: {resp.id=} {teamspace_id=} {studio_id=} {cloud_account=}")
601
+
602
+ return resp
603
+
604
+
605
+ def remove_datetime_prefix(text: str) -> str:
606
+ # Use a regular expression to match the datetime pattern at the start of each line
607
+ # lines looks something like
608
+ # '[2025-01-08T14:15:03.797142418Z] ⚡ ~ echo Hello\n[2025-01-08T14:15:03.803077717Z] Hello\n'
609
+ return re.sub(r"^\[.*?\] ", "", text, flags=re.MULTILINE)
@@ -0,0 +1,49 @@
1
+ from typing import List, Optional
2
+
3
+ from lightning_sdk.ai_hub import AIHub
4
+ from lightning_sdk.cli.studios_menu import _StudiosMenu
5
+
6
+
7
+ class _AIHub(_StudiosMenu):
8
+ """Interact with Lightning Studio - AI Hub."""
9
+
10
+ def __init__(self) -> None:
11
+ self._hub = AIHub()
12
+
13
+ def api_info(self, api_id: str) -> dict:
14
+ """Get full API template info such as input details.
15
+
16
+ Example:
17
+ lightning aihub api_info [API_ID]
18
+
19
+ Args:
20
+ api_id: The ID of the API for which information is requested.
21
+ """
22
+ return self._hub.api_info(api_id)
23
+
24
+ def list_apis(self, search: Optional[str] = None) -> List[dict]:
25
+ """List API templates available in the AI Hub.
26
+
27
+ Args:
28
+ search: Search for API templates by name.
29
+ """
30
+ return self._hub.list_apis(search=search)
31
+
32
+ def deploy(
33
+ self,
34
+ api_id: str,
35
+ cloud_account: Optional[str] = None,
36
+ name: Optional[str] = None,
37
+ teamspace: Optional[str] = None,
38
+ org: Optional[str] = None,
39
+ ) -> dict:
40
+ """Deploy an API template from the AI Hub.
41
+
42
+ Args:
43
+ api_id: API template ID.
44
+ cloud_account: Cloud Account to deploy the API to. Defaults to user's default cloud account.
45
+ name: Name of the deployed API. Defaults to the name of the API template.
46
+ teamspace: Teamspace to deploy the API to. Defaults to user's default teamspace.
47
+ org: Organization to deploy the API to. Defaults to user's default organization.
48
+ """
49
+ return self._hub.run(api_id, cloud_account=cloud_account, name=name, teamspace=teamspace, org=org)