lightning-sdk 0.1.3__py3-none-any.whl → 0.1.47__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 (503) 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 +328 -0
  9. lightning_sdk/api/lit_registry_api.py +12 -0
  10. lightning_sdk/api/mmt_api.py +205 -0
  11. lightning_sdk/api/org_api.py +1 -3
  12. lightning_sdk/api/studio_api.py +172 -81
  13. lightning_sdk/api/teamspace_api.py +237 -20
  14. lightning_sdk/api/user_api.py +24 -9
  15. lightning_sdk/api/utils.py +429 -48
  16. lightning_sdk/cli/ai_hub.py +49 -0
  17. lightning_sdk/cli/download.py +132 -0
  18. lightning_sdk/cli/entrypoint.py +13 -3
  19. lightning_sdk/cli/list.py +54 -0
  20. lightning_sdk/cli/run.py +206 -0
  21. lightning_sdk/cli/serve.py +218 -0
  22. lightning_sdk/cli/studios_menu.py +78 -0
  23. lightning_sdk/cli/teamspace_menu.py +94 -0
  24. lightning_sdk/cli/upload.py +79 -89
  25. lightning_sdk/constants.py +29 -1
  26. lightning_sdk/deployment/__init__.py +25 -0
  27. lightning_sdk/deployment/deployment.py +389 -0
  28. lightning_sdk/helpers.py +49 -0
  29. lightning_sdk/job/__init__.py +5 -0
  30. lightning_sdk/job/base.py +359 -0
  31. lightning_sdk/job/job.py +291 -0
  32. lightning_sdk/job/v1.py +269 -0
  33. lightning_sdk/job/v2.py +221 -0
  34. lightning_sdk/job/work.py +81 -0
  35. lightning_sdk/lightning_cloud/__version__.py +1 -1
  36. lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
  37. lightning_sdk/lightning_cloud/env.py +1 -0
  38. lightning_sdk/lightning_cloud/login.py +12 -8
  39. lightning_sdk/lightning_cloud/openapi/__init__.py +289 -42
  40. lightning_sdk/lightning_cloud/openapi/api/__init__.py +10 -0
  41. lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py +141 -0
  42. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1075 -227
  43. lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +9 -1
  44. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +992 -233
  45. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +883 -120
  46. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +10 -5
  47. lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py +756 -0
  48. lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +422 -1
  49. lightning_sdk/lightning_cloud/openapi/api/experiments_service_api.py +242 -0
  50. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +674 -0
  51. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +3823 -0
  52. lightning_sdk/lightning_cloud/openapi/api/lightningapp_instance_service_api.py +158 -594
  53. lightning_sdk/lightning_cloud/openapi/api/lightningapp_v2_service_api.py +0 -1086
  54. lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +113 -0
  55. lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +1753 -0
  56. lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +343 -0
  57. lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
  58. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
  59. lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
  60. lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
  61. lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
  62. lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
  63. lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
  64. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
  65. lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
  66. lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
  67. lightning_sdk/lightning_cloud/openapi/models/__init__.py +279 -40
  68. lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py +149 -0
  69. lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +305 -0
  70. lightning_sdk/lightning_cloud/openapi/models/{assistants_id_body.py → agents_id_body.py} +201 -71
  71. lightning_sdk/lightning_cloud/openapi/models/app_id_works_body.py +149 -0
  72. lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py +123 -0
  73. lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py +107 -3
  74. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +1 -27
  75. lightning_sdk/lightning_cloud/openapi/models/{v1_get_cluster_health_response.py → captures_id_body.py} +16 -16
  76. lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +27 -1
  77. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
  78. lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +58 -6
  79. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
  80. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
  81. lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
  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 +79 -1
  92. lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
  93. lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
  94. lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
  95. lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
  96. lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
  97. lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
  98. lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
  99. lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
  100. lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
  101. lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
  102. lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
  103. lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +52 -26
  104. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
  105. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
  106. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
  107. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
  108. lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
  109. lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
  110. lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
  111. lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
  112. lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
  113. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
  114. lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
  115. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
  116. lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
  117. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
  118. lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
  119. lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
  120. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
  121. lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
  122. lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
  123. lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
  124. lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +159 -55
  125. lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
  126. lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +27 -1
  127. lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
  128. lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
  129. lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
  130. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
  131. lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
  132. lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
  133. lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
  134. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
  135. lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
  136. lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
  137. lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
  138. lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
  139. lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +43 -43
  140. lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
  141. lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
  142. lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
  143. lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
  144. lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
  145. lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
  146. lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
  147. lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
  148. lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
  149. lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
  150. lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
  151. lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
  152. lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
  153. lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
  154. lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
  155. lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
  156. lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
  157. lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
  158. lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +131 -1
  159. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
  160. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
  161. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
  162. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
  163. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
  164. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
  165. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
  166. lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
  167. lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
  168. lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
  169. lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
  170. lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
  171. lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
  172. lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
  173. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +136 -6
  174. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +27 -1
  175. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
  176. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
  177. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
  178. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +53 -1
  179. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
  180. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
  181. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
  182. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
  183. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
  184. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
  185. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
  186. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
  187. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
  188. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
  189. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
  190. lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +79 -1
  191. lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
  192. lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
  193. lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
  194. lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
  195. lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
  196. lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
  197. lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
  198. lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
  199. lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
  200. lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
  201. lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
  202. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
  203. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
  204. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
  205. lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
  206. lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
  207. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
  208. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
  209. lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
  210. lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
  211. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
  212. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
  213. lightning_sdk/lightning_cloud/openapi/models/v1_delete_container_response.py +97 -0
  214. lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
  215. lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
  216. lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
  217. lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
  218. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
  219. lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
  220. lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
  221. lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
  222. lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
  223. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
  224. lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
  225. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +253 -0
  226. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
  227. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
  228. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
  229. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
  230. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
  231. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
  232. lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_deployment_state.py} +11 -9
  233. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
  234. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_strategy.py +149 -0
  235. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
  236. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
  237. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
  238. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
  239. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
  240. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
  241. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
  242. lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
  243. lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
  244. lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
  245. lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
  246. lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
  247. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
  248. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
  249. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
  250. lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
  251. lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
  252. lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
  253. lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
  254. lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
  255. lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +79 -1
  256. lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
  257. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
  258. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
  259. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
  260. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
  261. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
  262. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
  263. lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
  264. lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
  265. lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
  266. lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
  267. lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
  268. lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
  269. lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
  270. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
  271. lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
  272. lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
  273. lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
  274. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
  275. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
  276. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
  277. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
  278. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
  279. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
  280. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
  281. lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +67 -15
  282. lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
  283. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
  284. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
  285. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
  286. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
  287. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +137 -3
  288. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
  289. lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
  290. lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
  291. lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
  292. lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
  293. lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
  294. lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
  295. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +723 -0
  296. lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
  297. lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
  298. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
  299. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
  300. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
  301. lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
  302. lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
  303. lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
  304. lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
  305. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
  306. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
  307. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
  308. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
  309. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
  310. lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
  311. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
  312. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
  313. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
  314. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
  315. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
  316. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
  317. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
  318. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
  319. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
  320. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
  321. lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
  322. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
  323. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
  324. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
  325. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
  326. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
  327. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
  328. lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
  329. lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
  330. lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
  331. lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
  332. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
  333. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
  334. lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
  335. lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
  336. lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
  337. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
  338. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
  339. lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
  340. lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
  341. lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
  342. lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
  343. lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
  344. lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
  345. lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
  346. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
  347. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
  348. lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
  349. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
  350. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
  351. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
  352. lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
  353. lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
  354. lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
  355. lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
  356. lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
  357. lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
  358. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
  359. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
  360. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
  361. lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
  362. lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
  363. lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
  364. lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
  365. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
  366. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
  367. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_multi_machine_job_event_type.py} +9 -9
  368. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
  369. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
  370. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
  371. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
  372. lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
  373. lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
  374. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
  375. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
  376. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
  377. lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
  378. lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
  379. lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
  380. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
  381. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
  382. lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
  383. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
  384. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
  385. lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
  386. lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
  387. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
  388. lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
  389. lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
  390. lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
  391. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
  392. lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
  393. lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
  394. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
  395. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
  396. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
  397. lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_resource_visibility.py} +37 -37
  398. lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
  399. lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
  400. lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
  401. lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
  402. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
  403. lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
  404. lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
  405. lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
  406. lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +105 -0
  407. lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
  408. lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
  409. lightning_sdk/lightning_cloud/openapi/models/v1_service_artifact.py +201 -0
  410. lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +43 -43
  411. lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
  412. lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
  413. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
  414. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
  415. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
  416. lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
  417. lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
  418. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
  419. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
  420. lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
  421. lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
  422. lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
  423. lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
  424. lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
  425. lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
  426. lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +27 -1
  427. lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
  428. lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
  429. lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
  430. lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
  431. lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
  432. lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
  433. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
  434. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
  435. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
  436. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
  437. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
  438. lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
  439. lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
  440. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1032 -330
  441. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
  442. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
  443. lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
  444. lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
  445. lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
  446. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
  447. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
  448. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
  449. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
  450. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
  451. lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
  452. lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
  453. lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
  454. lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
  455. lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
  456. lightning_sdk/lightning_cloud/rest_client.py +47 -23
  457. lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
  458. lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
  459. lightning_sdk/lightning_cloud/utils/data_connection.py +144 -7
  460. lightning_sdk/lit_registry.py +39 -0
  461. lightning_sdk/machine.py +21 -4
  462. lightning_sdk/mmt/__init__.py +4 -0
  463. lightning_sdk/mmt/base.py +326 -0
  464. lightning_sdk/mmt/mmt.py +306 -0
  465. lightning_sdk/mmt/v1.py +209 -0
  466. lightning_sdk/mmt/v2.py +221 -0
  467. lightning_sdk/models.py +153 -0
  468. lightning_sdk/organization.py +1 -1
  469. lightning_sdk/plugin.py +207 -41
  470. lightning_sdk/services/__init__.py +2 -1
  471. lightning_sdk/services/file_endpoint.py +116 -213
  472. lightning_sdk/services/finetune/__init__.py +13 -15
  473. lightning_sdk/services/utilities.py +99 -26
  474. lightning_sdk/status.py +11 -6
  475. lightning_sdk/studio.py +90 -17
  476. lightning_sdk/teamspace.py +240 -12
  477. lightning_sdk/user.py +1 -1
  478. lightning_sdk/utils/__init__.py +0 -0
  479. lightning_sdk/utils/dynamic.py +61 -0
  480. lightning_sdk/utils/enum.py +116 -0
  481. lightning_sdk/{utils.py → utils/resolve.py} +41 -4
  482. lightning_sdk-0.1.47.dist-info/LICENSE +21 -0
  483. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/METADATA +30 -4
  484. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/RECORD +487 -204
  485. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/WHEEL +1 -1
  486. lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
  487. lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
  488. lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
  489. lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
  490. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
  491. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
  492. lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
  493. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
  494. lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
  495. lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
  496. lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
  497. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
  498. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
  499. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
  500. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
  501. lightning_sdk/services/uploader.py +0 -123
  502. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/entry_points.txt +0 -0
  503. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/top_level.txt +0 -0
lightning_sdk/studio.py CHANGED
@@ -1,7 +1,9 @@
1
1
  import os
2
+ import warnings
2
3
  from typing import TYPE_CHECKING, Any, Mapping, Optional, Tuple, Union
3
4
 
4
5
  from lightning_sdk.api.studio_api import StudioApi
6
+ from lightning_sdk.api.utils import _machine_to_compute_name
5
7
  from lightning_sdk.constants import _LIGHTNING_DEBUG
6
8
  from lightning_sdk.machine import Machine
7
9
  from lightning_sdk.organization import Organization
@@ -9,7 +11,7 @@ from lightning_sdk.owner import Owner
9
11
  from lightning_sdk.status import Status
10
12
  from lightning_sdk.teamspace import Teamspace
11
13
  from lightning_sdk.user import User
12
- from lightning_sdk.utils import _resolve_teamspace, _setup_logger
14
+ from lightning_sdk.utils.resolve import _resolve_deprecated_cluster, _resolve_teamspace, _setup_logger
13
15
 
14
16
  if TYPE_CHECKING:
15
17
  from lightning_sdk.plugin import Plugin
@@ -28,10 +30,9 @@ class Studio:
28
30
  teamspace: the name of the teamspace the studio is contained by
29
31
  org: the name of the organization owning the :param`teamspace` in case it is owned by an org
30
32
  user: the name of the user owning the :param`teamspace` in case it is owned directly by a user instead of an org
31
- cluster: the name of the cluster, the studio should be created on.
33
+ cloud_account: the name of the cloud account, the studio should be created on.
32
34
  Doesn't matter when the studio already exists.
33
35
  create_ok: whether the studio will be created if it does not yet exist. Defaults to True
34
-
35
36
  Note:
36
37
  Since a teamspace can either be owned by an org or by a user directly,
37
38
  only one of the arguments can be provided.
@@ -47,13 +48,14 @@ class Studio:
47
48
  teamspace: Optional[Union[str, Teamspace]] = None,
48
49
  org: Optional[Union[str, Organization]] = None,
49
50
  user: Optional[Union[str, User]] = None,
50
- cluster: Optional[str] = None,
51
+ cloud_account: Optional[str] = None,
51
52
  create_ok: bool = True,
53
+ cluster: Optional[str] = None, # deprecated in favor of cloud_account
52
54
  ) -> None:
53
55
  self._studio_api = StudioApi()
54
56
 
55
57
  self._teamspace = _resolve_teamspace(teamspace=teamspace, org=org, user=user)
56
- self._cluster = cluster
58
+ self._cloud_account = _resolve_deprecated_cluster(cloud_account, cluster)
57
59
  self._setup_done = False
58
60
 
59
61
  self._plugins = {}
@@ -68,7 +70,9 @@ class Studio:
68
70
  self._studio = self._studio_api.get_studio(name, self._teamspace.id)
69
71
  except ValueError as e:
70
72
  if create_ok:
71
- self._studio = self._studio_api.create_studio(name, self._teamspace.id, cluster=self._cluster)
73
+ self._studio = self._studio_api.create_studio(
74
+ name, self._teamspace.id, cloud_account=self._cloud_account
75
+ )
72
76
  else:
73
77
  raise ValueError(f"Studio {name} does not exist.") from e
74
78
 
@@ -131,14 +135,32 @@ class Studio:
131
135
  return None
132
136
  return self._studio_api.get_machine(self._studio.id, self._teamspace.id)
133
137
 
134
- def start(self, machine: Machine = Machine.CPU) -> None:
138
+ @property
139
+ def interruptible(self) -> bool:
140
+ """Returns whether the Studio is running on a interruptible instance."""
141
+ if self.status != Status.Running:
142
+ return None
143
+
144
+ return self._studio_api.get_interruptible(self._studio.id, self._teamspace.id)
145
+
146
+ @property
147
+ def cluster(self) -> str:
148
+ """Returns the cluster the Studio is running on."""
149
+ warnings.warn("Studio.cluster is deprecated. Use Studio.cloud_account instead", DeprecationWarning)
150
+ return self.cloud_account
151
+
152
+ @property
153
+ def cloud_account(self) -> str:
154
+ return self._studio.cluster_id
155
+
156
+ def start(self, machine: Union[Machine, str] = Machine.CPU, interruptible: bool = False) -> None:
135
157
  """Starts a Studio on the specified machine type (default: CPU-4)."""
136
158
  status = self.status
137
159
  if status == Status.Running:
138
- curr_machine = self.machine
139
- if curr_machine != machine:
160
+ curr_machine = _machine_to_compute_name(self.machine) if self.machine is not None else None
161
+ if curr_machine != _machine_to_compute_name(machine):
140
162
  raise RuntimeError(
141
- f"Requested to start studio on {machine}, but studio is already running on {curr_machine}."
163
+ f"Requested to start studio on {machine}, but studio is already running on {self.machine}."
142
164
  " Consider switching instead!"
143
165
  )
144
166
  _logger.info(f"Studio {self.name} is already running")
@@ -146,7 +168,7 @@ class Studio:
146
168
 
147
169
  if status != Status.Stopped:
148
170
  raise RuntimeError(f"Cannot start a studio that is not stopped. Studio {self.name} is {status}.")
149
- self._studio_api.start_studio(self._studio.id, self._teamspace.id, machine)
171
+ self._studio_api.start_studio(self._studio.id, self._teamspace.id, machine, interruptible=interruptible)
150
172
 
151
173
  self._setup()
152
174
 
@@ -166,11 +188,12 @@ class Studio:
166
188
  kwargs = self._studio_api.duplicate_studio(self._studio.id, self._teamspace.id, self._teamspace.id)
167
189
  return Studio(**kwargs)
168
190
 
169
- def switch_machine(self, machine: Machine) -> None:
191
+ def switch_machine(self, machine: Union[Machine, str], interruptible: bool = False) -> None:
170
192
  """Switches machine to the provided machine type/.
171
193
 
172
194
  Args:
173
195
  machine: the new machine type to switch to
196
+ interruptible: determines whether to switch to an interruptible instance
174
197
 
175
198
  Note:
176
199
  this call is blocking until the new machine is provisioned
@@ -181,7 +204,9 @@ class Studio:
181
204
  raise RuntimeError(
182
205
  f"Cannot switch machine on a studio that is not running. Studio {self.name} is {status}."
183
206
  )
184
- self._studio_api.switch_studio_machine(self._studio.id, self._teamspace.id, machine)
207
+ self._studio_api.switch_studio_machine(
208
+ self._studio.id, self._teamspace.id, machine, interruptible=interruptible
209
+ )
185
210
 
186
211
  def run_with_exit_code(self, *commands: str) -> Tuple[str, int]:
187
212
  """Runs given commands on the Studio while returning output and exit code.
@@ -224,9 +249,9 @@ class Studio:
224
249
  self._studio_api.upload_file(
225
250
  studio_id=self._studio.id,
226
251
  teamspace_id=self._teamspace.id,
227
- cluster_id=self._studio.cluster_id,
252
+ cloud_account=self._studio.cluster_id,
228
253
  file_path=file_path,
229
- remote_path=remote_path,
254
+ remote_path=os.path.normpath(remote_path),
230
255
  progress_bar=progress_bar,
231
256
  )
232
257
 
@@ -240,7 +265,7 @@ class Studio:
240
265
  target_path=file_path,
241
266
  studio_id=self._studio.id,
242
267
  teamspace_id=self._teamspace.id,
243
- cluster_id=self._studio.cluster_id,
268
+ cloud_account=self._studio.cluster_id,
244
269
  )
245
270
 
246
271
  def download_folder(self, remote_path: str, target_path: Optional[str] = None) -> None:
@@ -253,8 +278,53 @@ class Studio:
253
278
  target_path=target_path,
254
279
  studio_id=self._studio.id,
255
280
  teamspace_id=self._teamspace.id,
256
- cluster_id=self._studio.cluster_id,
281
+ cloud_account=self._studio.cluster_id,
282
+ )
283
+
284
+ @property
285
+ def auto_sleep(self) -> bool:
286
+ """Returns if a Studio has auto-sleep enabled."""
287
+ return not self._studio.code_config.disable_auto_shutdown
288
+
289
+ @auto_sleep.setter
290
+ def auto_sleep(self, value: bool) -> None:
291
+ if not value and self.machine == Machine.CPU:
292
+ warnings.warn("Disabling auto-sleep will convert the Studio from free to paid!")
293
+ self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, enabled=value, studio=self._studio)
294
+ self._update_studio_reference()
295
+
296
+ @property
297
+ def auto_sleep_time(self) -> int:
298
+ """Returns the time in seconds a Studio has to be idle for auto-sleep to kick in (if enabled)."""
299
+ return self._studio.code_config.idle_shutdown_seconds
300
+
301
+ @auto_sleep_time.setter
302
+ def auto_sleep_time(self, value: int) -> None:
303
+ warnings.warn("Setting auto-sleep time will convert the Studio from free to paid!")
304
+ self._studio_api.update_autoshutdown(
305
+ self._studio.id, self._teamspace.id, idle_shutdown_seconds=value, studio=self._studio
257
306
  )
307
+ self._update_studio_reference()
308
+
309
+ @property
310
+ def auto_shutdown(self) -> bool:
311
+ warnings.warn("auto_shutdown is deprecated. Use auto_sleep instead", DeprecationWarning)
312
+ return self.auto_sleep
313
+
314
+ @auto_shutdown.setter
315
+ def auto_shutdown(self, value: bool) -> None:
316
+ warnings.warn("auto_shutdown is deprecated. Use auto_sleep instead", DeprecationWarning)
317
+ self.auto_sleep = value
318
+
319
+ @property
320
+ def auto_shutdown_time(self) -> int:
321
+ warnings.warn("auto_shutdown_time is deprecated. Use auto_sleep_time instead", DeprecationWarning)
322
+ return self.auto_sleep_time
323
+
324
+ @auto_shutdown_time.setter
325
+ def auto_shutdown_time(self, value: int) -> None:
326
+ warnings.warn("auto_shutdown_time is deprecated. Use auto_sleep_time instead", DeprecationWarning)
327
+ self.auto_sleep_time = value
258
328
 
259
329
  @property
260
330
  def available_plugins(self) -> Mapping[str, str]:
@@ -342,6 +412,9 @@ class Studio:
342
412
  """Returns reader friendly representation."""
343
413
  return repr(self)
344
414
 
415
+ def _update_studio_reference(self) -> None:
416
+ self._studio = self._studio_api.get_studio_by_id(studio_id=self._studio.id, teamspace_id=self._teamspace.id)
417
+
345
418
 
346
419
  def _internal_status_to_external_status(internal_status: str) -> Status:
347
420
  """Converts internal status strings from HTTP requests to external enums."""
@@ -1,12 +1,24 @@
1
- from typing import TYPE_CHECKING, List, Optional, Union
1
+ import warnings
2
+ from pathlib import Path
3
+ from typing import TYPE_CHECKING, List, Optional, Tuple, Union
2
4
 
5
+ from lightning_sdk.agents import Agent
3
6
  from lightning_sdk.api import TeamspaceApi
7
+ from lightning_sdk.models import UploadedModelInfo
4
8
  from lightning_sdk.organization import Organization
5
9
  from lightning_sdk.owner import Owner
6
10
  from lightning_sdk.user import User
7
- from lightning_sdk.utils import _get_organizations_for_authed_user, _resolve_org, _resolve_teamspace_name, _resolve_user
11
+ from lightning_sdk.utils.resolve import (
12
+ _get_organizations_for_authed_user,
13
+ _parse_model_and_version,
14
+ _resolve_org,
15
+ _resolve_teamspace_name,
16
+ _resolve_user,
17
+ )
8
18
 
9
19
  if TYPE_CHECKING:
20
+ from lightning_sdk.job import Job
21
+ from lightning_sdk.mmt import MMT
10
22
  from lightning_sdk.studio import Studio
11
23
 
12
24
 
@@ -88,19 +100,81 @@ class Teamspace:
88
100
  from lightning_sdk.studio import Studio
89
101
 
90
102
  studios = []
91
- clusters = self._teamspace_api.list_clusters(teamspace_id=self.id)
103
+ clusters = self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
92
104
  for cl in clusters:
93
- _studios = self._teamspace_api.list_studios(teamspace_id=self.id, cluster_id=cl.cluster_id)
105
+ _studios = self._teamspace_api.list_studios(teamspace_id=self.id, cloud_account=cl.cluster_id)
94
106
  for s in _studios:
95
107
  studios.append(Studio(name=s.name, teamspace=self, cluster=cl.cluster_name, create_ok=False))
96
108
 
97
109
  return studios
98
110
 
111
+ @property
112
+ def default_cloud_account(self) -> str:
113
+ return self._teamspace.project_settings.preferred_cluster
114
+
115
+ @property
116
+ def cloud_accounts(self) -> List[str]:
117
+ """All cloud accounts associated with that teamspace."""
118
+ clusters = self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
119
+ return [cl.cluster_name for cl in clusters]
120
+
99
121
  @property
100
122
  def clusters(self) -> List[str]:
101
123
  """All clusters associated with that teamspace."""
102
- clusters = self._teamspace_api.list_clusters(teamspace_id=self.id)
103
- return [cl.cluster_name for cl in clusters]
124
+ warnings.warn(
125
+ "The 'clusters' attribute is deprecated and will be removed in the future. "
126
+ "Please use the 'cloud_accounts' attribute instead.",
127
+ DeprecationWarning,
128
+ )
129
+ return self.cloud_accounts
130
+
131
+ @property
132
+ def jobs(self) -> Tuple["Job", ...]:
133
+ from lightning_sdk.job import Job
134
+ from lightning_sdk.plugin import forced_v1
135
+
136
+ jobsv1, jobsv2 = self._teamspace_api.list_jobs(teamspace_id=self.id)
137
+
138
+ jobs = []
139
+
140
+ for j1 in jobsv1:
141
+ with forced_v1(Job):
142
+ # _fetch_job = False to prevent refetching on init since we already got it
143
+ job = Job(name=j1.name, teamspace=self, _fetch_job=False)
144
+ job._internal_job._job = j1
145
+ jobs.append(job)
146
+
147
+ for j2 in jobsv2:
148
+ # _fetch_job = False to prevent refetching on init since we already got it
149
+ job = Job(name=j2.name, teamspace=self, _fetch_job=False)
150
+ job._internal_job._job = j2
151
+ jobs.append(job)
152
+
153
+ return tuple(jobs)
154
+
155
+ @property
156
+ def multi_machine_jobs(self) -> Tuple["MMT", ...]:
157
+ from lightning_sdk.mmt import MMT
158
+ from lightning_sdk.plugin import forced_v1
159
+
160
+ mmtsv1, mmtsv2 = self._teamspace_api.list_mmts(teamspace_id=self.id)
161
+
162
+ mmts = []
163
+
164
+ for m1 in mmtsv1:
165
+ with forced_v1(MMT):
166
+ # _fetch_job = False to prevent refetching on init since we already got it
167
+ mmt = MMT(name=m1.name, teamspace=self, _fetch_job=False)
168
+ mmt._internal_mmt._job = m1
169
+ mmts.append(mmt)
170
+
171
+ for m2 in mmtsv2:
172
+ # _fetch_job = False to prevent refetching on init since we already got it
173
+ mmt = MMT(name=m2.name, teamspace=self, _fetch_job=False)
174
+ mmt._internal_mmt._job = m2
175
+ mmts.append(mmt)
176
+
177
+ return tuple(mmts)
104
178
 
105
179
  def __eq__(self, other: "Teamspace") -> bool:
106
180
  """Checks whether the provided other object is equal to this one."""
@@ -116,6 +190,161 @@ class Teamspace:
116
190
  """Returns reader friendly representation."""
117
191
  return repr(self)
118
192
 
193
+ def create_agent(
194
+ self,
195
+ name: str,
196
+ api_key: str,
197
+ base_url: str,
198
+ model: str,
199
+ org_id: Optional[str] = "",
200
+ prompt_template: Optional[str] = "",
201
+ description: Optional[str] = "",
202
+ prompt_suggestions: Optional[List[str]] = None,
203
+ file_uploads_enabled: Optional[bool] = None,
204
+ ) -> "Agent":
205
+ agent = self._teamspace_api.create_agent(
206
+ teamspace_id=self.id,
207
+ name=name,
208
+ api_key=api_key,
209
+ base_url=base_url,
210
+ model=model,
211
+ org_id=org_id,
212
+ prompt_template=prompt_template,
213
+ description=description,
214
+ prompt_suggestions=prompt_suggestions,
215
+ file_uploads_enabled=file_uploads_enabled,
216
+ )
217
+ return Agent(agent.id)
218
+
219
+ def upload_model(
220
+ self,
221
+ path: Union[str, Path],
222
+ name: str,
223
+ cloud_account: Optional[str] = None,
224
+ progress_bar: bool = True,
225
+ ) -> UploadedModelInfo:
226
+ """Upload a local checkpoint file to the model store.
227
+
228
+ Args:
229
+ path: Path to the model file or folder to upload.
230
+ name: Name tag of the model to upload.
231
+ cloud_account: The name of the cloud account to store the Model in.
232
+ If not provided, the default cloud account for the Teamspace will be used.
233
+ progress_bar: Whether to show a progress bar for the upload.
234
+ """
235
+ if not path:
236
+ raise ValueError("No path provided to upload")
237
+ if not name:
238
+ raise ValueError("No name provided for the model")
239
+ path = Path(path).resolve()
240
+ if not path.exists():
241
+ raise FileNotFoundError(str(path))
242
+
243
+ cloud_account = (
244
+ self._teamspace_api._determine_cloud_account(self.id) if cloud_account is None else cloud_account
245
+ )
246
+ filepaths = [path] if path.is_file() else [p for p in path.rglob("*") if p.is_file()]
247
+
248
+ if not filepaths:
249
+ raise FileNotFoundError(
250
+ "The path to upload doesn't contain any files. Make sure it points to a file or"
251
+ f" non-empty folder: {path}"
252
+ )
253
+
254
+ root_path = path
255
+ if len(filepaths) == 1:
256
+ root_path = path.parent
257
+
258
+ filenames = ",".join(str(f.relative_to(root_path)) for f in filepaths)
259
+
260
+ model = self._teamspace_api.create_model(
261
+ name=name,
262
+ metadata={"filenames": filenames},
263
+ private=True,
264
+ teamspace_id=self.id,
265
+ cloud_account=cloud_account,
266
+ )
267
+ self._teamspace_api.upload_model_files(
268
+ model_id=model.model_id,
269
+ version=model.version,
270
+ root_path=root_path,
271
+ filepaths=filepaths,
272
+ cloud_account=cloud_account,
273
+ teamspace_id=self.id,
274
+ progress_bar=progress_bar,
275
+ )
276
+ self._teamspace_api.complete_model_upload(
277
+ model_id=model.model_id,
278
+ version=model.version,
279
+ teamspace_id=self.id,
280
+ )
281
+ return UploadedModelInfo(
282
+ name=name,
283
+ version=model.version,
284
+ teamspace=self.name,
285
+ cloud_account=cloud_account,
286
+ )
287
+
288
+ def download_model(
289
+ self,
290
+ name: str,
291
+ download_dir: Optional[str] = None,
292
+ progress_bar: bool = True,
293
+ ) -> str:
294
+ """Download a checkpoint from the model store.
295
+
296
+ Args:
297
+ name: Name tag of the model to download. Can optionally also contain a version tag separated by a colon,
298
+ e.g. 'modelname:v1'.
299
+ download_dir: A path to directory where the model should be downloaded. Defaults
300
+ to the current working directory.
301
+ progress_bar: Whether to show a progress bar for the download.
302
+
303
+ Returns:
304
+ The absolute path to the downloaded model file or folder.
305
+
306
+ """
307
+ if not name:
308
+ raise ValueError("No name provided for the model")
309
+ if download_dir is None:
310
+ download_dir = Path.cwd()
311
+ download_dir = Path(download_dir)
312
+
313
+ name, version = _parse_model_and_version(name)
314
+ model_version = self._teamspace_api.get_model_version(name=name, version=version, teamspace_id=self.id)
315
+ if not model_version.upload_complete:
316
+ raise RuntimeError(
317
+ f"Model {name}:{version} is not fully uploaded yet. Please wait until the upload is complete."
318
+ )
319
+ downloaded_files = self._teamspace_api.download_model_files(
320
+ name=name,
321
+ version=version,
322
+ download_dir=download_dir,
323
+ teamspace_name=self.name,
324
+ teamspace_owner_name=self.owner.name,
325
+ progress_bar=progress_bar,
326
+ )
327
+
328
+ if not downloaded_files:
329
+ raise RuntimeError("No files were downloaded. This shouldn't happen, please report a bug.")
330
+
331
+ if len(downloaded_files) == 1:
332
+ downloaded_file = Path(downloaded_files[0])
333
+ downloaded_path = download_dir / downloaded_file.parts[0]
334
+ return str(downloaded_path.resolve())
335
+ return str(Path(download_dir).resolve())
336
+
337
+ def delete_model(self, name: str) -> None:
338
+ """Delete a model from the model store.
339
+
340
+ Args:
341
+ name: Name tag of the model to delete. Can optionally also contain a version tag separated by a colon,
342
+ e.g. 'entity/modelname:v1'.
343
+
344
+ """
345
+ name, version = _parse_model_and_version(name)
346
+ self._teamspace_api.delete_model(name=name, version=version, teamspace_id=self.id)
347
+
119
348
 
120
349
  def _resolve_valueerror_message(error: ValueError, owner: Owner, teamspace_name: str) -> ValueError:
121
350
  """Resolves the ValueError Message and replaces it with a nicer message."""
@@ -127,18 +356,17 @@ def _resolve_valueerror_message(error: ValueError, owner: Owner, teamspace_name:
127
356
  organizations = _get_organizations_for_authed_user()
128
357
  message = (
129
358
  f"Teamspace {entire_ts_name} does not exist. "
130
- "Is it maybe an organizational Teamspace? You are a member of the following organizations: "
131
- f"{[o.name for o in organizations]}. Maybe specify one of these instead "
132
- "of your user if the Teamspace belongs to the organization."
359
+ f"Is {teamspace_name} an organizational Teamspace? You are a member of the following organizations: "
360
+ f"{[o.name for o in organizations]}. Try specifying the `org` parameter instead "
361
+ "of `user` if the Teamspace belongs to the organization."
133
362
  )
134
363
  else:
135
364
  # organization teamspace owner
136
365
  user = User()
137
366
  message = (
138
367
  f"Teamspace {entire_ts_name} does not exist. "
139
- f"Is it maybe a user Teamspace. You specified org={owner.name}, "
140
- "but maybe the Teamspace is part of your user? "
141
- f"Consider specifying user={user.name} instead of your org."
368
+ f"Is {teamspace_name} a user Teamspace? "
369
+ f"Consider specifying user={user.name} instead of org={owner.name}."
142
370
  )
143
371
 
144
372
  return ValueError(message, *error.args[1:])
lightning_sdk/user.py CHANGED
@@ -2,7 +2,7 @@ from typing import Optional
2
2
 
3
3
  from lightning_sdk.api import UserApi
4
4
  from lightning_sdk.owner import Owner
5
- from lightning_sdk.utils import _resolve_user_name
5
+ from lightning_sdk.utils.resolve import _resolve_user_name
6
6
 
7
7
 
8
8
  class User(Owner):
File without changes
@@ -0,0 +1,61 @@
1
+ from abc import ABCMeta
2
+ from typing import Any, Callable, Tuple, Type
3
+
4
+
5
+ class ConditionBaseMeta(ABCMeta):
6
+ """Metaclass that allows for conditional inheritance.
7
+
8
+ This metaclass is used to conditionally inherit from two base classes
9
+ based on the result of a given condition function.
10
+
11
+ Example usage:
12
+ ```
13
+ def my_condition():
14
+ return some_condition # Define your condition here
15
+
16
+ class A:
17
+ pass
18
+
19
+ class B:
20
+ pass
21
+
22
+ class MyNewClass(metaclass=ConditionBaseMeta, condition_func=my_condition, base_true=A, base_false=B):
23
+ pass
24
+ ```
25
+
26
+ Args:
27
+ cls: The metaclass itself.
28
+ name: The name of the class being created.
29
+ bases: The base classes of the class being created.
30
+ attrs: The attributes of the class being created.
31
+ condition_func: The function that determines which base class to inherit from.
32
+ base_true: The base class to inherit from if the condition function returns True.
33
+ base_false: The base class to inherit from if the condition function returns False.
34
+
35
+ Returns:
36
+ type: The new class with the appropriate base class.
37
+ """
38
+
39
+ def __new__(
40
+ cls,
41
+ name: str,
42
+ bases: Tuple[type, ...],
43
+ attrs: dict,
44
+ condition_func: Callable[[], bool],
45
+ base_true: Type,
46
+ base_false: Type,
47
+ ) -> Type:
48
+ # Helper function to determine the base class
49
+ def get_base() -> type:
50
+ return base_true if condition_func() else base_false
51
+
52
+ base = get_base()
53
+ attrs["_base"] = base
54
+
55
+ # Create the final class, inheriting from both the intermediate base and the original bases
56
+ return super().__new__(cls, name, (base, *bases), attrs)
57
+
58
+ def __getattr__(cls, name: str) -> Any:
59
+ """Get an attribute from the appropriate base class."""
60
+ # Delegate attribute lookup to the appropriate base class
61
+ return getattr(cls._base, name)