lightning-sdk 0.1.49__py3-none-any.whl → 2025.11.5__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 +19 -9
- lightning_sdk/__version__.py +3 -0
- lightning_sdk/agents.py +2 -1
- lightning_sdk/ai_hub.py +43 -38
- lightning_sdk/api/__init__.py +2 -0
- lightning_sdk/api/ai_hub_api.py +49 -6
- lightning_sdk/api/base_studio_api.py +90 -0
- lightning_sdk/api/cloud_account_api.py +225 -0
- lightning_sdk/api/deployment_api.py +133 -27
- lightning_sdk/api/job_api.py +147 -34
- lightning_sdk/api/license_api.py +37 -0
- lightning_sdk/api/lit_container_api.py +231 -19
- lightning_sdk/api/llm_api.py +306 -0
- lightning_sdk/api/mmt_api.py +112 -28
- lightning_sdk/api/pipeline_api.py +120 -0
- lightning_sdk/api/studio_api.py +440 -89
- lightning_sdk/api/teamspace_api.py +269 -31
- lightning_sdk/api/user_api.py +56 -2
- lightning_sdk/api/utils.py +185 -52
- lightning_sdk/base_studio.py +123 -0
- lightning_sdk/cli/__init__.py +1 -0
- lightning_sdk/cli/base_studio/__init__.py +10 -0
- lightning_sdk/cli/base_studio/list.py +43 -0
- lightning_sdk/cli/config/__init__.py +14 -0
- lightning_sdk/cli/config/get.py +57 -0
- lightning_sdk/cli/config/set.py +92 -0
- lightning_sdk/cli/config/show.py +9 -0
- lightning_sdk/cli/entrypoint.py +98 -56
- lightning_sdk/cli/groups.py +56 -0
- lightning_sdk/cli/job/__init__.py +7 -0
- lightning_sdk/cli/legacy/__init__.py +0 -0
- lightning_sdk/cli/legacy/ai_hub.py +65 -0
- lightning_sdk/cli/legacy/clusters_menu.py +49 -0
- lightning_sdk/cli/legacy/configure.py +129 -0
- lightning_sdk/cli/legacy/connect.py +34 -0
- lightning_sdk/cli/legacy/create.py +115 -0
- lightning_sdk/cli/legacy/delete.py +131 -0
- lightning_sdk/cli/legacy/deploy/__init__.py +0 -0
- lightning_sdk/cli/legacy/deploy/_auth.py +196 -0
- lightning_sdk/cli/legacy/deploy/devbox.py +163 -0
- lightning_sdk/cli/legacy/deploy/serve.py +452 -0
- lightning_sdk/cli/legacy/docker_cli.py +22 -0
- lightning_sdk/cli/legacy/download.py +322 -0
- lightning_sdk/cli/legacy/entrypoint.py +110 -0
- lightning_sdk/cli/legacy/generate.py +52 -0
- lightning_sdk/cli/legacy/inspection.py +45 -0
- lightning_sdk/cli/{job_and_mmt_action.py → legacy/job_and_mmt_action.py} +6 -6
- lightning_sdk/cli/{jobs_menu.py → legacy/jobs_menu.py} +3 -2
- lightning_sdk/cli/legacy/list.py +326 -0
- lightning_sdk/cli/{mmts_menu.py → legacy/mmts_menu.py} +3 -2
- lightning_sdk/cli/legacy/open.py +81 -0
- lightning_sdk/cli/legacy/run.py +443 -0
- lightning_sdk/cli/legacy/start.py +107 -0
- lightning_sdk/cli/legacy/stop.py +107 -0
- lightning_sdk/cli/{studios_menu.py → legacy/studios_menu.py} +24 -1
- lightning_sdk/cli/legacy/switch.py +63 -0
- lightning_sdk/cli/{teamspace_menu.py → legacy/teamspace_menu.py} +12 -3
- lightning_sdk/cli/legacy/upload.py +382 -0
- lightning_sdk/cli/license/__init__.py +14 -0
- lightning_sdk/cli/license/get.py +15 -0
- lightning_sdk/cli/license/list.py +45 -0
- lightning_sdk/cli/license/set.py +13 -0
- lightning_sdk/cli/mmt/__init__.py +7 -0
- lightning_sdk/cli/studio/__init__.py +24 -0
- lightning_sdk/cli/studio/connect.py +139 -0
- lightning_sdk/cli/studio/create.py +96 -0
- lightning_sdk/cli/studio/delete.py +49 -0
- lightning_sdk/cli/studio/list.py +85 -0
- lightning_sdk/cli/studio/ssh.py +64 -0
- lightning_sdk/cli/studio/start.py +115 -0
- lightning_sdk/cli/studio/stop.py +45 -0
- lightning_sdk/cli/studio/switch.py +66 -0
- lightning_sdk/cli/utils/__init__.py +7 -0
- lightning_sdk/cli/utils/cloud_account_map.py +10 -0
- lightning_sdk/cli/utils/coloring.py +60 -0
- lightning_sdk/cli/utils/get_base_studio.py +24 -0
- lightning_sdk/cli/utils/handle_machine_and_gpus_args.py +69 -0
- lightning_sdk/cli/utils/logging.py +122 -0
- lightning_sdk/cli/utils/owner_selection.py +110 -0
- lightning_sdk/cli/utils/resolve.py +28 -0
- lightning_sdk/cli/utils/richt_print.py +35 -0
- lightning_sdk/cli/utils/save_to_config.py +27 -0
- lightning_sdk/cli/utils/ssh_connection.py +59 -0
- lightning_sdk/cli/utils/studio_selection.py +113 -0
- lightning_sdk/cli/utils/teamspace_selection.py +125 -0
- lightning_sdk/cli/vm/__init__.py +20 -0
- lightning_sdk/cli/vm/create.py +33 -0
- lightning_sdk/cli/vm/delete.py +25 -0
- lightning_sdk/cli/vm/list.py +30 -0
- lightning_sdk/cli/vm/ssh.py +31 -0
- lightning_sdk/cli/vm/start.py +60 -0
- lightning_sdk/cli/vm/stop.py +25 -0
- lightning_sdk/cli/vm/switch.py +38 -0
- lightning_sdk/constants.py +1 -0
- lightning_sdk/deployment/__init__.py +4 -0
- lightning_sdk/deployment/deployment.py +208 -28
- lightning_sdk/helpers.py +73 -34
- lightning_sdk/job/base.py +112 -12
- lightning_sdk/job/job.py +73 -44
- lightning_sdk/job/v1.py +28 -35
- lightning_sdk/job/v2.py +54 -17
- lightning_sdk/job/work.py +7 -3
- lightning_sdk/lightning_cloud/login.py +325 -18
- lightning_sdk/lightning_cloud/openapi/__init__.py +346 -26
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +14 -0
- lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1801 -384
- lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py +376 -0
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +414 -2
- lightning_sdk/lightning_cloud/openapi/api/blog_posts_service_api.py +533 -0
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py +638 -0
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +2563 -866
- lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py +327 -0
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +1720 -347
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +210 -4
- lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +126 -2119
- lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +283 -0
- lightning_sdk/lightning_cloud/openapi/api/git_credentials_service_api.py +497 -0
- lightning_sdk/lightning_cloud/openapi/api/incidents_service_api.py +1058 -0
- lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +2326 -492
- lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +2273 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_dataset_service_api.py +1973 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +17 -5
- lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +473 -5
- lightning_sdk/lightning_cloud/openapi/api/markets_service_api.py +145 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +24 -24
- lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +105 -0
- lightning_sdk/lightning_cloud/openapi/api/pipeline_templates_service_api.py +339 -0
- lightning_sdk/lightning_cloud/openapi/api/pipelines_service_api.py +795 -0
- lightning_sdk/lightning_cloud/openapi/api/product_license_service_api.py +525 -0
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +106 -5
- lightning_sdk/lightning_cloud/openapi/api/schedules_service_api.py +924 -0
- lightning_sdk/lightning_cloud/openapi/api/sdk_command_history_service_api.py +141 -0
- lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +202 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1508 -251
- lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +121 -97
- lightning_sdk/lightning_cloud/openapi/api/volume_service_api.py +258 -0
- lightning_sdk/lightning_cloud/openapi/configuration.py +4 -20
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +332 -26
- lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/agents_id_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/alertingevents_id_body.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/alerts_config_billing.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/alerts_config_studios.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +303 -17
- lightning_sdk/lightning_cloud/openapi/models/blogposts_id_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_systemmetrics_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_visibility_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_kubernetestemplates_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_metrics_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_slurmusers_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_usagerestrictions_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/conversations_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/create.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/create_machine_request_represents_the_request_to_create_a_machine.py +461 -0
- lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/dataset_id_versions_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/dataset_id_visibility_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/deployment_id_alertingpolicies_body.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/deployment_id_alertingpolicies_body1.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +315 -3
- lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +199 -69
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cluster.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +1 -53
- lightning_sdk/lightning_cloud/openapi/models/id_contactowner_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/id_render_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_reportrestarttimings_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_sleepconfig_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_transfer_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body2.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/incident_id_messages_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/incidents_id_body.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_service_executions_response.py → job_id_reportroutingtelemetry_body.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/kubernetestemplates_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/license_key_validate_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/litdatasets_dataset_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/litregistry_lit_repo_name_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/message_id_actions_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/messages_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/messages_message_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/model_id_versions_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/models_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +109 -31
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +627 -3
- lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/pipelinetemplates_id_body.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_agents_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_litdatasets_body.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_pipelines_body.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_schedules_body.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_storage_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_storagetransfers_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_tab_management_messages.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +523 -3
- lightning_sdk/lightning_cloud/openapi/models/{service_artifact_artifact_kind.py → protobuf_null_value.py} +7 -9
- lightning_sdk/lightning_cloud/openapi/models/schedules_id_body.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/server_id_alerts_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/setup.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +93 -15
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +41 -15
- lightning_sdk/lightning_cloud/openapi/models/storagetransfers_validate_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/update.py +233 -129
- lightning_sdk/lightning_cloud/openapi/models/update1.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body1.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/usagerestrictions_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/user_id_upgradetrigger_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/user_user_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_abort_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +188 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_aggregated_pod_metrics.py +799 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ai_pod_v1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_alert_method.py +102 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_alerts_config.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_artifact.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +6 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_session_daily_aggregated.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_author.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_billing_subscription.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_billing_tier.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_blog_post.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cancel_running_cloud_space_instance_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_check_cluster_name_availability_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_check_cluster_name_availability_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +117 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +313 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_artifact_event.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_artifact_event_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_cold_start_metrics.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_cold_start_metrics_stats.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_config.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_session.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_source_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_state.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_transfer_metadata.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudflare_v1.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_expert.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_settings.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +211 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_deletion_options.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_metrics.py +1527 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +521 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_service_execution_artifact_response.py → v1_cluster_upload.py} +34 -34
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_usage_restriction.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_lit_dataset_multi_part_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_lit_dataset_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_running_cloud_space_instance_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{id_complete_body.py → v1_complete_upload_temporary_artifact_request.py} +29 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_contact_assistant_owner_reason.py +102 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_contact_assistant_owner_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_container_metrics.py +461 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_create_billing_upgrade_trigger_record_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_blog_post_request.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cloud_space_environment_template_request.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_capacity_reservation_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_request.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_git_credentials_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_incident_request.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_job_request.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_license_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_lit_dataset_multi_part_upload_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_machine_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_managed_endpoint_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_model_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_machine_job_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_pipeline_template_request.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_server_alert_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_subscription_checkout_session_request.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_daily_model_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_daily_usage.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +261 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection_tier.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_blog_post_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_environment_template_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_usage_restriction_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_alerting_policy_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_git_credentials_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_message_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_kubernetes_template_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_license_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_dataset_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_dataset_version_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_registry_repository_image_artifact_version_by_digest_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_machine_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_file_endpoint_response.py → v1_delete_pipeline_response.py} +25 -25
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_schedule_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +315 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_event.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_frequency.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_operation.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_severity.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_type.py +112 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_recipients.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_details.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +4 -2
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +47 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +931 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_filestore_data_connection.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metric.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metrics.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_mmt.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/{id_uploads_body1.py → v1_firewall_rule.py} +53 -53
- lightning_sdk/lightning_cloud/openapi/models/v1_function_call.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_function_tool.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_file_endpoints_response.py → v1_gcp_data_connection_setup.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_gcp_direct_vpc.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ge_list_deployment_routing_telemetry_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_artifacts_page_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_get_assistant_session_daily_aggregated_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_cold_start_metrics_stats_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_instance_open_ports_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_instance_system_metrics_aggregate_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_required_balance_status_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_size_response.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_transfer_estimate_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_accelerator_demand_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_health_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_content_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_job_stats_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_latest_model_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_service_execution_artifact_parts_response.py → v1_get_lit_dataset_file_upload_urls_response.py} +16 -16
- lightning_sdk/lightning_cloud/openapi/models/v1_get_lit_dataset_files_url_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_machine_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_market_pricing_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_organization_storage_metadata_response.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +263 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_get_temp_bucket_credentials_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +235 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_volume_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_git_credentials.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +185 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_group_node_metrics.py +1215 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_group_pod_metrics.py +1241 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_request.py +177 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_service_artifact.py → v1_guest_user.py} +60 -60
- lightning_sdk/lightning_cloud/openapi/models/v1_incident.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_detail.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_event.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_message.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_severity.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_type.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_instance_overprovisioning_spec.py +95 -41
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +237 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_job_artifacts_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_resource.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_job_type.py +109 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_indexes.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kai_scheduler_queue_metrics.py +627 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_aws_config.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1_status.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template_property.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +67 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_license.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_elastic_cluster_v1.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_artifact.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_like_status.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_aggregated_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_download_service_execution_artifact_response.py → v1_list_blog_posts_response.py} +41 -41
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_cold_start_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_environment_templates_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloudy_experts_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metric_timestamps_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_user_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_usage_restrictions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_clusters_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_container_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_conversation_message_actions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_alerting_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_alerting_policies_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_mm_ts_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_git_credentials_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_group_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_messages_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incidents_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_job_resources_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kai_scheduler_queues_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_templates_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_license_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_dataset_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_datasets_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_registry_repository_image_artifact_versions_response.py +257 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_machines_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_node_file_system_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_node_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_notification_dialogs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_pipelines_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_platform_notifications_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_project_clusters_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_managed_endpoints_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_schedule_runs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_schedules_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_slurm_cluster_users_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_storage_transfers_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_dataset.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/{id_storage_body.py → v1_lit_dataset_file.py} +49 -49
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_dataset_version_archive.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_artifact.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +35 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +81 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lite_published_cloud_space_response.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lustre_data_connection.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine_direct_v1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +341 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_market_price.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +121 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_message.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_message_action.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_model.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_model_metrics.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_service_execution_response.py → v1_modify_filesystem_volume_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_namespace_metrics.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_namespace_user_metrics.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +695 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_notification_type.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +837 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_path_mapping.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pause_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_placement.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_placement_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_state.py +111 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step_status.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template_visibility_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_platform_notification.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +747 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_post_cloud_space_artifact_events_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +121 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +525 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +235 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_tab.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_quote_subscription_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_r2_data_connection.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_render_kubernetes_template_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_stop_at_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_system_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_deployment_routing_telemetry_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_k8s_cluster_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_restart_timings_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cloud_space_access_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_required_balance_reason.py +107 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reservation_details.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_request.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_response_choice.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_restart_timing.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resume_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_routing_telemetry.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +5 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/{command_argument_command_argument_type.py → v1_schedule_action_type.py} +9 -8
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule_resource_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule_run.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_severity.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_service_execution_status_response.py → v1_server_alert.py} +74 -48
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_phase.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_severity.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_type.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_service_health.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_setup_data_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_shared_filesystem.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sleep_server_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_cluster_user.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +84 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +31 -291
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +4 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer_status.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_subnet_spec.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_system_metrics_aggregated.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_login_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_login_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_owner_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_usage.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_tool.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_tool_call.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_transfer_cloud_space_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_trigger_filesystem_upgrade_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_instance_config_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_like_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_message_like_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_deployment_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_job_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_lit_dataset_visibility_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_lit_repository_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_complete_upload_service_execution_artifact_response.py → v1_update_organization_credits_auto_replenish_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_update_project_tab_order_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_credits_auto_replenish_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_volume_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upload_project_artifact_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_new_features_for_user_response.py → v1_upload_temporary_artifact_request.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_usage_report.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +894 -842
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_license_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_storage_transfer_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_voltage_park_direct_v1.py +229 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +513 -45
- lightning_sdk/lightning_cloud/openapi/models/v1_volume_state.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_weka_data_connection.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/validate.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/version_default_body.py +29 -29
- lightning_sdk/lightning_cloud/openapi/models/version_default_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/version_uploads_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/versions_version_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/volumes_id_body.py +123 -0
- lightning_sdk/lightning_cloud/rest_client.py +61 -48
- lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +8 -3
- lightning_sdk/lightning_cloud/utils/data_connection.py +234 -7
- lightning_sdk/lit_container.py +68 -9
- lightning_sdk/llm/__init__.py +3 -0
- lightning_sdk/llm/llm.py +497 -0
- lightning_sdk/llm/public_assistants.py +54 -0
- lightning_sdk/machine.py +221 -30
- lightning_sdk/mmt/base.py +67 -32
- lightning_sdk/mmt/mmt.py +68 -50
- lightning_sdk/mmt/v1.py +16 -32
- lightning_sdk/mmt/v2.py +47 -18
- lightning_sdk/models.py +74 -24
- lightning_sdk/organization.py +4 -0
- lightning_sdk/owner.py +2 -1
- lightning_sdk/pipeline/__init__.py +14 -0
- lightning_sdk/pipeline/pipeline.py +163 -0
- lightning_sdk/pipeline/printer.py +124 -0
- lightning_sdk/pipeline/schedule.py +859 -0
- lightning_sdk/pipeline/steps.py +365 -0
- lightning_sdk/pipeline/utils.py +116 -0
- lightning_sdk/plugin.py +39 -20
- lightning_sdk/sandbox.py +160 -0
- lightning_sdk/serve.py +309 -0
- lightning_sdk/services/__init__.py +1 -1
- lightning_sdk/services/file_endpoint.py +3 -4
- lightning_sdk/services/utilities.py +16 -2
- lightning_sdk/studio.py +515 -41
- lightning_sdk/teamspace.py +335 -30
- lightning_sdk/user.py +19 -1
- lightning_sdk/utils/config.py +179 -0
- lightning_sdk/utils/license.py +13 -0
- lightning_sdk/utils/logging.py +79 -0
- lightning_sdk/utils/names.py +1179 -0
- lightning_sdk/utils/progress.py +283 -0
- lightning_sdk/utils/resolve.py +149 -13
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/METADATA +14 -11
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/RECORD +649 -250
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/WHEEL +1 -1
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/entry_points.txt +1 -0
- lightning_sdk/cli/ai_hub.py +0 -49
- lightning_sdk/cli/delete.py +0 -58
- lightning_sdk/cli/download.py +0 -132
- lightning_sdk/cli/inspect.py +0 -31
- lightning_sdk/cli/legacy.py +0 -135
- lightning_sdk/cli/list.py +0 -112
- lightning_sdk/cli/run.py +0 -225
- lightning_sdk/cli/serve.py +0 -218
- lightning_sdk/cli/stop.py +0 -37
- lightning_sdk/cli/upload.py +0 -255
- lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +0 -409
- lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +0 -357
- lightning_sdk/lightning_cloud/openapi/models/project_id_serviceexecution_body.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +0 -331
- lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +0 -305
- lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +0 -279
- lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +0 -461
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +0 -383
- /lightning_sdk/cli/{exceptions.py → legacy/exceptions.py} +0 -0
- /lightning_sdk/services/{finetune/__init__.py → finetune_llm.py} +0 -0
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/LICENSE +0 -0
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/top_level.txt +0 -0
lightning_sdk/studio.py
CHANGED
|
@@ -1,25 +1,41 @@
|
|
|
1
|
+
import glob
|
|
1
2
|
import os
|
|
3
|
+
import threading
|
|
2
4
|
import warnings
|
|
3
|
-
from typing import TYPE_CHECKING, Any, Mapping, Optional, Tuple, Union
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Dict, Mapping, Optional, Tuple, Union
|
|
4
6
|
|
|
7
|
+
from tqdm.auto import tqdm
|
|
8
|
+
|
|
9
|
+
from lightning_sdk.api.cloud_account_api import CloudAccountApi
|
|
5
10
|
from lightning_sdk.api.studio_api import StudioApi
|
|
6
|
-
from lightning_sdk.
|
|
11
|
+
from lightning_sdk.base_studio import BaseStudio
|
|
7
12
|
from lightning_sdk.constants import _LIGHTNING_DEBUG
|
|
8
|
-
from lightning_sdk.
|
|
13
|
+
from lightning_sdk.lightning_cloud.openapi import V1ClusterType
|
|
14
|
+
from lightning_sdk.machine import DEFAULT_MACHINE, CloudProvider, Machine
|
|
9
15
|
from lightning_sdk.organization import Organization
|
|
10
16
|
from lightning_sdk.owner import Owner
|
|
11
17
|
from lightning_sdk.status import Status
|
|
12
18
|
from lightning_sdk.teamspace import Teamspace
|
|
13
19
|
from lightning_sdk.user import User
|
|
14
|
-
from lightning_sdk.utils.
|
|
20
|
+
from lightning_sdk.utils.logging import TrackCallsMeta
|
|
21
|
+
from lightning_sdk.utils.names import random_unique_name
|
|
22
|
+
from lightning_sdk.utils.resolve import (
|
|
23
|
+
_get_org_id,
|
|
24
|
+
_resolve_deprecated_cluster,
|
|
25
|
+
_resolve_deprecated_provider,
|
|
26
|
+
_resolve_teamspace,
|
|
27
|
+
_setup_logger,
|
|
28
|
+
)
|
|
15
29
|
|
|
16
30
|
if TYPE_CHECKING:
|
|
31
|
+
from lightning_sdk.job import Job
|
|
32
|
+
from lightning_sdk.mmt import MMT
|
|
17
33
|
from lightning_sdk.plugin import Plugin
|
|
18
34
|
|
|
19
35
|
_logger = _setup_logger(__name__)
|
|
20
36
|
|
|
21
37
|
|
|
22
|
-
class Studio:
|
|
38
|
+
class Studio(metaclass=TrackCallsMeta):
|
|
23
39
|
"""A single Lightning AI Studio.
|
|
24
40
|
|
|
25
41
|
Allows to fully control a studio, including retrieving the status, running commands
|
|
@@ -32,7 +48,14 @@ class Studio:
|
|
|
32
48
|
user: the name of the user owning the :param`teamspace` in case it is owned directly by a user instead of an org
|
|
33
49
|
cloud_account: the name of the cloud account, the studio should be created on.
|
|
34
50
|
Doesn't matter when the studio already exists.
|
|
51
|
+
cloud_account_provider: The provider to select the cloud-account from.
|
|
52
|
+
If set, must be in agreement with the provider from the cloud_account (if specified).
|
|
53
|
+
If not specified, falls back to the teamspace default cloud account.
|
|
35
54
|
create_ok: whether the studio will be created if it does not yet exist. Defaults to True
|
|
55
|
+
provider: the provider of the machine, the studio should be created on.
|
|
56
|
+
studio_type: Type of studio to create. Only effective during initial creation;
|
|
57
|
+
ignored for existing studios.
|
|
58
|
+
|
|
36
59
|
Note:
|
|
37
60
|
Since a teamspace can either be owned by an org or by a user directly,
|
|
38
61
|
only one of the arguments can be provided.
|
|
@@ -40,7 +63,11 @@ class Studio:
|
|
|
40
63
|
"""
|
|
41
64
|
|
|
42
65
|
# skips init of studio, only set when using this as a shell for names, ids etc.
|
|
43
|
-
_skip_init =
|
|
66
|
+
_skip_init = threading.local()
|
|
67
|
+
_skip_setup = threading.local()
|
|
68
|
+
|
|
69
|
+
# whether to show progress bars during operations
|
|
70
|
+
show_progress = False
|
|
44
71
|
|
|
45
72
|
def __init__(
|
|
46
73
|
self,
|
|
@@ -49,35 +76,123 @@ class Studio:
|
|
|
49
76
|
org: Optional[Union[str, Organization]] = None,
|
|
50
77
|
user: Optional[Union[str, User]] = None,
|
|
51
78
|
cloud_account: Optional[str] = None,
|
|
79
|
+
cloud_provider: Optional[Union[CloudProvider, str]] = None,
|
|
52
80
|
create_ok: bool = True,
|
|
53
81
|
cluster: Optional[str] = None, # deprecated in favor of cloud_account
|
|
82
|
+
source: Optional[str] = None,
|
|
83
|
+
disable_secrets: bool = False,
|
|
84
|
+
provider: Optional[Union[CloudProvider, str]] = None, # deprecated in favor of cloud_provider
|
|
85
|
+
studio_type: Optional[str] = None, # for base studio templates
|
|
54
86
|
) -> None:
|
|
55
87
|
self._studio_api = StudioApi()
|
|
88
|
+
self._cloud_account_api = CloudAccountApi()
|
|
89
|
+
|
|
90
|
+
self._prevent_refetch = False
|
|
91
|
+
self._teamspace = None
|
|
56
92
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
93
|
+
# don't resolve anything if we're skipping init
|
|
94
|
+
if not getattr(self._skip_init, "value", False):
|
|
95
|
+
_teamspace = _resolve_teamspace(teamspace=teamspace, org=org, user=user)
|
|
96
|
+
if _teamspace is None:
|
|
97
|
+
raise ValueError("Couldn't resolve teamspace from the provided name, org, or user")
|
|
98
|
+
|
|
99
|
+
self._teamspace = _teamspace
|
|
100
|
+
|
|
101
|
+
self._setup_done = getattr(self._skip_setup, "value", False)
|
|
102
|
+
self._disable_secrets = disable_secrets
|
|
60
103
|
|
|
61
104
|
self._plugins = {}
|
|
105
|
+
self._studio = None
|
|
106
|
+
|
|
107
|
+
# Check to see if we're inside a studio
|
|
108
|
+
current_studio = None
|
|
109
|
+
studio_id = os.environ.get("LIGHTNING_CLOUD_SPACE_ID", None)
|
|
110
|
+
if studio_id is not None and self._teamspace is not None:
|
|
111
|
+
# We're inside a studio, get it by ID
|
|
112
|
+
current_studio = self._studio_api.get_studio_by_id(studio_id=studio_id, teamspace_id=self._teamspace.id)
|
|
113
|
+
|
|
114
|
+
if cloud_account or not cloud_provider:
|
|
115
|
+
cloud_account = _resolve_deprecated_cluster(
|
|
116
|
+
cloud_account, cluster, current_studio.cluster_id if current_studio else None
|
|
117
|
+
)
|
|
118
|
+
cloud_provider = _resolve_deprecated_provider(cloud_provider, provider)
|
|
119
|
+
else:
|
|
120
|
+
cloud_provider = _resolve_deprecated_provider(cloud_provider, provider)
|
|
62
121
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
122
|
+
cls_name = self._cls_name
|
|
123
|
+
|
|
124
|
+
# if we're skipping init, we don't need to resolve the cloud account as then we're not creating a studio
|
|
125
|
+
if self._teamspace is not None:
|
|
126
|
+
_cloud_account = self._cloud_account_api.resolve_cloud_account(
|
|
127
|
+
self._teamspace.id,
|
|
128
|
+
cloud_account=cloud_account,
|
|
129
|
+
cloud_provider=cloud_provider,
|
|
130
|
+
default_cloud_account=self._teamspace.default_cloud_account,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
self._studio_type = None
|
|
134
|
+
if studio_type:
|
|
135
|
+
self._base_studio = BaseStudio(teamspace=self._teamspace)
|
|
136
|
+
self._available_base_studios = self._base_studio.list()
|
|
137
|
+
for bst in self._available_base_studios:
|
|
138
|
+
if (
|
|
139
|
+
bst.id == studio_type
|
|
140
|
+
or bst.name == studio_type
|
|
141
|
+
or bst.name.lower().replace(" ", "-") == studio_type
|
|
142
|
+
):
|
|
143
|
+
self._studio_type = bst.id
|
|
144
|
+
|
|
145
|
+
if not self._studio_type:
|
|
146
|
+
raise ValueError(
|
|
147
|
+
f"Could not find studio type with ID or name '{studio_type}'. "
|
|
148
|
+
f"Available studio types: "
|
|
149
|
+
f"{[bst.name.lower().replace(' ', '-') for bst in self._available_base_studios]}"
|
|
150
|
+
)
|
|
68
151
|
else:
|
|
152
|
+
if current_studio:
|
|
153
|
+
self._studio_type = current_studio.environment_template_id
|
|
154
|
+
|
|
155
|
+
# Resolve studio name if not provided: explicit → env (LIGHTNING_CLOUD_SPACE_ID) → config defaults
|
|
156
|
+
if name is None and not getattr(self._skip_init, "value", False):
|
|
157
|
+
if current_studio:
|
|
158
|
+
name = current_studio.name
|
|
159
|
+
else:
|
|
160
|
+
# Try config defaults
|
|
161
|
+
from lightning_sdk.utils.config import Config, DefaultConfigKeys
|
|
162
|
+
|
|
163
|
+
config = Config()
|
|
164
|
+
name = config.get_value(DefaultConfigKeys.studio)
|
|
165
|
+
if name is None and not create_ok:
|
|
166
|
+
raise ValueError(
|
|
167
|
+
f"Cannot autodetect {cls_name}. Either use the SDK from within a {cls_name} or pass a name!"
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
if self._studio is None and not getattr(self._skip_init, "value", False):
|
|
171
|
+
# If we have a name (explicit or from config), get studio by name
|
|
69
172
|
try:
|
|
173
|
+
if name is None:
|
|
174
|
+
# if we don't have a name, raise an error to get
|
|
175
|
+
# to the exception path and optionally create a studio
|
|
176
|
+
raise ValueError(
|
|
177
|
+
f"Cannot autodetect {cls_name}. Either use the SDK from within a {cls_name} or pass a name!"
|
|
178
|
+
)
|
|
70
179
|
self._studio = self._studio_api.get_studio(name, self._teamspace.id)
|
|
71
180
|
except ValueError as e:
|
|
72
181
|
if create_ok:
|
|
182
|
+
name = name or random_unique_name()
|
|
73
183
|
self._studio = self._studio_api.create_studio(
|
|
74
|
-
name,
|
|
184
|
+
name,
|
|
185
|
+
self._teamspace.id,
|
|
186
|
+
cloud_account=_cloud_account,
|
|
187
|
+
source=source,
|
|
188
|
+
disable_secrets=self._disable_secrets,
|
|
189
|
+
cloud_space_environment_template_id=self._studio_type,
|
|
75
190
|
)
|
|
76
191
|
else:
|
|
77
|
-
raise
|
|
192
|
+
raise e
|
|
78
193
|
|
|
79
194
|
if (
|
|
80
|
-
not self._skip_init
|
|
195
|
+
not getattr(self._skip_init, "value", False)
|
|
81
196
|
and _internal_status_to_external_status(
|
|
82
197
|
self._studio_api._get_studio_instance_status_from_object(self._studio)
|
|
83
198
|
)
|
|
@@ -133,7 +248,20 @@ class Studio:
|
|
|
133
248
|
"""Returns the current machine type the Studio is running on."""
|
|
134
249
|
if self.status != Status.Running:
|
|
135
250
|
return None
|
|
136
|
-
return self._studio_api.get_machine(
|
|
251
|
+
return self._studio_api.get_machine(
|
|
252
|
+
self._studio.id,
|
|
253
|
+
self._teamspace.id,
|
|
254
|
+
self.cloud_account,
|
|
255
|
+
_get_org_id(self._teamspace),
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
@property
|
|
259
|
+
def public_ip(self) -> Optional[str]:
|
|
260
|
+
"""Returns the public IP address of the machine the Studio is running on."""
|
|
261
|
+
return self._studio_api.get_public_ip(
|
|
262
|
+
self._studio.id,
|
|
263
|
+
self._teamspace.id,
|
|
264
|
+
)
|
|
137
265
|
|
|
138
266
|
@property
|
|
139
267
|
def interruptible(self) -> bool:
|
|
@@ -146,29 +274,104 @@ class Studio:
|
|
|
146
274
|
@property
|
|
147
275
|
def cluster(self) -> str:
|
|
148
276
|
"""Returns the cluster the Studio is running on."""
|
|
149
|
-
warnings.warn(
|
|
277
|
+
warnings.warn(
|
|
278
|
+
f"{self._cls_name}.cluster is deprecated. Use {self._cls_name}.cloud_account instead", DeprecationWarning
|
|
279
|
+
)
|
|
150
280
|
return self.cloud_account
|
|
151
281
|
|
|
152
282
|
@property
|
|
153
283
|
def cloud_account(self) -> str:
|
|
154
284
|
return self._studio.cluster_id
|
|
155
285
|
|
|
156
|
-
def start(
|
|
157
|
-
|
|
286
|
+
def start(
|
|
287
|
+
self,
|
|
288
|
+
machine: Optional[Union[Machine, str]] = None,
|
|
289
|
+
interruptible: Optional[bool] = None,
|
|
290
|
+
max_runtime: Optional[int] = None,
|
|
291
|
+
) -> None:
|
|
292
|
+
"""Starts a Studio on the specified machine type (default: CPU-4).
|
|
293
|
+
|
|
294
|
+
Args:
|
|
295
|
+
machine: the machine type to start the studio on. Defaults to CPU-4
|
|
296
|
+
interruptible: whether to use interruptible machines
|
|
297
|
+
max_runtime: the duration (in seconds) for which to allocate the machine.
|
|
298
|
+
Irrelevant for most machines, required for some of the top-end machines on GCP.
|
|
299
|
+
If in doubt, set it. Won't have an effect on machines not requiring it.
|
|
300
|
+
Defaults to 3h
|
|
301
|
+
|
|
302
|
+
"""
|
|
303
|
+
# Check to see if we're inside a studio and if its running
|
|
304
|
+
current_studio_machine = None
|
|
305
|
+
studio_id = os.environ.get("LIGHTNING_CLOUD_SPACE_ID", None)
|
|
306
|
+
if studio_id is not None:
|
|
307
|
+
# We're inside a studio, get the machine if it is running
|
|
308
|
+
current_studio = self._studio_api.get_studio_by_id(studio_id=studio_id, teamspace_id=self._teamspace.id)
|
|
309
|
+
current_status = self._studio_api._get_studio_instance_status_from_object(current_studio)
|
|
310
|
+
|
|
311
|
+
if current_status and _internal_status_to_external_status(current_status) == Status.Running:
|
|
312
|
+
current_studio_machine = self._studio_api.get_machine(
|
|
313
|
+
current_studio.id,
|
|
314
|
+
self._teamspace.id,
|
|
315
|
+
current_studio.cluster_id,
|
|
316
|
+
_get_org_id(self._teamspace),
|
|
317
|
+
)
|
|
318
|
+
|
|
158
319
|
status = self.status
|
|
320
|
+
|
|
321
|
+
if interruptible is None:
|
|
322
|
+
interruptible_override = os.environ.get("LIGHTNING_INTERRUPTIBLE_OVERRIDE", None)
|
|
323
|
+
if interruptible_override is not None:
|
|
324
|
+
interruptible = interruptible_override.lower() == "true"
|
|
325
|
+
else:
|
|
326
|
+
interruptible = self.teamspace.start_studios_on_interruptible
|
|
327
|
+
|
|
328
|
+
new_machine = DEFAULT_MACHINE
|
|
329
|
+
if machine is not None:
|
|
330
|
+
new_machine = machine
|
|
331
|
+
elif current_studio_machine is not None:
|
|
332
|
+
new_machine = current_studio_machine
|
|
333
|
+
|
|
334
|
+
if not isinstance(new_machine, Machine):
|
|
335
|
+
new_machine = Machine.from_str(new_machine)
|
|
336
|
+
|
|
159
337
|
if status == Status.Running:
|
|
160
|
-
|
|
161
|
-
if curr_machine != _machine_to_compute_name(machine):
|
|
338
|
+
if new_machine != self.machine:
|
|
162
339
|
raise RuntimeError(
|
|
163
|
-
f"Requested to start
|
|
340
|
+
f"Requested to start {self._cls_name} on {new_machine}, "
|
|
341
|
+
"but {self._cls_name} is already running on {self.machine}."
|
|
164
342
|
" Consider switching instead!"
|
|
165
343
|
)
|
|
166
|
-
_logger.info(f"
|
|
344
|
+
_logger.info(f"{self._cls_name} {self.name} is already running")
|
|
167
345
|
return
|
|
168
346
|
|
|
169
347
|
if status != Status.Stopped:
|
|
170
|
-
raise RuntimeError(
|
|
171
|
-
|
|
348
|
+
raise RuntimeError(
|
|
349
|
+
f"Cannot start a {self._cls_name} that is not stopped. {self._cls_name} {self.name} is {status}."
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
# Show progress bar during startup
|
|
353
|
+
if self.show_progress:
|
|
354
|
+
from lightning_sdk.utils.progress import StudioProgressTracker
|
|
355
|
+
|
|
356
|
+
with StudioProgressTracker("start", show_progress=True) as progress:
|
|
357
|
+
# Start the studio without blocking
|
|
358
|
+
self._studio_api.start_studio_async(
|
|
359
|
+
self._studio.id,
|
|
360
|
+
self._teamspace.id,
|
|
361
|
+
new_machine,
|
|
362
|
+
interruptible=interruptible,
|
|
363
|
+
max_runtime=max_runtime,
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
# Track progress through completion
|
|
367
|
+
progress.track_startup_phases(
|
|
368
|
+
lambda: self._studio_api.get_studio_status(self._studio.id, self._teamspace.id)
|
|
369
|
+
)
|
|
370
|
+
else:
|
|
371
|
+
# Use the blocking version if no progress is needed
|
|
372
|
+
self._studio_api.start_studio(
|
|
373
|
+
self._studio.id, self._teamspace.id, new_machine, interruptible=interruptible, max_runtime=max_runtime
|
|
374
|
+
)
|
|
172
375
|
|
|
173
376
|
self._setup()
|
|
174
377
|
|
|
@@ -183,17 +386,56 @@ class Studio:
|
|
|
183
386
|
"""Deletes the current Studio."""
|
|
184
387
|
self._studio_api.delete_studio(self._studio.id, self._teamspace.id)
|
|
185
388
|
|
|
186
|
-
def duplicate(
|
|
187
|
-
|
|
188
|
-
|
|
389
|
+
def duplicate(
|
|
390
|
+
self,
|
|
391
|
+
target_teamspace: Optional[Union["Teamspace", str]] = None,
|
|
392
|
+
machine: Machine = Machine.CPU,
|
|
393
|
+
name: Optional[str] = None,
|
|
394
|
+
) -> "Studio":
|
|
395
|
+
"""Duplicates the existing Studio.
|
|
396
|
+
|
|
397
|
+
Args:
|
|
398
|
+
target_teamspace: the teamspace to duplicate the studio to.
|
|
399
|
+
Must have the same owner as the source teamspace.
|
|
400
|
+
If not provided, defaults to current teamspace.
|
|
401
|
+
machine: the machine to start the duplicated studio on.
|
|
402
|
+
Defaults to CPU
|
|
403
|
+
"""
|
|
404
|
+
if target_teamspace is None:
|
|
405
|
+
target_teamspace_id = self._teamspace.id
|
|
406
|
+
else:
|
|
407
|
+
target_teamspace = _resolve_teamspace(
|
|
408
|
+
target_teamspace,
|
|
409
|
+
org=self._teamspace.owner if isinstance(self._teamspace.owner, Organization) else None,
|
|
410
|
+
user=self._teamspace.owner if isinstance(self._teamspace.owner, User) else None,
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
if target_teamspace is None:
|
|
414
|
+
raise ValueError(
|
|
415
|
+
f"Could not resolve target teamspace {target_teamspace} "
|
|
416
|
+
f"with owner {self.teamspace.owner} for duplication!"
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
target_teamspace_id = target_teamspace.id
|
|
420
|
+
|
|
421
|
+
kwargs = self._studio_api.duplicate_studio(
|
|
422
|
+
studio_id=self._studio.id,
|
|
423
|
+
teamspace_id=self._teamspace.id,
|
|
424
|
+
target_teamspace_id=target_teamspace_id,
|
|
425
|
+
machine=machine,
|
|
426
|
+
new_name=name,
|
|
427
|
+
)
|
|
189
428
|
return Studio(**kwargs)
|
|
190
429
|
|
|
191
|
-
def switch_machine(
|
|
430
|
+
def switch_machine(
|
|
431
|
+
self, machine: Union[Machine, str], interruptible: bool = False, cloud_provider: Optional[CloudProvider] = None
|
|
432
|
+
) -> None:
|
|
192
433
|
"""Switches machine to the provided machine type/.
|
|
193
434
|
|
|
194
435
|
Args:
|
|
195
436
|
machine: the new machine type to switch to
|
|
196
437
|
interruptible: determines whether to switch to an interruptible instance
|
|
438
|
+
cloud_provider: the cloud provider to switch to, has no effect if the Studio is not on Lightning Cloud
|
|
197
439
|
|
|
198
440
|
Note:
|
|
199
441
|
this call is blocking until the new machine is provisioned
|
|
@@ -202,12 +444,82 @@ class Studio:
|
|
|
202
444
|
status = self.status
|
|
203
445
|
if status != Status.Running:
|
|
204
446
|
raise RuntimeError(
|
|
205
|
-
f"Cannot switch machine on a
|
|
447
|
+
f"Cannot switch machine on a {self._cls_name} that is not running. "
|
|
448
|
+
"{self._cls_name} {self.name} is {status}."
|
|
206
449
|
)
|
|
207
|
-
|
|
208
|
-
|
|
450
|
+
|
|
451
|
+
current_cloud = self._cloud_account_api.get_cloud_account_non_org(
|
|
452
|
+
self._teamspace.id,
|
|
453
|
+
self._studio.cluster_id,
|
|
209
454
|
)
|
|
210
455
|
|
|
456
|
+
cloud_account = ""
|
|
457
|
+
if cloud_provider is not None and current_cloud.spec.cluster_type == V1ClusterType.GLOBAL:
|
|
458
|
+
cloud_account = self._cloud_account_api.resolve_cloud_account(
|
|
459
|
+
self._teamspace.id,
|
|
460
|
+
cloud_account=None,
|
|
461
|
+
cloud_provider=cloud_provider,
|
|
462
|
+
default_cloud_account=None,
|
|
463
|
+
)
|
|
464
|
+
|
|
465
|
+
if self.show_progress:
|
|
466
|
+
from lightning_sdk.utils.progress import StudioProgressTracker
|
|
467
|
+
|
|
468
|
+
with StudioProgressTracker("switch", show_progress=True) as progress:
|
|
469
|
+
# Update progress before starting the switch
|
|
470
|
+
progress.update_progress(5, "Initiating machine switch...")
|
|
471
|
+
|
|
472
|
+
# Start the switch operation with progress tracking
|
|
473
|
+
self._studio_api.switch_studio_machine_with_progress(
|
|
474
|
+
self._studio.id,
|
|
475
|
+
self._teamspace.id,
|
|
476
|
+
machine,
|
|
477
|
+
interruptible=interruptible,
|
|
478
|
+
progress=progress,
|
|
479
|
+
cloud_account=cloud_account,
|
|
480
|
+
)
|
|
481
|
+
else:
|
|
482
|
+
self._studio_api.switch_studio_machine(
|
|
483
|
+
self._studio.id, self._teamspace.id, machine, interruptible=interruptible, cloud_account=cloud_account
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
if self._studio and cloud_account:
|
|
487
|
+
# TODO: get this from the API
|
|
488
|
+
self._studio.cluster_id = cloud_account
|
|
489
|
+
|
|
490
|
+
def run_and_detach(self, *commands: str, timeout: float = 10, check_interval: float = 1) -> str:
|
|
491
|
+
"""Runs given commands on the Studio and returns immediately.
|
|
492
|
+
|
|
493
|
+
The command will continue to run in the background.
|
|
494
|
+
|
|
495
|
+
Args:
|
|
496
|
+
timeout: wait for this many seconds for the command to finish.
|
|
497
|
+
check_interval: check the status of the command every this many seconds.
|
|
498
|
+
"""
|
|
499
|
+
if check_interval > timeout:
|
|
500
|
+
raise ValueError("check_interval must be less than timeout")
|
|
501
|
+
|
|
502
|
+
if _LIGHTNING_DEBUG:
|
|
503
|
+
print(f"Running {commands=}")
|
|
504
|
+
status = self.status
|
|
505
|
+
if status != Status.Running:
|
|
506
|
+
raise RuntimeError(
|
|
507
|
+
f"Cannot run a command in a {self._cls_name} that is not running. "
|
|
508
|
+
"{self._cls_name} {self.name} is {status}."
|
|
509
|
+
)
|
|
510
|
+
|
|
511
|
+
iter_output = self._studio_api.run_studio_commands_and_yield(
|
|
512
|
+
self._studio.id, self._teamspace.id, *commands, timeout=timeout, check_interval=check_interval
|
|
513
|
+
)
|
|
514
|
+
|
|
515
|
+
output = ""
|
|
516
|
+
code = None
|
|
517
|
+
for line, exit_code in iter_output:
|
|
518
|
+
print(line)
|
|
519
|
+
output += line
|
|
520
|
+
code = exit_code
|
|
521
|
+
return output, code
|
|
522
|
+
|
|
211
523
|
def run_with_exit_code(self, *commands: str) -> Tuple[str, int]:
|
|
212
524
|
"""Runs given commands on the Studio while returning output and exit code.
|
|
213
525
|
|
|
@@ -220,7 +532,10 @@ class Studio:
|
|
|
220
532
|
|
|
221
533
|
status = self.status
|
|
222
534
|
if status != Status.Running:
|
|
223
|
-
raise RuntimeError(
|
|
535
|
+
raise RuntimeError(
|
|
536
|
+
f"Cannot run a command in a {self._cls_name} that is not running. "
|
|
537
|
+
"{self._cls_name} {self.name} is {status}."
|
|
538
|
+
)
|
|
224
539
|
output, exit_code = self._studio_api.run_studio_commands(self._studio.id, self._teamspace.id, *commands)
|
|
225
540
|
output = output.strip()
|
|
226
541
|
|
|
@@ -255,6 +570,34 @@ class Studio:
|
|
|
255
570
|
progress_bar=progress_bar,
|
|
256
571
|
)
|
|
257
572
|
|
|
573
|
+
def upload_folder(self, folder_path: str, remote_path: Optional[str] = None, progress_bar: bool = True) -> None:
|
|
574
|
+
"""Uploads a given folder to a remote path on the Studio."""
|
|
575
|
+
if folder_path is None:
|
|
576
|
+
raise ValueError("Cannot upload a folder that is None.")
|
|
577
|
+
folder_path = os.path.normpath(folder_path)
|
|
578
|
+
if os.path.isfile(folder_path):
|
|
579
|
+
raise NotADirectoryError(f"Cannot upload a file as a folder. '{folder_path}' is a file.")
|
|
580
|
+
if not os.path.exists(folder_path):
|
|
581
|
+
raise NotADirectoryError(f"Cannot upload a folder that does not exist. '{folder_path}' is not a directory.")
|
|
582
|
+
all_files = []
|
|
583
|
+
for fp in glob.glob(os.path.join(folder_path, "**"), recursive=True):
|
|
584
|
+
if not os.path.isfile(fp):
|
|
585
|
+
continue
|
|
586
|
+
rel_path = os.path.relpath(fp, folder_path)
|
|
587
|
+
remote_file = os.path.join(remote_path, rel_path) if remote_path else rel_path
|
|
588
|
+
all_files.append((fp, remote_file))
|
|
589
|
+
|
|
590
|
+
if progress_bar:
|
|
591
|
+
progress_bar = tqdm(total=len(all_files), desc="Uploading files", unit="file")
|
|
592
|
+
for local_file, remote_path in sorted(all_files, key=lambda p: p[1]):
|
|
593
|
+
if progress_bar:
|
|
594
|
+
progress_bar.set_description(f"Uploading {local_file}")
|
|
595
|
+
self.upload_file(local_file, remote_path=remote_path, progress_bar=False)
|
|
596
|
+
if progress_bar:
|
|
597
|
+
progress_bar.update(1)
|
|
598
|
+
if progress_bar:
|
|
599
|
+
progress_bar.close()
|
|
600
|
+
|
|
258
601
|
def download_file(self, remote_path: str, file_path: Optional[str] = None) -> None:
|
|
259
602
|
"""Downloads a file from the Studio to a given target path."""
|
|
260
603
|
if file_path is None:
|
|
@@ -281,6 +624,91 @@ class Studio:
|
|
|
281
624
|
cloud_account=self._studio.cluster_id,
|
|
282
625
|
)
|
|
283
626
|
|
|
627
|
+
def run_job(
|
|
628
|
+
self,
|
|
629
|
+
name: str,
|
|
630
|
+
machine: Union["Machine", str],
|
|
631
|
+
command: str,
|
|
632
|
+
env: Optional[Dict[str, str]] = None,
|
|
633
|
+
interruptible: bool = False,
|
|
634
|
+
reuse_snapshot: bool = True,
|
|
635
|
+
) -> "Job":
|
|
636
|
+
"""Run async workloads using the compute environment from your studio.
|
|
637
|
+
|
|
638
|
+
Args:
|
|
639
|
+
name: The name of the job. Needs to be unique within the teamspace.
|
|
640
|
+
machine: The machine type to run the job on. One of {", ".join(_MACHINE_VALUES)}.
|
|
641
|
+
command: The command to run inside your job.
|
|
642
|
+
env: Environment variables to set inside the job.
|
|
643
|
+
interruptible: Whether the job should run on interruptible instances. They are cheaper but can be preempted.
|
|
644
|
+
reuse_snapshot: Whether the job should reuse a Studio snapshot when multiple jobs for the same Studio are
|
|
645
|
+
submitted. Turning this off may result in longer job startup times. Defaults to True.
|
|
646
|
+
"""
|
|
647
|
+
from lightning_sdk.job import Job
|
|
648
|
+
|
|
649
|
+
return Job.run(
|
|
650
|
+
name=name,
|
|
651
|
+
machine=machine,
|
|
652
|
+
command=command,
|
|
653
|
+
studio=self,
|
|
654
|
+
image=None,
|
|
655
|
+
teamspace=self.teamspace,
|
|
656
|
+
cloud_account=self.cloud_account,
|
|
657
|
+
env=env,
|
|
658
|
+
interruptible=interruptible,
|
|
659
|
+
reuse_snapshot=reuse_snapshot,
|
|
660
|
+
)
|
|
661
|
+
|
|
662
|
+
def run_mmt(
|
|
663
|
+
self,
|
|
664
|
+
name: str,
|
|
665
|
+
num_machines: int,
|
|
666
|
+
machine: Union["Machine", str],
|
|
667
|
+
command: str,
|
|
668
|
+
env: Optional[Dict[str, str]] = None,
|
|
669
|
+
interruptible: bool = False,
|
|
670
|
+
) -> "MMT":
|
|
671
|
+
"""Run async workloads using the compute environment from your studio.
|
|
672
|
+
|
|
673
|
+
Args:
|
|
674
|
+
name: The name of the job. Needs to be unique within the teamspace.
|
|
675
|
+
num_machines: The number of machines to run on.
|
|
676
|
+
machine: The machine type to run the job on. One of {", ".join(_MACHINE_VALUES)}.
|
|
677
|
+
command: The command to run inside your job.
|
|
678
|
+
env: Environment variables to set inside the job.
|
|
679
|
+
interruptible: Whether the job should run on interruptible instances. They are cheaper but can be preempted.
|
|
680
|
+
"""
|
|
681
|
+
from lightning_sdk.mmt import MMT
|
|
682
|
+
|
|
683
|
+
return MMT.run(
|
|
684
|
+
name=name,
|
|
685
|
+
num_machines=num_machines,
|
|
686
|
+
machine=machine,
|
|
687
|
+
command=command,
|
|
688
|
+
studio=self,
|
|
689
|
+
image=None,
|
|
690
|
+
teamspace=self.teamspace,
|
|
691
|
+
cloud_account=self.cloud_account,
|
|
692
|
+
env=env,
|
|
693
|
+
interruptible=interruptible,
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
def create_assistant(self, name: str, port: int) -> None:
|
|
697
|
+
assistant = self._studio_api.create_assistant(
|
|
698
|
+
studio_id=self._studio.id, teamspace_id=self._teamspace.id, port=port, assistant_name=name
|
|
699
|
+
)
|
|
700
|
+
assistant_info = f"Created assisant with name: {assistant.name}, ID: {assistant.id}"
|
|
701
|
+
self._assistant_id = assistant.id
|
|
702
|
+
_logger.info(assistant_info)
|
|
703
|
+
|
|
704
|
+
def rename(self, new_name: str) -> None:
|
|
705
|
+
"""Renames the current Studio to the provided new name."""
|
|
706
|
+
if new_name == self._studio.name:
|
|
707
|
+
return
|
|
708
|
+
|
|
709
|
+
self._studio_api._update_cloudspace(self._studio, self._teamspace.id, "display_name", new_name)
|
|
710
|
+
self._update_studio_reference()
|
|
711
|
+
|
|
284
712
|
@property
|
|
285
713
|
def auto_sleep(self) -> bool:
|
|
286
714
|
"""Returns if a Studio has auto-sleep enabled."""
|
|
@@ -289,8 +717,8 @@ class Studio:
|
|
|
289
717
|
@auto_sleep.setter
|
|
290
718
|
def auto_sleep(self, value: bool) -> None:
|
|
291
719
|
if not value and self.machine == Machine.CPU:
|
|
292
|
-
warnings.warn("Disabling auto-sleep will convert the
|
|
293
|
-
self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, enabled=value
|
|
720
|
+
warnings.warn(f"Disabling auto-sleep will convert the {self._cls_name} from free to paid!")
|
|
721
|
+
self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, enabled=value)
|
|
294
722
|
self._update_studio_reference()
|
|
295
723
|
|
|
296
724
|
@property
|
|
@@ -300,10 +728,8 @@ class Studio:
|
|
|
300
728
|
|
|
301
729
|
@auto_sleep_time.setter
|
|
302
730
|
def auto_sleep_time(self, value: int) -> None:
|
|
303
|
-
warnings.warn("Setting auto-sleep time will convert the
|
|
304
|
-
self._studio_api.update_autoshutdown(
|
|
305
|
-
self._studio.id, self._teamspace.id, idle_shutdown_seconds=value, studio=self._studio
|
|
306
|
-
)
|
|
731
|
+
warnings.warn(f"Setting auto-sleep time will convert the {self._cls_name} from free to paid!")
|
|
732
|
+
self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, idle_shutdown_seconds=value)
|
|
307
733
|
self._update_studio_reference()
|
|
308
734
|
|
|
309
735
|
@property
|
|
@@ -326,6 +752,22 @@ class Studio:
|
|
|
326
752
|
warnings.warn("auto_shutdown_time is deprecated. Use auto_sleep_time instead", DeprecationWarning)
|
|
327
753
|
self.auto_sleep_time = value
|
|
328
754
|
|
|
755
|
+
@property
|
|
756
|
+
def env(self) -> Dict[str, str]:
|
|
757
|
+
self._update_studio_reference()
|
|
758
|
+
return self._studio_api.get_env(self._studio)
|
|
759
|
+
|
|
760
|
+
def set_env(self, new_env: Dict[str, str], partial: bool = True) -> None:
|
|
761
|
+
"""Set the environment variables for the Studio.
|
|
762
|
+
|
|
763
|
+
Args:
|
|
764
|
+
new_env: The new environment variables to set.
|
|
765
|
+
partial: Whether to only set the environment variables that are provided.
|
|
766
|
+
If False, existing environment variables that are not in new_env will be removed.
|
|
767
|
+
If True, existing environment variables that are not in new_env will be kept.
|
|
768
|
+
"""
|
|
769
|
+
self._studio_api.set_env(self._studio, self._teamspace.id, new_env, partial=partial)
|
|
770
|
+
|
|
329
771
|
@property
|
|
330
772
|
def available_plugins(self) -> Mapping[str, str]:
|
|
331
773
|
"""All available plugins to install in the current Studio."""
|
|
@@ -370,6 +812,7 @@ class Studio:
|
|
|
370
812
|
def _add_plugin(self, plugin_name: str) -> None:
|
|
371
813
|
"""Adds the just installed plugin to the internal list of plugins."""
|
|
372
814
|
from lightning_sdk.plugin import (
|
|
815
|
+
CustomPortPlugin,
|
|
373
816
|
InferenceServerPlugin,
|
|
374
817
|
JobsPlugin,
|
|
375
818
|
MultiMachineTrainingPlugin,
|
|
@@ -383,6 +826,7 @@ class Studio:
|
|
|
383
826
|
"jobs": JobsPlugin,
|
|
384
827
|
"multi-machine-training": MultiMachineTrainingPlugin,
|
|
385
828
|
"inference-server": InferenceServerPlugin,
|
|
829
|
+
"custom-port": CustomPortPlugin,
|
|
386
830
|
}.get(plugin_name, Plugin)
|
|
387
831
|
|
|
388
832
|
description = self._list_installed_plugins()[plugin_name]
|
|
@@ -415,6 +859,36 @@ class Studio:
|
|
|
415
859
|
def _update_studio_reference(self) -> None:
|
|
416
860
|
self._studio = self._studio_api.get_studio_by_id(studio_id=self._studio.id, teamspace_id=self._teamspace.id)
|
|
417
861
|
|
|
862
|
+
@property
|
|
863
|
+
def _cls_name(self) -> str:
|
|
864
|
+
return self.__class__.__qualname__
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
class VM(Studio):
|
|
868
|
+
"""A single Lightning AI VM.
|
|
869
|
+
|
|
870
|
+
Allows to fully control a vm, including retrieving the status, running commands
|
|
871
|
+
and switching machine types.
|
|
872
|
+
|
|
873
|
+
Args:
|
|
874
|
+
name: the name of the vm
|
|
875
|
+
teamspace: the name of the teamspace the vm is contained by
|
|
876
|
+
org: the name of the organization owning the :param`teamspace` in case it is owned by an org
|
|
877
|
+
user: the name of the user owning the :param`teamspace` in case it is owned directly by a user instead of an org
|
|
878
|
+
cloud_account: the name of the cloud account, the vm should be created on.
|
|
879
|
+
Doesn't matter when the vm already exists.
|
|
880
|
+
cloud_account_provider: The provider to select the cloud-account from.
|
|
881
|
+
If set, must be in agreement with the provider from the cloud_account (if specified).
|
|
882
|
+
If not specified, falls backto the teamspace default cloud account.
|
|
883
|
+
create_ok: whether the vm will be created if it does not yet exist. Defaults to True
|
|
884
|
+
provider: the provider of the machine, the vm should be created on.
|
|
885
|
+
|
|
886
|
+
Note:
|
|
887
|
+
Since a teamspace can either be owned by an org or by a user directly,
|
|
888
|
+
only one of the arguments can be provided.
|
|
889
|
+
|
|
890
|
+
"""
|
|
891
|
+
|
|
418
892
|
|
|
419
893
|
def _internal_status_to_external_status(internal_status: str) -> Status:
|
|
420
894
|
"""Converts internal status strings from HTTP requests to external enums."""
|