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.
- lightning_sdk/__init__.py +12 -2
- lightning_sdk/agents.py +46 -0
- lightning_sdk/ai_hub.py +185 -0
- lightning_sdk/api/__init__.py +4 -0
- lightning_sdk/api/agents_api.py +107 -0
- lightning_sdk/api/ai_hub_api.py +130 -0
- lightning_sdk/api/deployment_api.py +574 -0
- lightning_sdk/api/job_api.py +308 -0
- lightning_sdk/api/mmt_api.py +188 -0
- lightning_sdk/api/org_api.py +1 -3
- lightning_sdk/api/studio_api.py +174 -83
- lightning_sdk/api/teamspace_api.py +219 -20
- lightning_sdk/api/user_api.py +24 -9
- lightning_sdk/api/utils.py +429 -47
- lightning_sdk/cli/ai_hub.py +49 -0
- lightning_sdk/cli/download.py +132 -0
- lightning_sdk/cli/entrypoint.py +11 -3
- lightning_sdk/cli/run.py +206 -0
- lightning_sdk/cli/serve.py +218 -0
- lightning_sdk/cli/studios_menu.py +78 -0
- lightning_sdk/cli/upload.py +79 -89
- lightning_sdk/constants.py +29 -1
- lightning_sdk/deployment/__init__.py +25 -0
- lightning_sdk/deployment/deployment.py +389 -0
- lightning_sdk/helpers.py +49 -0
- lightning_sdk/job/__init__.py +5 -0
- lightning_sdk/job/base.py +295 -0
- lightning_sdk/job/job.py +266 -0
- lightning_sdk/job/v1.py +241 -0
- lightning_sdk/job/v2.py +193 -0
- lightning_sdk/job/work.py +72 -0
- lightning_sdk/lightning_cloud/__version__.py +1 -1
- lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
- lightning_sdk/lightning_cloud/env.py +1 -0
- lightning_sdk/lightning_cloud/login.py +12 -8
- lightning_sdk/lightning_cloud/openapi/__init__.py +314 -43
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +10 -0
- lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py +141 -0
- lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1075 -227
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +9 -1
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +3115 -895
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +908 -141
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +10 -5
- lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py +756 -0
- lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +1658 -159
- lightning_sdk/lightning_cloud/openapi/api/experiments_service_api.py +242 -0
- lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +674 -0
- lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +3823 -0
- lightning_sdk/lightning_cloud/openapi/api/lightningapp_instance_service_api.py +158 -590
- lightning_sdk/lightning_cloud/openapi/api/lightningapp_v2_service_api.py +0 -1086
- lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +113 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +1753 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +242 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
- lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
- lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
- lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
- lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
- lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
- lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +304 -41
- lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/agents_id_body.py +643 -0
- lightning_sdk/lightning_cloud/openapi/models/app_id_works_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_cluster_health_response.py → captures_id_body.py} +16 -16
- lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versions_body.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +84 -6
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/clusters_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/create.py +157 -1
- lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +43 -17
- lightning_sdk/lightning_cloud/openapi/models/experiment_name_variant_name_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +107 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_lightningapp_instance.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
- lightning_sdk/lightning_cloud/openapi/models/id_complete_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
- lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_fork_body.py +31 -31
- lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
- lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_uploads_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
- lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
- lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +181 -51
- lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
- lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
- lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_serviceexecution_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +157 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +162 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version_status.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version_publication.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_upload_service_execution_artifact_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
- lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_version_publication_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_version_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_service_execution_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_deployment_strategy.py} +39 -39
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
- lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +163 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +697 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_version_publications_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
- lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_service_executions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
- lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_multi_machine_job_event_type.py} +9 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
- lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
- lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_search_users_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_secret_type.py} +10 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_update_cluster_response.py → v1_service_artifact.py} +54 -54
- lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upload_service_execution_artifact_parts_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upload_service_execution_artifact_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
- lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1030 -302
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
- lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/versions_id_body.py +357 -0
- lightning_sdk/lightning_cloud/rest_client.py +49 -23
- lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
- lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
- lightning_sdk/lightning_cloud/utils/data_connection.py +145 -7
- lightning_sdk/machine.py +17 -4
- lightning_sdk/mmt/__init__.py +4 -0
- lightning_sdk/mmt/base.py +288 -0
- lightning_sdk/mmt/mmt.py +282 -0
- lightning_sdk/mmt/v1.py +185 -0
- lightning_sdk/mmt/v2.py +193 -0
- lightning_sdk/models.py +153 -0
- lightning_sdk/organization.py +1 -1
- lightning_sdk/plugin.py +207 -41
- lightning_sdk/services/__init__.py +5 -0
- lightning_sdk/services/file_endpoint.py +223 -0
- lightning_sdk/services/finetune/__init__.py +35 -0
- lightning_sdk/services/utilities.py +111 -0
- lightning_sdk/status.py +2 -1
- lightning_sdk/studio.py +90 -17
- lightning_sdk/teamspace.py +189 -11
- lightning_sdk/user.py +1 -1
- lightning_sdk/utils/__init__.py +0 -0
- lightning_sdk/utils/dynamic.py +61 -0
- lightning_sdk/utils/enum.py +116 -0
- lightning_sdk/{utils.py → utils/resolve.py} +41 -4
- lightning_sdk-0.1.46.dist-info/LICENSE +21 -0
- {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/METADATA +30 -4
- lightning_sdk-0.1.46.dist-info/RECORD +858 -0
- {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/WHEEL +1 -1
- lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
- lightning_sdk/lightning_cloud/openapi/models/assistants_id_body.py +0 -487
- lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
- lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
- lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
- lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
- lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
- lightning_sdk-0.1.2.dist-info/RECORD +0 -550
- {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/entry_points.txt +0 -0
- {lightning_sdk-0.1.2.dist-info → lightning_sdk-0.1.46.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
from time import sleep
|
|
2
|
+
from typing import Any, List, Literal, Optional, Union
|
|
3
|
+
|
|
4
|
+
from lightning_sdk.api.utils import _MACHINE_TO_COMPUTE_NAME
|
|
5
|
+
from lightning_sdk.lightning_cloud.openapi import (
|
|
6
|
+
CreateDeploymentRequestDefinesASpecForTheJobThatAllowsForAutoscalingJobs,
|
|
7
|
+
V1AutoscalingSpec,
|
|
8
|
+
V1AutoscalingTargetMetric,
|
|
9
|
+
V1Deployment,
|
|
10
|
+
V1DeploymentStrategy,
|
|
11
|
+
V1Endpoint,
|
|
12
|
+
V1EndpointAuth,
|
|
13
|
+
V1EnvVar,
|
|
14
|
+
V1HealthCheckExec,
|
|
15
|
+
V1HealthCheckHttpGet,
|
|
16
|
+
V1JobHealthCheckConfig,
|
|
17
|
+
V1JobSpec,
|
|
18
|
+
V1RollingUpdateStrategy,
|
|
19
|
+
)
|
|
20
|
+
from lightning_sdk.lightning_cloud.openapi.rest import ApiException
|
|
21
|
+
from lightning_sdk.lightning_cloud.rest_client import LightningClient
|
|
22
|
+
from lightning_sdk.machine import Machine
|
|
23
|
+
|
|
24
|
+
_METRICS = ["GPU", "CPU", "RPM"]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Env:
|
|
28
|
+
"""The Env describes an environnement variable."""
|
|
29
|
+
|
|
30
|
+
def __init__(self, name: str, value: str) -> str:
|
|
31
|
+
self.name = name
|
|
32
|
+
self.value = value
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Secret:
|
|
36
|
+
"""The Secret describes a protected environnement variable."""
|
|
37
|
+
|
|
38
|
+
def __init__(self, name: str) -> str:
|
|
39
|
+
self.name = name
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class Auth:
|
|
43
|
+
"""The base auth class."""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class BasicAuth(Auth):
|
|
47
|
+
"""The BasicAuth describes the basic auth mechanism where a username and password are required to authenticate."""
|
|
48
|
+
|
|
49
|
+
def __init__(self, username: str, password: str) -> None:
|
|
50
|
+
self.username = username
|
|
51
|
+
self.password = password
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class TokenAuth(Auth):
|
|
55
|
+
"""The TokenAuth describes the token auth mechanism where a token is required to authenticate."""
|
|
56
|
+
|
|
57
|
+
def __init__(self, token: str) -> None:
|
|
58
|
+
self.token = token
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ReleaseStrategy:
|
|
62
|
+
"""The base class for release strategy."""
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class RollingUpdateReleaseStrategy(ReleaseStrategy):
|
|
66
|
+
"""The RollingUpdateReleaseStrategy describes the rolling update strategy.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
max_surge: The max_surge argument controls the maximum number of additional replicas
|
|
70
|
+
that can be created during a rolling update.
|
|
71
|
+
It specifies the number above the desired replica count that can be temporarily created.
|
|
72
|
+
During an update, Lightning creates new replicas to replace the old ones,
|
|
73
|
+
and the max_surge argument ensures that the total number of pods does not exceed a certain limit.
|
|
74
|
+
max_unavailable: The max_unavailable argument determines the maximum number of replicas that
|
|
75
|
+
can be unavailable during a rolling update. It specifies the maximum number that can be simultaneously
|
|
76
|
+
removed from service during the update progresses. By default, Lightning terminates one replica at a
|
|
77
|
+
time while creating new replicas, ensuring that the desired replica count is maintained.
|
|
78
|
+
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
def __init__(self, max_surge: int = 1, max_unavailable: int = 0) -> None:
|
|
82
|
+
self.max_surge = max_surge
|
|
83
|
+
self.max_unavailable = max_unavailable
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class HealthCheck:
|
|
87
|
+
pass
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class ExecHealthCheck(HealthCheck):
|
|
91
|
+
"""The ExecHealthCheck determines whether your service is ready using exec command in the container.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
command: The command to be executed within your container to decide whether the service is ready.
|
|
95
|
+
timeout_seconds: The total number of time to wait before declaring the service as unhealthy.
|
|
96
|
+
initial_delay_seconds: The amount of time to wait before starting to execute the command.
|
|
97
|
+
failure_threshold: The total number of retries to do befor declaring the service as unhealthy.
|
|
98
|
+
interval_seconds: The amount of time between retries.
|
|
99
|
+
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
def __init__(
|
|
103
|
+
self,
|
|
104
|
+
command: str,
|
|
105
|
+
timeout_seconds: int = 60,
|
|
106
|
+
initial_delay_seconds: int = 5,
|
|
107
|
+
failure_threshold: int = 12,
|
|
108
|
+
interval_seconds: int = 5,
|
|
109
|
+
) -> None:
|
|
110
|
+
self.command = command
|
|
111
|
+
self.timeout_seconds = timeout_seconds
|
|
112
|
+
self.initial_delay_seconds = initial_delay_seconds
|
|
113
|
+
self.failure_threshold = failure_threshold
|
|
114
|
+
self.interval_seconds = interval_seconds
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class HttpHealthCheck(HealthCheck):
|
|
118
|
+
"""The HttpHealthCheck determines whether your service is ready using http request.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
path: The server path to hit to check whether the server is healthy
|
|
122
|
+
port: The server port to hit to check whether the server is healthy
|
|
123
|
+
timeout_seconds: The total number of time to wait before declaring the service as unhealthy.
|
|
124
|
+
initial_delay_seconds: The amount of time to wait before starting to execute the command.
|
|
125
|
+
failure_threshold: The total number of retries to do befor declaring the service as unhealthy.
|
|
126
|
+
interval_seconds: The amount of time between retries.
|
|
127
|
+
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
def __init__(
|
|
131
|
+
self,
|
|
132
|
+
path: str,
|
|
133
|
+
port: float,
|
|
134
|
+
timeout_seconds: int = 60,
|
|
135
|
+
initial_delay_seconds: int = 5,
|
|
136
|
+
failure_threshold: int = 12,
|
|
137
|
+
interval_seconds: int = 5,
|
|
138
|
+
) -> None:
|
|
139
|
+
self.path = path
|
|
140
|
+
self.port = port
|
|
141
|
+
self.timeout_seconds = timeout_seconds
|
|
142
|
+
self.initial_delay_seconds = initial_delay_seconds
|
|
143
|
+
self.failure_threshold = failure_threshold
|
|
144
|
+
self.interval_seconds = interval_seconds
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class AutoScalingMetric:
|
|
148
|
+
"""The AutoScalingMetric determines the metric used to decide whether we should autoscale.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
name: The name of the metric used to decide whether we should autoscale.
|
|
152
|
+
target: The metric threshold to decide whether we should autoscale.
|
|
153
|
+
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
def __init__(
|
|
157
|
+
self,
|
|
158
|
+
name: Literal["GPU", "CPU", "RPM"],
|
|
159
|
+
target: float,
|
|
160
|
+
) -> None:
|
|
161
|
+
self.name = name
|
|
162
|
+
self.target = target
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class AutoScaleConfig:
|
|
166
|
+
"""The AutoScaleConfig determines how to autoscale your deployment.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
min_replicas: The minimum number of replicas. When set to 0, the replicas will
|
|
170
|
+
stop when there is no traffic left.
|
|
171
|
+
max_replicas: The maximum number of replicas.
|
|
172
|
+
metric: The metric used to decide whether we should autoscale.
|
|
173
|
+
threshold: The metric threshold to decide whether we should autoscale.
|
|
174
|
+
target_metrics: Multiple target metrics to autoscale the deployment.
|
|
175
|
+
idle_threshold_seconds: The amount of time to wait before stopping a replica
|
|
176
|
+
after the latest seen request.
|
|
177
|
+
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
def __init__(
|
|
181
|
+
self,
|
|
182
|
+
min_replicas: Optional[int] = None,
|
|
183
|
+
max_replicas: Optional[int] = None,
|
|
184
|
+
metric: Optional[Literal["GPU", "CPU", "RPM"]] = None,
|
|
185
|
+
threshold: Optional[float] = None,
|
|
186
|
+
target_metrics: Optional[List[AutoScalingMetric]] = None,
|
|
187
|
+
idle_threshold_seconds: Optional[str] = None,
|
|
188
|
+
scale_down_cooldown_seconds: Optional[str] = None,
|
|
189
|
+
scale_up_cooldown_seconds: Optional[str] = None,
|
|
190
|
+
) -> None:
|
|
191
|
+
self.min_replicas = min_replicas
|
|
192
|
+
self.max_replicas = max_replicas
|
|
193
|
+
self.metric = metric
|
|
194
|
+
self.threshold = threshold
|
|
195
|
+
self.target_metrics = target_metrics
|
|
196
|
+
self.idle_threshold_seconds = idle_threshold_seconds
|
|
197
|
+
self.scale_down_cooldown_seconds = scale_down_cooldown_seconds
|
|
198
|
+
self.scale_up_cooldown_seconds = scale_up_cooldown_seconds
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
class DeploymentApi:
|
|
202
|
+
"""Internal API client for Deployment requests (mainly http requests)."""
|
|
203
|
+
|
|
204
|
+
def __init__(self, wait_on_stop: int = 5) -> None:
|
|
205
|
+
self._client = LightningClient(max_tries=7)
|
|
206
|
+
self._wait_on_stop = wait_on_stop
|
|
207
|
+
|
|
208
|
+
def get_deployment_by_name(self, name: str, teamspace_id: str) -> Optional[V1Deployment]:
|
|
209
|
+
try:
|
|
210
|
+
return self._client.jobs_service_get_deployment_by_name(project_id=teamspace_id, name=name)
|
|
211
|
+
except ApiException as ex:
|
|
212
|
+
if "Reason: Not Found" in str(ex):
|
|
213
|
+
return None
|
|
214
|
+
raise ex
|
|
215
|
+
|
|
216
|
+
def create_deployment(
|
|
217
|
+
self,
|
|
218
|
+
deployment: V1Deployment,
|
|
219
|
+
) -> V1Deployment:
|
|
220
|
+
return self._client.jobs_service_create_deployment(
|
|
221
|
+
project_id=deployment.project_id,
|
|
222
|
+
body=CreateDeploymentRequestDefinesASpecForTheJobThatAllowsForAutoscalingJobs(
|
|
223
|
+
autoscaling=deployment.autoscaling,
|
|
224
|
+
cluster_id=deployment.spec.cluster_id,
|
|
225
|
+
endpoint=deployment.endpoint,
|
|
226
|
+
name=deployment.name,
|
|
227
|
+
replicas=deployment.replicas,
|
|
228
|
+
spec=deployment.spec,
|
|
229
|
+
strategy=deployment.strategy,
|
|
230
|
+
),
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
def update_deployment(
|
|
234
|
+
self,
|
|
235
|
+
deployment: V1Deployment,
|
|
236
|
+
machine: Optional[Machine] = None,
|
|
237
|
+
environment: Optional[str] = None,
|
|
238
|
+
entrypoint: Optional[str] = None,
|
|
239
|
+
command: Optional[str] = None,
|
|
240
|
+
env: Optional[List[Union[Env, Secret]]] = None,
|
|
241
|
+
spot: Optional[bool] = None,
|
|
242
|
+
cloud_account: Optional[str] = None,
|
|
243
|
+
min_replicas: Optional[int] = None,
|
|
244
|
+
max_replicas: Optional[int] = None,
|
|
245
|
+
name: Optional[str] = None,
|
|
246
|
+
ports: Optional[List[float]] = None,
|
|
247
|
+
release_strategy: Optional[ReleaseStrategy] = None,
|
|
248
|
+
replicas: Optional[int] = None,
|
|
249
|
+
health_check: Optional[Union[HttpHealthCheck, ExecHealthCheck]] = None,
|
|
250
|
+
auth: Optional[Union[BasicAuth, TokenAuth]] = None,
|
|
251
|
+
custom_domain: Optional[str] = None,
|
|
252
|
+
) -> V1Deployment:
|
|
253
|
+
# Update the deployment in place
|
|
254
|
+
|
|
255
|
+
apply_change(deployment, "name", name)
|
|
256
|
+
apply_change(deployment, "replicas", replicas)
|
|
257
|
+
apply_change(deployment, "strategy", to_strategy(release_strategy))
|
|
258
|
+
|
|
259
|
+
apply_change(deployment.autoscaling, "min_replicas", min_replicas)
|
|
260
|
+
apply_change(deployment.autoscaling, "max_replicas", max_replicas)
|
|
261
|
+
apply_change(deployment.autoscaling, "max_replicas", max_replicas)
|
|
262
|
+
|
|
263
|
+
# Any updates to the Job Spec triggers a new release
|
|
264
|
+
if machine:
|
|
265
|
+
apply_change(deployment.spec, "instance_name", _MACHINE_TO_COMPUTE_NAME[machine])
|
|
266
|
+
|
|
267
|
+
requires_release = False
|
|
268
|
+
requires_release |= apply_change(deployment.spec, "image", environment)
|
|
269
|
+
requires_release |= apply_change(deployment.spec, "entrypoint", entrypoint)
|
|
270
|
+
requires_release |= apply_change(deployment.spec, "command", command)
|
|
271
|
+
requires_release |= apply_change(deployment.spec, "env", to_env(env))
|
|
272
|
+
requires_release |= apply_change(deployment.spec, "env", to_health_check(health_check))
|
|
273
|
+
requires_release |= apply_change(deployment.spec, "cluster_id", cloud_account)
|
|
274
|
+
requires_release |= apply_change(deployment.spec, "spot", spot)
|
|
275
|
+
|
|
276
|
+
if requires_release:
|
|
277
|
+
if deployment.strategy is None:
|
|
278
|
+
raise RuntimeError("When doing a new release, a release strategy needs to be defined.")
|
|
279
|
+
|
|
280
|
+
print("Some core arguments have changed. We are making a new release.")
|
|
281
|
+
|
|
282
|
+
apply_change(deployment.endpoint, "custom_domain", custom_domain)
|
|
283
|
+
apply_change(deployment.endpoint, "auth", to_endpoint_auth(auth))
|
|
284
|
+
apply_change(deployment.endpoint, "ports", [str(port) for port in ports] if ports else None)
|
|
285
|
+
|
|
286
|
+
return self._client.jobs_service_update_deployment(
|
|
287
|
+
project_id=deployment.project_id,
|
|
288
|
+
id=deployment.id,
|
|
289
|
+
body=deployment,
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
def stop(self, deployment: V1Deployment) -> V1Deployment:
|
|
293
|
+
deployment.autoscaling.min_replicas = 0
|
|
294
|
+
deployment.autoscaling.max_replicas = 0
|
|
295
|
+
|
|
296
|
+
deployment = self._client.jobs_service_update_deployment(
|
|
297
|
+
project_id=deployment.project_id,
|
|
298
|
+
id=deployment.id,
|
|
299
|
+
body=deployment,
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
# wait for all the replicas to be 0
|
|
303
|
+
while deployment.replicas != 0:
|
|
304
|
+
sleep(self._wait_on_stop)
|
|
305
|
+
deployment = self.get_deployment_by_name(deployment.name, deployment.project_id)
|
|
306
|
+
|
|
307
|
+
return deployment
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def restore_release_strategy(strategy: V1DeploymentStrategy) -> Optional[ReleaseStrategy]:
|
|
311
|
+
if not strategy:
|
|
312
|
+
return None
|
|
313
|
+
|
|
314
|
+
if strategy.rolling_update:
|
|
315
|
+
return RollingUpdateReleaseStrategy(
|
|
316
|
+
max_surge=strategy.rolling_update.max_surge,
|
|
317
|
+
max_unavailable=strategy.rolling_update.max_unavailable,
|
|
318
|
+
)
|
|
319
|
+
raise ValueError("Only rolling update is supported for deployment. Stay tuned for more.")
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def restore_health_check(readiness_probe: V1JobHealthCheckConfig) -> Optional[Union[HttpHealthCheck, ExecHealthCheck]]:
|
|
323
|
+
if not readiness_probe:
|
|
324
|
+
return None
|
|
325
|
+
|
|
326
|
+
if readiness_probe.exec:
|
|
327
|
+
return ExecHealthCheck(
|
|
328
|
+
command=readiness_probe.exec.comand,
|
|
329
|
+
failure_threshold=readiness_probe.failure_threshold,
|
|
330
|
+
initial_delay_seconds=readiness_probe.initial_delay_seconds,
|
|
331
|
+
interval_seconds=readiness_probe.interval_seconds,
|
|
332
|
+
timeout_seconds=readiness_probe.timeout_seconds,
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
if readiness_probe.http_get:
|
|
336
|
+
return HttpHealthCheck(
|
|
337
|
+
path=readiness_probe.http_get.path,
|
|
338
|
+
port=readiness_probe.http_get.port,
|
|
339
|
+
failure_threshold=readiness_probe.failure_threshold,
|
|
340
|
+
initial_delay_seconds=readiness_probe.initial_delay_seconds,
|
|
341
|
+
interval_seconds=readiness_probe.interval_seconds,
|
|
342
|
+
timeout_seconds=readiness_probe.timeout_seconds,
|
|
343
|
+
)
|
|
344
|
+
return None
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def restore_auth(auth: Optional[V1EndpointAuth] = None) -> Optional[Auth]:
|
|
348
|
+
if not auth:
|
|
349
|
+
return None
|
|
350
|
+
|
|
351
|
+
if auth.username and auth.password:
|
|
352
|
+
return BasicAuth(username=auth.username, password=auth.password)
|
|
353
|
+
|
|
354
|
+
if auth.token:
|
|
355
|
+
return TokenAuth(token=auth.token)
|
|
356
|
+
return None
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def restore_autoscale(autoscaling: V1AutoscalingSpec) -> AutoScaleConfig:
|
|
360
|
+
return [
|
|
361
|
+
AutoScaleConfig(
|
|
362
|
+
min_replicas=autoscaling.min_replicas,
|
|
363
|
+
max_replicas=autoscaling.max_replicas,
|
|
364
|
+
target_metrics=autoscaling.target_metric,
|
|
365
|
+
idle_threshold_seconds=autoscaling.idle_threshold_seconds,
|
|
366
|
+
scale_down_cooldown_seconds=autoscaling.scale_down_cooldown_seconds,
|
|
367
|
+
scale_up_cooldown_seconds=autoscaling.scale_up_cooldown_seconds,
|
|
368
|
+
)
|
|
369
|
+
]
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def restore_env(env: List[V1EnvVar]) -> List[Union[Secret, Env]]:
|
|
373
|
+
return [Secret(name=e.from_secret) if e.from_secret else Env(name=e.name, value=e.value) for e in env]
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def to_env(env: Optional[List[Union[Secret, Env]]] = None) -> Optional[List[V1EnvVar]]:
|
|
377
|
+
if not env:
|
|
378
|
+
return None
|
|
379
|
+
|
|
380
|
+
return [
|
|
381
|
+
V1EnvVar(name=env.name, value=env.value) if isinstance(env, Env) else V1EnvVar(from_secret=env.name)
|
|
382
|
+
for env in env
|
|
383
|
+
]
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
def to_autoscaling(
|
|
387
|
+
autoscale_config: Optional[AutoScaleConfig] = None, replicas: Optional[int] = None
|
|
388
|
+
) -> V1AutoscalingSpec:
|
|
389
|
+
if not autoscale_config:
|
|
390
|
+
raise ValueError("An autoscaling config should be provided.")
|
|
391
|
+
|
|
392
|
+
min_replicas = autoscale_config.min_replicas
|
|
393
|
+
max_replicas = autoscale_config.max_replicas
|
|
394
|
+
metric = autoscale_config.metric
|
|
395
|
+
threshold = autoscale_config.threshold
|
|
396
|
+
target_metrics = autoscale_config.target_metrics
|
|
397
|
+
|
|
398
|
+
if isinstance(replicas, int) and replicas < 0:
|
|
399
|
+
raise ValueError("The number of replicas should be positive.")
|
|
400
|
+
|
|
401
|
+
if isinstance(min_replicas, int) and min_replicas < 0:
|
|
402
|
+
raise ValueError("The minimum number of replicas should be positive.")
|
|
403
|
+
|
|
404
|
+
if isinstance(max_replicas, int) and max_replicas < 0:
|
|
405
|
+
raise ValueError("The maximum number of replicas should be positive.")
|
|
406
|
+
|
|
407
|
+
if min_replicas is None:
|
|
408
|
+
if isinstance(replicas, int):
|
|
409
|
+
print(f"The `min_replicas` wasn't provided. Defaulting to replicas: {replicas}.")
|
|
410
|
+
else:
|
|
411
|
+
print("The `min_replicas` wasn't provided. Defaulting to 0.")
|
|
412
|
+
min_replicas = 0
|
|
413
|
+
|
|
414
|
+
if max_replicas is None:
|
|
415
|
+
if isinstance(replicas, int):
|
|
416
|
+
print(f"The `max_replicas` wasn't provided. Defaulting to replicas: {replicas}.")
|
|
417
|
+
else:
|
|
418
|
+
print("The `max_replicas` wasn't provided. Defaulting to 1.")
|
|
419
|
+
max_replicas = 1
|
|
420
|
+
|
|
421
|
+
if min_replicas < 0:
|
|
422
|
+
raise ValueError("The minimum number of replicas should be positive.")
|
|
423
|
+
|
|
424
|
+
if min_replicas > max_replicas:
|
|
425
|
+
raise ValueError("The minimum number of replicas should be smaller or equal to the maximum number of replicas.")
|
|
426
|
+
|
|
427
|
+
if (metric is not None or threshold is not None) and target_metrics is not None:
|
|
428
|
+
raise ValueError("Either metric and threshold, or target_metrics (for multiple) can be provided.")
|
|
429
|
+
|
|
430
|
+
if target_metrics is None and (metric is None or (isinstance(metric, str) and metric not in _METRICS)):
|
|
431
|
+
raise ValueError(f"The autoscaling metric is required. Currently supported metrics are {_METRICS}")
|
|
432
|
+
|
|
433
|
+
if target_metrics is None and threshold is None:
|
|
434
|
+
raise ValueError("The autoscaling threshold should be defined between 0 and 100.")
|
|
435
|
+
|
|
436
|
+
if target_metrics is None and (threshold < 0 or threshold > 100):
|
|
437
|
+
raise ValueError("The autoscaling threshold should be defined between 0 and 100.")
|
|
438
|
+
|
|
439
|
+
if target_metrics is not None and len(target_metrics) == 0:
|
|
440
|
+
raise ValueError("The target_metrics must be provided.")
|
|
441
|
+
|
|
442
|
+
if target_metrics is not None:
|
|
443
|
+
for target_metric in target_metrics:
|
|
444
|
+
if target_metric.name is None or target_metric.name not in _METRICS:
|
|
445
|
+
raise ValueError(f"The autoscaling metric is required. Currently supported metrics are {_METRICS}")
|
|
446
|
+
if target_metric.target is None or target_metric.target < 0 or target_metric.target > 100:
|
|
447
|
+
raise ValueError("The autoscaling threshold should be defined between 0 and 100.")
|
|
448
|
+
|
|
449
|
+
# convert to string after validation
|
|
450
|
+
target_metric.target = str(target_metric.target)
|
|
451
|
+
|
|
452
|
+
metrics = (
|
|
453
|
+
target_metrics
|
|
454
|
+
if target_metrics is not None
|
|
455
|
+
else [V1AutoscalingTargetMetric(name=metric, target=str(threshold))]
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
return V1AutoscalingSpec(
|
|
459
|
+
enabled=True,
|
|
460
|
+
min_replicas=min_replicas,
|
|
461
|
+
max_replicas=max_replicas,
|
|
462
|
+
target_metric=metrics,
|
|
463
|
+
idle_threshold_seconds=autoscale_config.idle_threshold_seconds,
|
|
464
|
+
scale_down_cooldown_seconds=autoscale_config.scale_down_cooldown_seconds,
|
|
465
|
+
scale_up_cooldown_seconds=autoscale_config.scale_up_cooldown_seconds,
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def to_endpoint_auth(auth: Optional[Auth] = None) -> Optional[V1EndpointAuth]:
|
|
470
|
+
if isinstance(auth, BasicAuth):
|
|
471
|
+
if auth.username == "":
|
|
472
|
+
raise ValueError("The username should be defined.")
|
|
473
|
+
|
|
474
|
+
if auth.password == "":
|
|
475
|
+
raise ValueError("The password should be defined.")
|
|
476
|
+
|
|
477
|
+
return V1EndpointAuth(enabled=True, username=auth.username, password=auth.password)
|
|
478
|
+
|
|
479
|
+
if isinstance(auth, TokenAuth):
|
|
480
|
+
if auth.token == "":
|
|
481
|
+
raise ValueError("The token should be defined.")
|
|
482
|
+
|
|
483
|
+
return V1EndpointAuth(enabled=True, token=auth.token)
|
|
484
|
+
return None
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
def to_endpoint(
|
|
488
|
+
ports: Optional[List[float]] = None, auth: Optional[Auth] = None, custom_domain: Optional[str] = None
|
|
489
|
+
) -> V1Endpoint:
|
|
490
|
+
if not ports:
|
|
491
|
+
raise ValueError("At least one port is required to reach your deployment.")
|
|
492
|
+
|
|
493
|
+
return V1Endpoint(
|
|
494
|
+
auth=to_endpoint_auth(auth),
|
|
495
|
+
custom_domain=custom_domain,
|
|
496
|
+
ports=[str(port) for port in ports],
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
def to_health_check(
|
|
501
|
+
health_check: Optional[Union[HttpHealthCheck, ExecHealthCheck]] = None
|
|
502
|
+
) -> Optional[V1JobHealthCheckConfig]:
|
|
503
|
+
if not health_check:
|
|
504
|
+
return None
|
|
505
|
+
|
|
506
|
+
health_check_config = V1JobHealthCheckConfig(
|
|
507
|
+
failure_threshold=health_check.failure_threshold,
|
|
508
|
+
initial_delay_seconds=health_check.initial_delay_seconds,
|
|
509
|
+
interval_seconds=health_check.interval_seconds,
|
|
510
|
+
timeout_seconds=health_check.timeout_seconds,
|
|
511
|
+
)
|
|
512
|
+
|
|
513
|
+
if isinstance(health_check, HttpHealthCheck):
|
|
514
|
+
health_check_config.http_get = V1HealthCheckHttpGet(
|
|
515
|
+
path=health_check.path,
|
|
516
|
+
port=health_check.port,
|
|
517
|
+
)
|
|
518
|
+
else:
|
|
519
|
+
health_check_config._exec = V1HealthCheckExec(command=health_check.command)
|
|
520
|
+
return health_check_config
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
def to_spec(
|
|
524
|
+
cloud_account: Optional[str],
|
|
525
|
+
machine: Optional[Machine],
|
|
526
|
+
environment: Optional[str],
|
|
527
|
+
entrypoint: Optional[str],
|
|
528
|
+
command: Optional[str],
|
|
529
|
+
spot: Optional[bool] = False,
|
|
530
|
+
env: Optional[List[Union[Secret, Env]]] = None,
|
|
531
|
+
health_check: Optional[Union[HttpHealthCheck, ExecHealthCheck]] = None,
|
|
532
|
+
) -> V1JobSpec:
|
|
533
|
+
if cloud_account is None:
|
|
534
|
+
raise ValueError("The cloud account should be defined.")
|
|
535
|
+
|
|
536
|
+
if machine is None:
|
|
537
|
+
raise ValueError("The machine should be defined.")
|
|
538
|
+
|
|
539
|
+
if environment is None:
|
|
540
|
+
raise ValueError("The environment should be defined.")
|
|
541
|
+
|
|
542
|
+
return V1JobSpec(
|
|
543
|
+
cluster_id=cloud_account,
|
|
544
|
+
command=command,
|
|
545
|
+
entrypoint=entrypoint,
|
|
546
|
+
env=to_env(env),
|
|
547
|
+
image=environment,
|
|
548
|
+
spot=spot,
|
|
549
|
+
instance_name=_MACHINE_TO_COMPUTE_NAME[machine],
|
|
550
|
+
readiness_probe=to_health_check(health_check),
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
def to_strategy(strategy: Optional[ReleaseStrategy]) -> None:
|
|
555
|
+
if isinstance(strategy, RollingUpdateReleaseStrategy):
|
|
556
|
+
return V1DeploymentStrategy(
|
|
557
|
+
rolling_update=V1RollingUpdateStrategy(
|
|
558
|
+
max_surge=strategy.max_surge,
|
|
559
|
+
max_unavailable=strategy.max_unavailable,
|
|
560
|
+
),
|
|
561
|
+
type="rolling_update",
|
|
562
|
+
)
|
|
563
|
+
return None
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
def apply_change(spec: Any, key: str, value: Any) -> bool:
|
|
567
|
+
if value is None:
|
|
568
|
+
return False
|
|
569
|
+
|
|
570
|
+
if getattr(spec, key) != value:
|
|
571
|
+
setattr(spec, key, value)
|
|
572
|
+
return True
|
|
573
|
+
|
|
574
|
+
return False
|