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,223 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from time import sleep
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
import requests
|
|
7
|
+
import urllib3
|
|
8
|
+
|
|
9
|
+
from lightning_sdk.api.utils import _FileUploader
|
|
10
|
+
from lightning_sdk.lightning_cloud.login import Auth
|
|
11
|
+
from lightning_sdk.lightning_cloud.openapi import CommandArgumentCommandArgumentType
|
|
12
|
+
from lightning_sdk.lightning_cloud.rest_client import LightningClient
|
|
13
|
+
from lightning_sdk.services.utilities import _get_cluster, _get_project, _get_service_url
|
|
14
|
+
from lightning_sdk.utils.resolve import _resolve_deprecated_cluster
|
|
15
|
+
|
|
16
|
+
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
17
|
+
|
|
18
|
+
_LIGHTNING_SERVICE_EXECUTION_ID_HEADER = "X-Lightning-Service-Execution-Id"
|
|
19
|
+
_AUTHORIZATION_HEADER = "Authorization"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Client:
|
|
23
|
+
"""This class is used to communicate with the File Endpoint."""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
name: str,
|
|
28
|
+
teamspace: Optional[str],
|
|
29
|
+
cloud_account: Optional[str] = None,
|
|
30
|
+
cluster_id: Optional[str] = None, # deprecated in favor of cloud_account
|
|
31
|
+
) -> None:
|
|
32
|
+
"""Constructor of the Client.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
name: The name of the Studio File Endpoint Service.
|
|
36
|
+
teamspace: The name of the teamspace you want to attach the upload data and artifacts to be.
|
|
37
|
+
cloud_account: The name of the cloud account on which to upload the data.
|
|
38
|
+
|
|
39
|
+
"""
|
|
40
|
+
cloud_account = _resolve_deprecated_cluster(cloud_account, cluster_id)
|
|
41
|
+
|
|
42
|
+
self._auth = Auth()
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
self._auth.authenticate()
|
|
46
|
+
except ConnectionError as e:
|
|
47
|
+
raise e
|
|
48
|
+
|
|
49
|
+
self._name = name
|
|
50
|
+
self._teamspace = teamspace
|
|
51
|
+
self._client = LightningClient()
|
|
52
|
+
self._project = _get_project(client=self._client, project_name=teamspace)
|
|
53
|
+
self._cloud_account = _get_cluster(
|
|
54
|
+
client=self._client, project_id=self._project.project_id, cluster_id=cloud_account
|
|
55
|
+
)
|
|
56
|
+
self._file_endpoint = self._client.endpoint_service_get_file_endpoint_by_name(
|
|
57
|
+
project_id=self._project.project_id, name=self._name
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
self.headers = {_AUTHORIZATION_HEADER: f"Bearer {self._auth.api_key}"}
|
|
61
|
+
|
|
62
|
+
self._arguments = []
|
|
63
|
+
for argument in self._file_endpoint.arguments:
|
|
64
|
+
self._arguments.append(Argument(**argument.to_dict()))
|
|
65
|
+
|
|
66
|
+
self.url = _get_service_url(self._file_endpoint.cloudspace_id, self._file_endpoint.id)
|
|
67
|
+
|
|
68
|
+
def run(
|
|
69
|
+
self,
|
|
70
|
+
**kwargs: Dict[str, str],
|
|
71
|
+
) -> None:
|
|
72
|
+
"""The run method executes the file endpoint.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
kwargs: The keyword arguments associated to the service
|
|
76
|
+
|
|
77
|
+
"""
|
|
78
|
+
for argument in self._arguments:
|
|
79
|
+
if argument.is_file:
|
|
80
|
+
if argument.name not in kwargs:
|
|
81
|
+
raise ValueError(f"This endpoint expects a file for the argument `{argument.name}`.")
|
|
82
|
+
value = kwargs[argument.name]
|
|
83
|
+
if not os.path.isfile(value):
|
|
84
|
+
raise ValueError(f"This endpoint expects a file for the argument `{argument.name}`.")
|
|
85
|
+
else:
|
|
86
|
+
if argument.name not in kwargs:
|
|
87
|
+
raise ValueError(f"This endpoint expects a value for the argument `{argument.name}`.")
|
|
88
|
+
value = kwargs[argument.name]
|
|
89
|
+
if os.path.isfile(value):
|
|
90
|
+
raise ValueError(f"This endpoint doesn't expect a file for `{argument.name}`.")
|
|
91
|
+
|
|
92
|
+
argument.value = str(Path(value).resolve())
|
|
93
|
+
|
|
94
|
+
missing_names = [v.name for v in self._arguments if v.value is None]
|
|
95
|
+
if missing_names:
|
|
96
|
+
raise ValueError(f"You are missing values for the following arguments: {missing_names}")
|
|
97
|
+
|
|
98
|
+
# Avoid uploading duplicated files
|
|
99
|
+
files_to_upload = {}
|
|
100
|
+
for argument in self._arguments:
|
|
101
|
+
if not argument.should_upload:
|
|
102
|
+
continue
|
|
103
|
+
files_to_upload[argument.value] = argument
|
|
104
|
+
|
|
105
|
+
# TODO: Verify if the file exists in Teampace and avoid uploading if already there.
|
|
106
|
+
for argument in files_to_upload.values():
|
|
107
|
+
_FileUploader(
|
|
108
|
+
client=self._client,
|
|
109
|
+
teamspace_id=self._project.project_id,
|
|
110
|
+
cloud_account=self._cloud_account.cluster_id,
|
|
111
|
+
file_path=argument.value,
|
|
112
|
+
progress_bar=True,
|
|
113
|
+
remote_path=_sanitize_uploads_remote_path(argument.value),
|
|
114
|
+
)()
|
|
115
|
+
|
|
116
|
+
json = {
|
|
117
|
+
"teamspace_id": self._project.project_id,
|
|
118
|
+
"cluster_id": self._cloud_account.cluster_id,
|
|
119
|
+
"input": {},
|
|
120
|
+
}
|
|
121
|
+
for argument in self._arguments:
|
|
122
|
+
json["input"].update(**argument.to_dict())
|
|
123
|
+
|
|
124
|
+
response = requests.post(self.url, json=json, headers=self.headers)
|
|
125
|
+
if response.status_code != 200:
|
|
126
|
+
raise Exception(f"The endpoint isn't reachable. Status code: {response.status_code}")
|
|
127
|
+
|
|
128
|
+
self.headers = {
|
|
129
|
+
**self.headers,
|
|
130
|
+
_LIGHTNING_SERVICE_EXECUTION_ID_HEADER: response.headers[_LIGHTNING_SERVICE_EXECUTION_ID_HEADER],
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
self._check_progress(response.json())
|
|
134
|
+
|
|
135
|
+
def _check_progress(self, data: Dict[str, str]) -> Dict[str, str]:
|
|
136
|
+
"""Check the current Studio status."""
|
|
137
|
+
while True:
|
|
138
|
+
url = f"{self.url}?run_id={data['run_id']}"
|
|
139
|
+
response = requests.post(url, headers=self.headers)
|
|
140
|
+
|
|
141
|
+
if response.status_code != 200:
|
|
142
|
+
raise Exception(f"The file endpoint had an error. Status code: {response.status_code}")
|
|
143
|
+
|
|
144
|
+
data = response.json()
|
|
145
|
+
|
|
146
|
+
# Display the progress status to the user.
|
|
147
|
+
print(data)
|
|
148
|
+
|
|
149
|
+
if data["stage"] == "completed":
|
|
150
|
+
break
|
|
151
|
+
|
|
152
|
+
if data["stage"] == "failed":
|
|
153
|
+
# TODO: Add more information on why the execution failed.
|
|
154
|
+
raise RuntimeError("The Studio File Endpoint failed")
|
|
155
|
+
|
|
156
|
+
# Wait until making the next request
|
|
157
|
+
sleep(3)
|
|
158
|
+
|
|
159
|
+
return data
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class Argument:
|
|
163
|
+
"""A holder for the service argument."""
|
|
164
|
+
|
|
165
|
+
def __init__(self, name: str, type: CommandArgumentCommandArgumentType, **kwargs: Any) -> None: # noqa: A002
|
|
166
|
+
self._name = name
|
|
167
|
+
self._type = type
|
|
168
|
+
self._value = None
|
|
169
|
+
self._kwargs = kwargs
|
|
170
|
+
|
|
171
|
+
@property
|
|
172
|
+
def is_text(self) -> bool:
|
|
173
|
+
"""Whether this argument is of type Text."""
|
|
174
|
+
return self._type == CommandArgumentCommandArgumentType.TEXT
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def is_file(self) -> bool:
|
|
178
|
+
"""Whether this argument is of type File."""
|
|
179
|
+
return self._type == CommandArgumentCommandArgumentType.FILE
|
|
180
|
+
|
|
181
|
+
@property
|
|
182
|
+
def value(self) -> Any:
|
|
183
|
+
"""Returns the value."""
|
|
184
|
+
return self._value
|
|
185
|
+
|
|
186
|
+
@value.setter
|
|
187
|
+
def value(self, value: Any) -> None:
|
|
188
|
+
"""Store the value."""
|
|
189
|
+
if self.is_file and not os.path.exists(value):
|
|
190
|
+
raise ValueError(f"The argument {self._name} should be a valid file.")
|
|
191
|
+
self._value = value
|
|
192
|
+
|
|
193
|
+
@property
|
|
194
|
+
def name(self) -> str:
|
|
195
|
+
"""Returns the name."""
|
|
196
|
+
return self._name
|
|
197
|
+
|
|
198
|
+
def to_dict(self) -> Dict[str, str]:
|
|
199
|
+
"""Convert the argument into its OpenAPI dataclass counterpart."""
|
|
200
|
+
if self.is_text:
|
|
201
|
+
return {self._name: str(self._value)}
|
|
202
|
+
|
|
203
|
+
if self.should_upload:
|
|
204
|
+
return {self._name: f"/teamspace/Uploads/{os.path.basename(self._value)}"}
|
|
205
|
+
|
|
206
|
+
return {self._name: self._value}
|
|
207
|
+
|
|
208
|
+
@property
|
|
209
|
+
def should_upload(self) -> bool:
|
|
210
|
+
"""Whether the file should be uploaded."""
|
|
211
|
+
if not self.is_file:
|
|
212
|
+
return False
|
|
213
|
+
|
|
214
|
+
value = str(Path(self.value).resolve())
|
|
215
|
+
if value.startswith("/teamspace/"):
|
|
216
|
+
return False
|
|
217
|
+
|
|
218
|
+
return True
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _sanitize_uploads_remote_path(file_path: str) -> str:
|
|
222
|
+
remote_path = os.path.basename(file_path)
|
|
223
|
+
return f"/Uploads/{remote_path}"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
from lightning_sdk.services.file_endpoint import Client
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class LLMFinetune(Client):
|
|
7
|
+
"""The LLM Finetune is the client to the LLM Finetune Service Studio.
|
|
8
|
+
|
|
9
|
+
Learn more: https://lightning.ai/lightning-ai/studios/llm-finetune-service~01h5rahq6gbhw5m4bzyws0at5h.
|
|
10
|
+
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
def __init__(self, teamspace: str) -> None:
|
|
14
|
+
super().__init__(name="lightning-al/llm-finetunes", teamspace=teamspace)
|
|
15
|
+
|
|
16
|
+
def run(
|
|
17
|
+
self,
|
|
18
|
+
data_path: str,
|
|
19
|
+
model: Literal["llama-2-7b", "tiny-llama"] = "tiny-llama",
|
|
20
|
+
mode: Literal["lora", "full"] = "lora",
|
|
21
|
+
epochs: int = 3,
|
|
22
|
+
learning_rate: float = 0.0002,
|
|
23
|
+
micro_batch_size: int = 2,
|
|
24
|
+
global_batch_size: int = 8,
|
|
25
|
+
) -> None:
|
|
26
|
+
"""The run method executes the LLM Finetune Service."""
|
|
27
|
+
super().run(
|
|
28
|
+
data_path=data_path,
|
|
29
|
+
model=model,
|
|
30
|
+
mode=mode,
|
|
31
|
+
epochs=epochs,
|
|
32
|
+
learning_rate=learning_rate,
|
|
33
|
+
micro_batch_size=micro_batch_size,
|
|
34
|
+
global_batch_size=global_batch_size,
|
|
35
|
+
)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import os
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import requests
|
|
6
|
+
import urllib3
|
|
7
|
+
|
|
8
|
+
from lightning_sdk.api.utils import _get_cloud_url
|
|
9
|
+
from lightning_sdk.lightning_cloud.openapi import V1Membership
|
|
10
|
+
from lightning_sdk.lightning_cloud.rest_client import LightningClient
|
|
11
|
+
|
|
12
|
+
_CHUNK_SIZE = 1024 * 1024
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _get_project(client: LightningClient, project_name: Optional[str] = None) -> V1Membership:
|
|
16
|
+
"""Get a project membership for the user from the backend."""
|
|
17
|
+
projects = client.projects_service_list_memberships()
|
|
18
|
+
if len(projects.memberships) == 0:
|
|
19
|
+
raise ValueError("No valid projects found. Please reach out to lightning.ai team to create a project")
|
|
20
|
+
|
|
21
|
+
if project_name is None:
|
|
22
|
+
return projects.memberships[0]
|
|
23
|
+
|
|
24
|
+
matches = []
|
|
25
|
+
for membership in projects.memberships:
|
|
26
|
+
if membership.name == project_name or membership.display_name == project_name:
|
|
27
|
+
matches.append(membership)
|
|
28
|
+
|
|
29
|
+
if len(matches) == 1:
|
|
30
|
+
return matches[0]
|
|
31
|
+
|
|
32
|
+
if len(matches) >= 2:
|
|
33
|
+
raise ValueError(f"We found several teamspaces. Which one do you want to use {[m.name for m in matches]}")
|
|
34
|
+
|
|
35
|
+
raise ValueError("No valid projects found. Please reach out to lightning.ai team to create a project")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _get_cluster(client: LightningClient, project_id: str, cluster_id: Optional[str] = None) -> V1Membership:
|
|
39
|
+
"""Get a project membership for the user from the backend."""
|
|
40
|
+
clusters = client.projects_service_list_project_cluster_bindings(project_id=project_id)
|
|
41
|
+
if cluster_id:
|
|
42
|
+
for cluster in clusters.clusters:
|
|
43
|
+
if cluster.cluster_id == cluster_id:
|
|
44
|
+
return cluster
|
|
45
|
+
raise ValueError(
|
|
46
|
+
f"No valid cluster found with the provided {cluster_id}."
|
|
47
|
+
f"Found {[c.cluster_id for c in clusters.clusters]}."
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
clusters = sorted(clusters.clusters, key=lambda x: x.created_at)
|
|
51
|
+
if len(clusters):
|
|
52
|
+
return clusters[0]
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _get_service_url(cloud_space_id: str, file_endpoint_id: str) -> str:
|
|
57
|
+
url = _get_cloud_url()
|
|
58
|
+
domain = _get_domain(url)
|
|
59
|
+
protocol = _get_protocol(url)
|
|
60
|
+
return f"{protocol}//{file_endpoint_id}-{cloud_space_id}.cloudspaces.{domain}"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _get_domain(url: str) -> str:
|
|
64
|
+
base_url = url.split("//")[1].split("/")[0]
|
|
65
|
+
if "localhost:9800" in base_url:
|
|
66
|
+
return "local.litng.ai:8118"
|
|
67
|
+
if "lightning.ai" in base_url and "localhost:8888" in base_url:
|
|
68
|
+
return "litng.ai"
|
|
69
|
+
return base_url
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _get_protocol(url: str) -> str:
|
|
73
|
+
return url.split("//")[0]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def download_file(filepath: str, cache_dir: str = "/cache") -> str:
|
|
77
|
+
"""Download the file passed to the service execution by the user."""
|
|
78
|
+
service_id = os.getenv("LIGHTNING_SERVICE_EXECUTION_ID")
|
|
79
|
+
|
|
80
|
+
if service_id is None:
|
|
81
|
+
raise RuntimeError("The ServiceId is required. Please reach out to lightning.ai team.")
|
|
82
|
+
|
|
83
|
+
# Note: Make the function idempotent
|
|
84
|
+
prefix = os.path.join(cache_dir, service_id)
|
|
85
|
+
if not filepath.startswith(prefix):
|
|
86
|
+
saved_filepath = filepath
|
|
87
|
+
if saved_filepath.startswith("/"):
|
|
88
|
+
saved_filepath = saved_filepath[1:]
|
|
89
|
+
saved_filepath = os.path.join(prefix, saved_filepath)
|
|
90
|
+
else:
|
|
91
|
+
saved_filepath = filepath
|
|
92
|
+
filepath = filepath.replace(prefix, "")
|
|
93
|
+
|
|
94
|
+
if os.path.exists(saved_filepath):
|
|
95
|
+
return saved_filepath
|
|
96
|
+
|
|
97
|
+
client = LightningClient(retry=False)
|
|
98
|
+
download_artifacts = client.endpoint_service_download_service_execution_artifact(
|
|
99
|
+
project_id=os.getenv("LIGHTNING_CLOUD_PROJECT_ID"), id=service_id, page_token=None, filepath=filepath
|
|
100
|
+
)
|
|
101
|
+
artifact = download_artifacts.artifacts[0]
|
|
102
|
+
|
|
103
|
+
os.makedirs(os.path.dirname(saved_filepath), exist_ok=True)
|
|
104
|
+
|
|
105
|
+
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
106
|
+
with contextlib.suppress(ConnectionError):
|
|
107
|
+
request = requests.get(artifact.url, stream=True, verify=False)
|
|
108
|
+
with open(saved_filepath, "wb") as fp:
|
|
109
|
+
for chunk in request.iter_content(chunk_size=_CHUNK_SIZE):
|
|
110
|
+
fp.write(chunk) # type: ignore
|
|
111
|
+
return saved_filepath
|
lightning_sdk/status.py
CHANGED
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
|
-
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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."""
|