lightning-sdk 0.1.2__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 (521) 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 +174 -83
  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 -47
  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 +314 -43
  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 +3115 -895
  42. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +908 -141
  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 +1658 -159
  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 -590
  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 +304 -41
  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/agents_id_body.py +643 -0
  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_body.py +175 -0
  74. lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +175 -0
  75. lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versions_body.py +409 -0
  76. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
  77. lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +84 -6
  78. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
  79. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
  80. lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
  81. lightning_sdk/lightning_cloud/openapi/models/clusters_id_body.py +27 -1
  82. lightning_sdk/lightning_cloud/openapi/models/create.py +157 -1
  83. lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +383 -0
  84. lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +565 -0
  85. lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +513 -0
  86. lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +43 -17
  87. lightning_sdk/lightning_cloud/openapi/models/experiment_name_variant_name_body.py +123 -0
  88. lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +107 -1
  89. lightning_sdk/lightning_cloud/openapi/models/externalv1_lightningapp_instance.py +27 -1
  90. lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
  91. lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +131 -1
  92. lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
  93. lightning_sdk/lightning_cloud/openapi/models/id_complete_body.py +175 -0
  94. lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
  95. lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
  96. lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
  97. lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
  98. lightning_sdk/lightning_cloud/openapi/models/id_fork_body.py +31 -31
  99. lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +175 -0
  100. lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
  101. lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
  102. lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
  103. lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
  104. lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
  105. lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
  106. lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +175 -0
  107. lightning_sdk/lightning_cloud/openapi/models/id_uploads_body1.py +175 -0
  108. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
  109. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
  110. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
  111. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
  112. lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
  113. lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
  114. lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
  115. lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
  116. lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
  117. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
  118. lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
  119. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
  120. lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
  121. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
  122. lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
  123. lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
  124. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
  125. lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
  126. lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
  127. lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
  128. lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +181 -51
  129. lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
  130. lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +79 -1
  131. lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
  132. lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
  133. lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
  134. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
  135. lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
  136. lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
  137. lightning_sdk/lightning_cloud/openapi/models/project_id_serviceexecution_body.py +175 -0
  138. lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
  139. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
  140. lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
  141. lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
  142. lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
  143. lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
  144. lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +331 -0
  145. lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
  146. lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
  147. lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
  148. lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
  149. lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
  150. lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
  151. lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
  152. lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
  153. lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
  154. lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
  155. lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
  156. lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
  157. lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
  158. lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
  159. lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
  160. lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
  161. lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
  162. lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
  163. lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +157 -1
  164. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
  165. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
  166. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
  167. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
  168. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
  169. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
  170. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
  171. lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
  172. lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
  173. lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
  174. lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
  175. lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
  176. lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
  177. lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
  178. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +162 -6
  179. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +383 -0
  180. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version_status.py +105 -0
  181. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
  182. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
  183. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
  184. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +669 -0
  185. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version_publication.py +201 -0
  186. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
  187. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
  188. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
  189. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
  190. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
  191. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
  192. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
  193. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
  194. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
  195. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
  196. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
  197. lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +131 -1
  198. lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
  199. lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
  200. lightning_sdk/lightning_cloud/openapi/models/v1_complete_upload_service_execution_artifact_response.py +97 -0
  201. lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
  202. lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
  203. lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
  204. lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
  205. lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
  206. lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
  207. lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
  208. lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
  209. lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
  210. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
  211. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
  212. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
  213. lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
  214. lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
  215. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
  216. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
  217. lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
  218. lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
  219. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
  220. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_version_publication_response.py +97 -0
  221. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_version_response.py +97 -0
  222. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
  223. lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
  224. lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
  225. lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
  226. lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
  227. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
  228. lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
  229. lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
  230. lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
  231. lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
  232. lightning_sdk/lightning_cloud/openapi/models/v1_delete_service_execution_response.py +97 -0
  233. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
  234. lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
  235. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +227 -0
  236. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
  237. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
  238. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
  239. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
  240. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
  241. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
  242. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +105 -0
  243. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
  244. lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_deployment_strategy.py} +39 -39
  245. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
  246. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
  247. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
  248. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
  249. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
  250. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
  251. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
  252. lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
  253. lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
  254. lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
  255. lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
  256. lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
  257. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
  258. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
  259. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
  260. lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
  261. lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
  262. lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
  263. lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
  264. lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
  265. lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +279 -0
  266. lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +131 -1
  267. lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
  268. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
  269. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
  270. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
  271. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
  272. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
  273. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
  274. lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
  275. lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
  276. lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
  277. lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
  278. lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
  279. lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
  280. lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
  281. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
  282. lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
  283. lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
  284. lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
  285. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
  286. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
  287. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
  288. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
  289. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
  290. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
  291. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
  292. lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +175 -0
  293. lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
  294. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
  295. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
  296. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
  297. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
  298. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +163 -3
  299. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
  300. lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
  301. lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
  302. lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
  303. lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
  304. lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
  305. lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
  306. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +697 -0
  307. lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
  308. lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
  309. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
  310. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
  311. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
  312. lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
  313. lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
  314. lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
  315. lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
  316. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
  317. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
  318. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
  319. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
  320. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
  321. lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
  322. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
  323. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
  324. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
  325. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_version_publications_response.py +123 -0
  326. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_versions_response.py +123 -0
  327. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
  328. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
  329. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
  330. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
  331. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
  332. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
  333. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
  334. lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
  335. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
  336. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
  337. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
  338. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
  339. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
  340. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
  341. lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
  342. lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
  343. lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
  344. lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
  345. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
  346. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
  347. lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
  348. lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
  349. lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
  350. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
  351. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
  352. lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
  353. lightning_sdk/lightning_cloud/openapi/models/v1_list_service_executions_response.py +123 -0
  354. lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
  355. lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
  356. lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
  357. lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
  358. lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
  359. lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
  360. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
  361. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
  362. lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
  363. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
  364. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
  365. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
  366. lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
  367. lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
  368. lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
  369. lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
  370. lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
  371. lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
  372. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
  373. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
  374. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
  375. lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
  376. lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
  377. lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
  378. lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
  379. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
  380. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
  381. lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_multi_machine_job_event_type.py} +9 -9
  382. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
  383. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
  384. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
  385. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
  386. lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
  387. lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
  388. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
  389. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
  390. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
  391. lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
  392. lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
  393. lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
  394. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
  395. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
  396. lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
  397. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
  398. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
  399. lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
  400. lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
  401. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
  402. lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
  403. lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
  404. lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
  405. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
  406. lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
  407. lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
  408. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
  409. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
  410. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
  411. lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +123 -0
  412. lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
  413. lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
  414. lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
  415. lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
  416. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
  417. lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
  418. lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
  419. lightning_sdk/lightning_cloud/openapi/models/v1_search_users_response.py +6 -6
  420. lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
  421. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_secret_type.py} +10 -9
  422. lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
  423. lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
  424. lightning_sdk/lightning_cloud/openapi/models/{v1_update_cluster_response.py → v1_service_artifact.py} +54 -54
  425. lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +383 -0
  426. lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
  427. lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
  428. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
  429. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
  430. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
  431. lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
  432. lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
  433. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
  434. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
  435. lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
  436. lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
  437. lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
  438. lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
  439. lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
  440. lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
  441. lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +53 -1
  442. lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
  443. lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
  444. lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
  445. lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
  446. lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
  447. lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
  448. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
  449. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
  450. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
  451. lightning_sdk/lightning_cloud/openapi/models/v1_upload_service_execution_artifact_parts_response.py +123 -0
  452. lightning_sdk/lightning_cloud/openapi/models/v1_upload_service_execution_artifact_response.py +149 -0
  453. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
  454. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
  455. lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
  456. lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
  457. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1030 -302
  458. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
  459. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
  460. lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
  461. lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
  462. lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
  463. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
  464. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
  465. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
  466. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
  467. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
  468. lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
  469. lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
  470. lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
  471. lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
  472. lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
  473. lightning_sdk/lightning_cloud/openapi/models/versions_id_body.py +357 -0
  474. lightning_sdk/lightning_cloud/rest_client.py +49 -23
  475. lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
  476. lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
  477. lightning_sdk/lightning_cloud/utils/data_connection.py +145 -7
  478. lightning_sdk/machine.py +17 -4
  479. lightning_sdk/mmt/__init__.py +4 -0
  480. lightning_sdk/mmt/base.py +288 -0
  481. lightning_sdk/mmt/mmt.py +282 -0
  482. lightning_sdk/mmt/v1.py +185 -0
  483. lightning_sdk/mmt/v2.py +193 -0
  484. lightning_sdk/models.py +153 -0
  485. lightning_sdk/organization.py +1 -1
  486. lightning_sdk/plugin.py +207 -41
  487. lightning_sdk/services/__init__.py +5 -0
  488. lightning_sdk/services/file_endpoint.py +223 -0
  489. lightning_sdk/services/finetune/__init__.py +35 -0
  490. lightning_sdk/services/utilities.py +111 -0
  491. lightning_sdk/status.py +2 -1
  492. lightning_sdk/studio.py +90 -17
  493. lightning_sdk/teamspace.py +189 -11
  494. lightning_sdk/user.py +1 -1
  495. lightning_sdk/utils/__init__.py +0 -0
  496. lightning_sdk/utils/dynamic.py +61 -0
  497. lightning_sdk/utils/enum.py +116 -0
  498. lightning_sdk/{utils.py → utils/resolve.py} +41 -4
  499. lightning_sdk-0.1.46.dist-info/LICENSE +21 -0
  500. {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/METADATA +30 -4
  501. lightning_sdk-0.1.46.dist-info/RECORD +858 -0
  502. {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/WHEEL +1 -1
  503. lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
  504. lightning_sdk/lightning_cloud/openapi/models/assistants_id_body.py +0 -487
  505. lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
  506. lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
  507. lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
  508. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
  509. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
  510. lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
  511. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
  512. lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
  513. lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
  514. lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
  515. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
  516. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
  517. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
  518. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
  519. lightning_sdk-0.1.2.dist-info/RECORD +0 -550
  520. {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/entry_points.txt +0 -0
  521. {lightning_sdk-0.1.2.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,41 +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
- def _singlepart_upload(self) -> None:
96
- """Does a single part upload."""
97
- body = ProjectIdStorageBody(cluster_id=self.cluster_id, count=1, filename=self.remote_path)
98
- 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(
99
114
  body=body, project_id=self.teamspace_id
100
115
  )
101
116
 
102
- with open(self.local_path, "rb") as fd:
103
- reader_wrapper = CallbackIOWrapper(
104
- 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,
105
151
  )
152
+ except Exception:
153
+ return self._error_handling_upload(part=presigned_url.part_number, upload_id=upload_id)
106
154
 
107
- response = requests.put(resp.urls[0].url, data=reader_wrapper)
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)
160
+
161
+ response = requests.put(presigned_url.url, data=data)
108
162
  response.raise_for_status()
163
+ if self.progress_bar is not None:
164
+ self.progress_bar.update(len(data))
109
165
 
110
166
  etag = response.headers.get("ETag")
111
- completed = [V1CompleteUpload(etag=etag, part_number=resp.urls[0].part_number)]
167
+ return V1CompleteUpload(etag=etag, part_number=presigned_url.part_number)
112
168
 
113
- completed_body = StorageCompleteBody(
114
- cluster_id=self.cluster_id, filename=self.remote_path, parts=completed, upload_id=resp.upload_id
115
- )
116
- self.client.lightningapp_instance_service_complete_upload_project_artifact(
117
- 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,
118
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)
119
233
 
120
234
  def _multipart_upload(self, count: int) -> None:
121
235
  """Does a parallel multipart upload."""
122
- body = ProjectIdStorageBody(cluster_id=self.cluster_id, count=count, filename=self.remote_path)
123
- resp: V1UploadProjectArtifactResponse = self.client.lightningapp_instance_service_upload_project_artifact(
124
- 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,
125
242
  )
126
243
 
127
244
  # get indices for each batch, part numbers start at 1
@@ -129,16 +246,18 @@ class _FileUploader:
129
246
  list(range(i + 1, min(i + self.batch_size + 1, count + 1))) for i in range(0, count, self.batch_size)
130
247
  ]
131
248
 
132
- completed: List[V1CompleteUpload] = []
249
+ completed: List[V1CompletedPart] = []
133
250
  with ThreadPoolExecutor(self.max_workers) as p:
134
251
  for batch in batched_indices:
135
252
  completed.extend(self._process_upload_batch(executor=p, batch=batch, upload_id=resp.upload_id))
136
253
 
137
- completed_body = StorageCompleteBody(
138
- cluster_id=self.cluster_id, filename=self.remote_path, parts=completed, upload_id=resp.upload_id
139
- )
140
- self.client.lightningapp_instance_service_complete_upload_project_artifact(
141
- 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,
142
261
  )
143
262
 
144
263
  def _process_upload_batch(self, executor: ThreadPoolExecutor, batch: List[int], upload_id: str) -> None:
@@ -147,15 +266,19 @@ class _FileUploader:
147
266
  func = partial(self._handle_uploading_single_part, upload_id=upload_id)
148
267
  return executor.map(func, urls)
149
268
 
150
- 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]:
151
270
  """Requests urls for a batch of parts."""
152
- body = UploadsUploadIdBody(cluster_id=self.cluster_id, filename=self.remote_path, parts=parts)
153
- resp: V1UploadProjectArtifactPartsResponse = (
154
- 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,
155
278
  )
156
279
  return resp.urls
157
280
 
158
- 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:
159
282
  """Uploads a single part of a multipart upload including retires with backoff."""
160
283
  try:
161
284
  return self._handle_upload_presigned_url(
@@ -164,7 +287,7 @@ class _FileUploader:
164
287
  except Exception:
165
288
  return self._error_handling_upload(part=presigned_url.part_number, upload_id=upload_id)
166
289
 
167
- def _handle_upload_presigned_url(self, presigned_url: V1PresignedUrl) -> V1CompleteUpload:
290
+ def _handle_upload_presigned_url(self, presigned_url: V1SignedUrl) -> V1CompletedPart:
168
291
  """Straightforward uploads the part given a single url."""
169
292
  with open(self.local_path, "rb") as f:
170
293
  f.seek((int(presigned_url.part_number) - 1) * self.chunk_size)
@@ -173,13 +296,13 @@ class _FileUploader:
173
296
  response = requests.put(presigned_url.url, data=data)
174
297
  response.raise_for_status()
175
298
  if self.progress_bar is not None:
176
- self.progress_bar.update(self.chunk_size)
299
+ self.progress_bar.update(len(data))
177
300
 
178
301
  etag = response.headers.get("ETag")
179
- return V1CompleteUpload(etag=etag, part_number=presigned_url.part_number)
302
+ return V1CompletedPart(etag=etag, part_number=presigned_url.part_number)
180
303
 
181
304
  @backoff.on_exception(backoff.expo, (requests.exceptions.HTTPError), max_tries=10)
182
- def _error_handling_upload(self, part: int, upload_id: str) -> V1CompleteUpload:
305
+ def _error_handling_upload(self, part: int, upload_id: str) -> V1CompletedPart:
183
306
  """Retries uploading with re-requesting the url."""
184
307
  urls = self._request_urls(
185
308
  parts=[part],
@@ -199,19 +322,35 @@ class _DummyResponse:
199
322
 
200
323
 
201
324
  # TODO: This should really come from some kind of metadata service
202
- # TODO: Add trainium instances once feature flag is lifted
203
325
  _MACHINE_TO_COMPUTE_NAME: Dict[Machine, str] = {
326
+ Machine.CPU_SMALL: "m3.medium",
204
327
  Machine.CPU: "cpu-4",
205
- 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",
206
331
  Machine.T4: "g4dn.2xlarge",
207
332
  Machine.T4_X_4: "g4dn.12xlarge",
208
- Machine.V100: "p3.2xlarge",
209
- 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",
210
336
  Machine.A10G: "g5.8xlarge",
211
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",
212
342
  Machine.A100_X_8: "p4d.24xlarge",
343
+ Machine.H100_X_8: "p5.48xlarge",
344
+ Machine.H200_X_8: "p5e.48xlarge",
213
345
  }
214
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
+
215
354
  _COMPUTE_NAME_TO_MACHINE: Dict[str, Machine] = {v: k for k, v in _MACHINE_TO_COMPUTE_NAME.items()}
216
355
 
217
356
  _DEFAULT_CLOUD_URL = "https://lightning.ai:443"
@@ -223,5 +362,248 @@ def _get_cloud_url() -> str:
223
362
  return cloud_url
224
363
 
225
364
 
226
- def _sanitize_remote_path(path: str, studio_id: str) -> str:
365
+ def _sanitize_studio_remote_path(path: str, studio_id: str) -> str:
227
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)