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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from typing import Optional, Sequence, Tuple
|
|
2
|
+
|
|
3
|
+
from click.formatting import HelpFormatter, term_len, wrap_text
|
|
4
|
+
from click.termui import style
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class CustomHelpFormatter(HelpFormatter):
|
|
8
|
+
_primary = "magenta"
|
|
9
|
+
_secondary = "cyan"
|
|
10
|
+
|
|
11
|
+
def write_heading(self, heading: str) -> None:
|
|
12
|
+
# Style the heading (command name) in cyan
|
|
13
|
+
return super().write_heading(style(heading, fg=self._primary, bold=True))
|
|
14
|
+
|
|
15
|
+
def write_usage(self, prog: str, args: str = "", prefix: Optional[str] = None) -> None:
|
|
16
|
+
if prefix is None:
|
|
17
|
+
prefix = "Usage: "
|
|
18
|
+
|
|
19
|
+
styled_prefix = style(prefix, fg=self._primary, bold=True)
|
|
20
|
+
styled_prog = style(prog, fg=self._secondary, bold=True)
|
|
21
|
+
styled_args = style(args, fg=self._secondary, bold=True)
|
|
22
|
+
|
|
23
|
+
# this is required because otherwise the super() call would include the special characters for coloring in the
|
|
24
|
+
# width and indent computation leading to wrong results since these characters won't be displayed in the end.
|
|
25
|
+
usage_prefix = f"{prefix:>{self.current_indent}}{prog} "
|
|
26
|
+
styled_usage_prefix = f"{styled_prefix:>{self.current_indent}}{styled_prog} "
|
|
27
|
+
text_width = self.width - self.current_indent
|
|
28
|
+
|
|
29
|
+
if text_width >= (term_len(usage_prefix) + 20):
|
|
30
|
+
# The arguments will fit to the right of the prefix.
|
|
31
|
+
self.write(styled_usage_prefix)
|
|
32
|
+
indent = " " * term_len(usage_prefix)
|
|
33
|
+
self.write(
|
|
34
|
+
wrap_text(
|
|
35
|
+
styled_args,
|
|
36
|
+
text_width,
|
|
37
|
+
initial_indent="",
|
|
38
|
+
subsequent_indent=indent,
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
else:
|
|
42
|
+
# The prefix is too long, put the arguments on the next line.
|
|
43
|
+
self.write(styled_usage_prefix)
|
|
44
|
+
self.write("\n")
|
|
45
|
+
indent = " " * (max(self.current_indent, term_len(prefix)) + 4)
|
|
46
|
+
self.write(wrap_text(styled_args, text_width, initial_indent=indent, subsequent_indent=indent))
|
|
47
|
+
|
|
48
|
+
self.write("\n")
|
|
49
|
+
|
|
50
|
+
def write_dl(
|
|
51
|
+
self,
|
|
52
|
+
rows: Sequence[Tuple[str, str]],
|
|
53
|
+
col_max: int = 30,
|
|
54
|
+
col_spacing: int = 2,
|
|
55
|
+
) -> None:
|
|
56
|
+
new_rows = []
|
|
57
|
+
for row in rows:
|
|
58
|
+
new_row = (style(row[0], fg=self._secondary, bold=True), row[1])
|
|
59
|
+
new_rows.append(new_row)
|
|
60
|
+
super().write_dl(new_rows, col_max=col_max, col_spacing=col_spacing)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from lightning_sdk.base_studio import BaseStudio
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def get_base_studio_id(studio_type: Optional[str]) -> Optional[str]:
|
|
7
|
+
base_studios = BaseStudio()
|
|
8
|
+
base_studios = base_studios.list()
|
|
9
|
+
template_id = None
|
|
10
|
+
|
|
11
|
+
if base_studios and len(base_studios):
|
|
12
|
+
# if not specified by user, use the first existing template studio
|
|
13
|
+
template_id = base_studios[0].id
|
|
14
|
+
# else, try to match the provided studio_type to base studio name
|
|
15
|
+
if studio_type:
|
|
16
|
+
normalized_studio_type = studio_type.lower().replace(" ", "-")
|
|
17
|
+
match = next(
|
|
18
|
+
(s for s in base_studios if s.name.lower().replace(" ", "-") == normalized_studio_type),
|
|
19
|
+
None,
|
|
20
|
+
)
|
|
21
|
+
if match:
|
|
22
|
+
template_id = match.id
|
|
23
|
+
|
|
24
|
+
return template_id
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from typing import Dict, Optional, Set
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
|
|
5
|
+
from lightning_sdk.machine import DEFAULT_MACHINE, Machine
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def _split_gpus_spec(gpus: str) -> tuple[str, int]:
|
|
9
|
+
machine_name, machine_val = gpus.split(":", 1)
|
|
10
|
+
machine_name = machine_name.strip()
|
|
11
|
+
machine_val = machine_val.strip()
|
|
12
|
+
|
|
13
|
+
if not machine_val.isdigit() or int(machine_val) <= 0:
|
|
14
|
+
raise ValueError(f"Invalid GPU count '{machine_val}'. Must be a positive integer.")
|
|
15
|
+
|
|
16
|
+
machine_num = int(machine_val)
|
|
17
|
+
return machine_name, machine_num
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _construct_available_gpus(machine_options: Dict[str, str]) -> Set[str]:
|
|
21
|
+
# returns available gpus:count
|
|
22
|
+
available_gpus = set()
|
|
23
|
+
for v in machine_options.values():
|
|
24
|
+
if "_X_" in v:
|
|
25
|
+
gpu_type_num = v.replace("_X_", ":")
|
|
26
|
+
available_gpus.add(gpu_type_num)
|
|
27
|
+
else:
|
|
28
|
+
available_gpus.add(v)
|
|
29
|
+
return available_gpus
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _get_machine_from_gpus(gpus: str) -> Machine:
|
|
33
|
+
machine_name = gpus
|
|
34
|
+
machine_num = 1
|
|
35
|
+
|
|
36
|
+
if ":" in gpus:
|
|
37
|
+
machine_name, machine_num = _split_gpus_spec(gpus)
|
|
38
|
+
|
|
39
|
+
machine_options = {
|
|
40
|
+
m.name.lower(): m.name for m in Machine.__dict__.values() if isinstance(m, Machine) and m._include_in_cli
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if machine_num == 1:
|
|
44
|
+
# e.g. gpus=L4 or gpus=L4:1
|
|
45
|
+
gpu_key = machine_name.lower()
|
|
46
|
+
try:
|
|
47
|
+
return machine_options[gpu_key]
|
|
48
|
+
except KeyError:
|
|
49
|
+
available = ", ".join(_construct_available_gpus(machine_options))
|
|
50
|
+
raise ValueError(f"Invalid GPU type '{machine_name}'. Available options: {available}") from None
|
|
51
|
+
|
|
52
|
+
# Else: e.g. gpus=L4:4
|
|
53
|
+
gpu_key = f"{machine_name.lower()}_x_{machine_num}"
|
|
54
|
+
try:
|
|
55
|
+
return machine_options[gpu_key]
|
|
56
|
+
except KeyError:
|
|
57
|
+
available = ", ".join(_construct_available_gpus(machine_options))
|
|
58
|
+
raise ValueError(f"Invalid GPU configuration '{gpus}'. Available options: {available}") from None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def handle_machine_and_gpus_args(machine: Optional[str], gpus: Optional[str]) -> str:
|
|
62
|
+
if machine and gpus:
|
|
63
|
+
raise click.UsageError("Options --machine and --gpus are mutually exclusive. Provide only one.")
|
|
64
|
+
elif gpus:
|
|
65
|
+
machine = _get_machine_from_gpus(gpus.strip())
|
|
66
|
+
elif not machine:
|
|
67
|
+
machine = DEFAULT_MACHINE
|
|
68
|
+
|
|
69
|
+
return machine
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import shlex
|
|
2
|
+
import sys
|
|
3
|
+
import traceback
|
|
4
|
+
from contextlib import suppress
|
|
5
|
+
from time import time
|
|
6
|
+
from types import TracebackType
|
|
7
|
+
from typing import Optional, Type
|
|
8
|
+
|
|
9
|
+
import click
|
|
10
|
+
from rich.console import Group
|
|
11
|
+
from rich.panel import Panel
|
|
12
|
+
from rich.syntax import Syntax
|
|
13
|
+
from rich.text import Text
|
|
14
|
+
|
|
15
|
+
from lightning_sdk.__version__ import __version__
|
|
16
|
+
from lightning_sdk.cli.utils import rich_to_str
|
|
17
|
+
from lightning_sdk.constants import _LIGHTNING_DEBUG
|
|
18
|
+
from lightning_sdk.lightning_cloud.openapi.models.v1_create_sdk_command_history_request import (
|
|
19
|
+
V1CreateSDKCommandHistoryRequest,
|
|
20
|
+
)
|
|
21
|
+
from lightning_sdk.lightning_cloud.openapi.models.v1_sdk_command_history_severity import V1SDKCommandHistorySeverity
|
|
22
|
+
from lightning_sdk.lightning_cloud.openapi.models.v1_sdk_command_history_type import V1SDKCommandHistoryType
|
|
23
|
+
from lightning_sdk.lightning_cloud.rest_client import LightningClient
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _log_command(message: str = "", duration: int = 0, error: Optional[str] = None) -> None:
|
|
27
|
+
original_command = " ".join(shlex.quote(arg) for arg in sys.argv)
|
|
28
|
+
client = LightningClient(retry=False, max_tries=0)
|
|
29
|
+
|
|
30
|
+
body = V1CreateSDKCommandHistoryRequest(
|
|
31
|
+
command=original_command,
|
|
32
|
+
duration=duration,
|
|
33
|
+
message=f"VERSION: {__version__} | {message}",
|
|
34
|
+
project_id=None,
|
|
35
|
+
severity=V1SDKCommandHistorySeverity.INFO,
|
|
36
|
+
type=V1SDKCommandHistoryType.CLI,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
if error:
|
|
40
|
+
body.severity = V1SDKCommandHistorySeverity.WARNING if error == "0" else V1SDKCommandHistorySeverity.ERROR
|
|
41
|
+
body.message = body.message + f" | Error: {error}"
|
|
42
|
+
|
|
43
|
+
# limit characters
|
|
44
|
+
body.message = body.message[:1000]
|
|
45
|
+
|
|
46
|
+
with suppress(Exception):
|
|
47
|
+
client.s_dk_command_history_service_create_sdk_command_history(body=body)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _notify_exception(exception_type: Type[BaseException], value: BaseException, tb: TracebackType) -> None:
|
|
51
|
+
"""CLI won't show tracebacks, just print the exception message."""
|
|
52
|
+
message = str(value.args[0]) if value.args else str(value) or "An unknown error occurred"
|
|
53
|
+
|
|
54
|
+
error_text = Text()
|
|
55
|
+
error_text.append(f"{exception_type.__name__}: ", style="bold red")
|
|
56
|
+
error_text.append(message, style="white")
|
|
57
|
+
|
|
58
|
+
renderables = [error_text]
|
|
59
|
+
|
|
60
|
+
if _LIGHTNING_DEBUG:
|
|
61
|
+
tb_text = "".join(traceback.format_exception(exception_type, value, tb))
|
|
62
|
+
renderables.append(Text("\n\nFull traceback:\n", style="bold yellow"))
|
|
63
|
+
renderables.append(Syntax(tb_text, "python", theme="monokai light", line_numbers=False, word_wrap=True))
|
|
64
|
+
else:
|
|
65
|
+
renderables.append(Text("\n\n🐞 To view the full traceback, set: LIGHTNING_DEBUG=1"))
|
|
66
|
+
|
|
67
|
+
renderables.append(Text("\n📘 Need help? Run: lightning <command> --help", style="cyan"))
|
|
68
|
+
|
|
69
|
+
text = rich_to_str(Panel(Group(*renderables), title="⚡ Lightning CLI Error", border_style="red"))
|
|
70
|
+
click.echo(text, color=True)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def logging_excepthook(exception_type: Type[BaseException], value: BaseException, tb: TracebackType) -> None:
|
|
74
|
+
try:
|
|
75
|
+
tb_str = "".join(traceback.format_exception(exception_type, value, tb))
|
|
76
|
+
ctx = click.get_current_context(silent=True)
|
|
77
|
+
command_context = ctx.command_path if ctx else "outside_command_context"
|
|
78
|
+
|
|
79
|
+
message = (
|
|
80
|
+
f"Command: {command_context} | Type: {exception_type.__name__!s} | Value: {value!s} | Traceback: {tb_str}"
|
|
81
|
+
)
|
|
82
|
+
_log_command(message=message)
|
|
83
|
+
finally:
|
|
84
|
+
_notify_exception(exception_type, value, tb)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class CommandLoggingGroup(click.Group):
|
|
88
|
+
def _format_ctx(self, ctx: click.Context) -> str:
|
|
89
|
+
parts = []
|
|
90
|
+
for k, v in ctx.params.items():
|
|
91
|
+
if v is True:
|
|
92
|
+
parts.append(f"--{k}")
|
|
93
|
+
elif v is False or v is None:
|
|
94
|
+
continue
|
|
95
|
+
else:
|
|
96
|
+
parts.append(f"--{k} {v}")
|
|
97
|
+
params = " ".join(parts)
|
|
98
|
+
args = " ".join(ctx.args)
|
|
99
|
+
return (
|
|
100
|
+
f"""Commands: {ctx.command_path} | Subcommand: {ctx.invoked_subcommand} | Params: {params} | Args:{args}"""
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
def invoke(self, ctx: click.Context) -> any:
|
|
104
|
+
"""Overrides the default invoke to wrap command execution with tracking."""
|
|
105
|
+
start_time = time()
|
|
106
|
+
error_message = None
|
|
107
|
+
|
|
108
|
+
try:
|
|
109
|
+
return super().invoke(ctx)
|
|
110
|
+
except click.ClickException as e:
|
|
111
|
+
error_message = str(e)
|
|
112
|
+
e.show()
|
|
113
|
+
ctx.exit(e.exit_code)
|
|
114
|
+
except Exception as e:
|
|
115
|
+
error_message = str(e)
|
|
116
|
+
raise
|
|
117
|
+
finally:
|
|
118
|
+
_log_command(
|
|
119
|
+
message=self._format_ctx(ctx),
|
|
120
|
+
duration=int(time() - start_time),
|
|
121
|
+
error=error_message,
|
|
122
|
+
)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from contextlib import suppress
|
|
3
|
+
from typing import Dict, List, Optional, TypedDict
|
|
4
|
+
|
|
5
|
+
import click
|
|
6
|
+
from simple_term_menu import TerminalMenu
|
|
7
|
+
|
|
8
|
+
from lightning_sdk.cli.legacy.exceptions import StudioCliError
|
|
9
|
+
from lightning_sdk.organization import Organization
|
|
10
|
+
from lightning_sdk.owner import Owner
|
|
11
|
+
from lightning_sdk.user import User
|
|
12
|
+
from lightning_sdk.utils.resolve import ApiException, _get_authed_user, _resolve_org, _resolve_user
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class _OwnerMenuType(TypedDict):
|
|
16
|
+
name: str
|
|
17
|
+
is_org: bool
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class OwnerMenu:
|
|
21
|
+
"""This class is used to select a teamspace owner (org/user) from a list of possible owners.
|
|
22
|
+
|
|
23
|
+
It can be used to select an owner from a list of possible owners, or to resolve an owner from a name.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def _get_owner_from_interactive_menu(self, possible_owners: Dict[str, _OwnerMenuType]) -> _OwnerMenuType:
|
|
27
|
+
owner_ids = sorted(possible_owners.keys())
|
|
28
|
+
terminal_menu = self._prepare_terminal_menu_owners([possible_owners[k] for k in owner_ids])
|
|
29
|
+
terminal_menu.show()
|
|
30
|
+
|
|
31
|
+
selected_id = owner_ids[terminal_menu.chosen_menu_index]
|
|
32
|
+
return possible_owners[selected_id]
|
|
33
|
+
|
|
34
|
+
def _get_owner_from_name(self, owner: str, possible_owners: Dict[str, _OwnerMenuType]) -> _OwnerMenuType:
|
|
35
|
+
for _, ts in possible_owners.items():
|
|
36
|
+
if ts["name"]:
|
|
37
|
+
return ts
|
|
38
|
+
|
|
39
|
+
click.echo(f"Could not find Owner {owner}, please select it from the list:")
|
|
40
|
+
return self._get_owner_from_interactive_menu(possible_owners)
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def _prepare_terminal_menu_owners(
|
|
44
|
+
possible_owners: List[_OwnerMenuType], title: Optional[str] = None
|
|
45
|
+
) -> TerminalMenu:
|
|
46
|
+
if title is None:
|
|
47
|
+
title = "Please select a Teamspace-Owner out of the following:"
|
|
48
|
+
|
|
49
|
+
return TerminalMenu(
|
|
50
|
+
[f"{to['name']} ({'Organization' if to['is_org'] else 'User'})" for to in possible_owners],
|
|
51
|
+
title=title,
|
|
52
|
+
clear_menu_on_exit=True,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def _get_possible_owners(user: User) -> Dict[str, _OwnerMenuType]:
|
|
57
|
+
user_api = user._user_api
|
|
58
|
+
|
|
59
|
+
orgs = user_api._get_organizations_for_authed_user()
|
|
60
|
+
owners: Dict[str, _OwnerMenuType] = {user.id: {"name": user.name, "is_org": False}}
|
|
61
|
+
|
|
62
|
+
for org in orgs:
|
|
63
|
+
owners[org.id] = {"name": org.name, "is_org": True}
|
|
64
|
+
|
|
65
|
+
return owners
|
|
66
|
+
|
|
67
|
+
def __call__(self, owner: Optional[str] = None) -> Owner:
|
|
68
|
+
try:
|
|
69
|
+
# try to resolve the teamspace from the name, environment or config
|
|
70
|
+
resolved_owner = None
|
|
71
|
+
with suppress(ApiException, ValueError, RuntimeError):
|
|
72
|
+
resolved_owner = _resolve_org(owner)
|
|
73
|
+
|
|
74
|
+
if resolved_owner is not None:
|
|
75
|
+
return resolved_owner
|
|
76
|
+
|
|
77
|
+
with suppress(ApiException, ValueError, RuntimeError):
|
|
78
|
+
resolved_owner = _resolve_user(owner)
|
|
79
|
+
|
|
80
|
+
if resolved_owner is not None:
|
|
81
|
+
return resolved_owner
|
|
82
|
+
|
|
83
|
+
if os.environ.get("LIGHTNING_NON_INTERACTIVE", "0") == "1":
|
|
84
|
+
raise ValueError(
|
|
85
|
+
"Owner selection is not supported in non-interactive mode. Please provide an owner name."
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
# if the owner is not resolved, try to get the owner from the interactive menu
|
|
89
|
+
# this could mean that either no owner was provided or the provided owner is not valid
|
|
90
|
+
user = _get_authed_user()
|
|
91
|
+
|
|
92
|
+
possible_owners = self._get_possible_owners(user)
|
|
93
|
+
if owner is None:
|
|
94
|
+
owner_dict = self._get_owner_from_interactive_menu(possible_owners=possible_owners)
|
|
95
|
+
|
|
96
|
+
else:
|
|
97
|
+
owner_dict = self._get_owner_from_name(owner=owner, possible_owners=possible_owners)
|
|
98
|
+
|
|
99
|
+
if owner_dict.get("is_org", False):
|
|
100
|
+
return Organization(owner_dict.get("name", None))
|
|
101
|
+
|
|
102
|
+
return User(owner_dict.get("name", None))
|
|
103
|
+
except KeyboardInterrupt:
|
|
104
|
+
raise KeyboardInterrupt from None
|
|
105
|
+
|
|
106
|
+
except Exception as e:
|
|
107
|
+
raise StudioCliError(
|
|
108
|
+
f"Could not find the given Teamspace-Owner {owner}. "
|
|
109
|
+
"Please contact Lightning AI directly to resolve this issue."
|
|
110
|
+
) from e
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from lightning_sdk.teamspace import Teamspace
|
|
4
|
+
from lightning_sdk.utils.resolve import _resolve_teamspace
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def resolve_teamspace_owner_name_format(teamspace_name: Optional[str]) -> Optional[Teamspace]:
|
|
8
|
+
teamspace_resolved = None
|
|
9
|
+
if teamspace_name is None:
|
|
10
|
+
return _resolve_teamspace(None, None, None)
|
|
11
|
+
|
|
12
|
+
splits = teamspace_name.split("/")
|
|
13
|
+
if len(splits) == 1:
|
|
14
|
+
try:
|
|
15
|
+
teamspace_resolved = _resolve_teamspace(teamspace_name, None, None)
|
|
16
|
+
except Exception:
|
|
17
|
+
teamspace_resolved = None
|
|
18
|
+
|
|
19
|
+
elif len(splits) == 2:
|
|
20
|
+
try:
|
|
21
|
+
try:
|
|
22
|
+
teamspace_resolved = _resolve_teamspace(splits[1], splits[0], None)
|
|
23
|
+
except Exception:
|
|
24
|
+
teamspace_resolved = _resolve_teamspace(splits[1], None, splits[0])
|
|
25
|
+
except Exception:
|
|
26
|
+
teamspace_resolved = None
|
|
27
|
+
|
|
28
|
+
return teamspace_resolved
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
|
|
6
|
+
from lightning_sdk.studio import Studio
|
|
7
|
+
from lightning_sdk.utils.resolve import _get_studio_url
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def rich_to_str(*renderables: Any) -> str:
|
|
11
|
+
with open(os.devnull, "w") as f:
|
|
12
|
+
console = Console(file=f, record=True)
|
|
13
|
+
console.print(*renderables)
|
|
14
|
+
return console.export_text(styles=True)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# not supported on all terminals (e.g. older ones). in that case it's a name without a link
|
|
18
|
+
# see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda#hyperlinks-aka-html-like-anchors-in-terminal-emulators
|
|
19
|
+
# for details and
|
|
20
|
+
# https://github.com/Alhadis/OSC8-Adoption/blob/main/README.md for status of OSC8 adoption
|
|
21
|
+
def studio_name_link(studio: Studio, to_ascii: bool = True) -> str:
|
|
22
|
+
"""Hyperlink a studio name.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
studio: the studio whose name to print and link to the studio url
|
|
26
|
+
to_ascii: whether return a plain ascii string with characters for linking converted to ascii as well.
|
|
27
|
+
if False, returns the rich markup directly.
|
|
28
|
+
"""
|
|
29
|
+
url = _get_studio_url(studio)
|
|
30
|
+
|
|
31
|
+
studio_link_markup = f"[link={url}]{studio.name}[/link]"
|
|
32
|
+
if not to_ascii:
|
|
33
|
+
return studio_link_markup
|
|
34
|
+
|
|
35
|
+
return rich_to_str(studio_link_markup).strip("\n")
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from lightning_sdk.organization import Organization
|
|
2
|
+
from lightning_sdk.studio import Studio
|
|
3
|
+
from lightning_sdk.teamspace import Teamspace
|
|
4
|
+
from lightning_sdk.utils.config import Config, DefaultConfigKeys
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def save_teamspace_to_config(teamspace: Teamspace, overwrite: bool = False) -> None:
|
|
8
|
+
saved = _save_to_config_if_not_exists(DefaultConfigKeys.teamspace_name, teamspace.name, overwrite)
|
|
9
|
+
saved = _save_to_config_if_not_exists(DefaultConfigKeys.teamspace_owner, teamspace.owner.name, overwrite=saved)
|
|
10
|
+
saved = _save_to_config_if_not_exists(
|
|
11
|
+
DefaultConfigKeys.teamspace_owner_type,
|
|
12
|
+
"organization" if isinstance(teamspace.owner, Organization) else "user",
|
|
13
|
+
overwrite=saved,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def save_studio_to_config(studio: Studio, overwrite: bool = False) -> None:
|
|
18
|
+
saved = _save_to_config_if_not_exists(DefaultConfigKeys.studio, studio.name, overwrite)
|
|
19
|
+
save_teamspace_to_config(studio.teamspace, overwrite=saved)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _save_to_config_if_not_exists(key: str, value: str, overwrite: bool = False) -> bool:
|
|
23
|
+
cfg = Config()
|
|
24
|
+
if overwrite or cfg.get(key) is None:
|
|
25
|
+
cfg.set(key, value)
|
|
26
|
+
return True
|
|
27
|
+
return False
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import platform
|
|
3
|
+
import uuid
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
from lightning_sdk.lightning_cloud.login import Auth
|
|
8
|
+
from lightning_sdk.utils.config import _DEFAULT_CONFIG_FILE_PATH
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def configure_ssh_internal(force_download: bool = False) -> str:
|
|
12
|
+
"""Internal function to configure SSH without Click decorators."""
|
|
13
|
+
auth = Auth()
|
|
14
|
+
auth.authenticate()
|
|
15
|
+
return download_ssh_keys(auth.api_key, force_download=force_download)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def download_ssh_keys(
|
|
19
|
+
api_key: Optional[str],
|
|
20
|
+
force_download: bool = False,
|
|
21
|
+
ssh_key_name: str = "lightning_rsa",
|
|
22
|
+
) -> str:
|
|
23
|
+
"""Download the SSH key for a User."""
|
|
24
|
+
ssh_private_key_path = os.path.join(os.path.expanduser(os.path.dirname(_DEFAULT_CONFIG_FILE_PATH)), ssh_key_name)
|
|
25
|
+
|
|
26
|
+
os.makedirs(os.path.dirname(ssh_private_key_path), exist_ok=True)
|
|
27
|
+
|
|
28
|
+
if not os.path.isfile(ssh_private_key_path) or force_download:
|
|
29
|
+
key_id = str(uuid.uuid4())
|
|
30
|
+
download_file(
|
|
31
|
+
f"https://lightning.ai/setup/ssh-gen?t={api_key}&id={key_id}&machineName={platform.node()}",
|
|
32
|
+
Path(ssh_private_key_path),
|
|
33
|
+
overwrite=True,
|
|
34
|
+
chmod=0o600,
|
|
35
|
+
)
|
|
36
|
+
download_file(
|
|
37
|
+
f"https://lightning.ai/setup/ssh-public?t={api_key}&id={key_id}",
|
|
38
|
+
Path(ssh_private_key_path + ".pub"),
|
|
39
|
+
overwrite=True,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
return ssh_private_key_path
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def download_file(url: str, local_path: Path, overwrite: bool = True, chmod: Optional[int] = None) -> None:
|
|
46
|
+
"""Download a file from a URL."""
|
|
47
|
+
import requests
|
|
48
|
+
|
|
49
|
+
if os.path.isfile(local_path) and not overwrite:
|
|
50
|
+
raise FileExistsError(f"The file {local_path} already exists and overwrite is set to False.")
|
|
51
|
+
|
|
52
|
+
response = requests.get(url, stream=True)
|
|
53
|
+
response.raise_for_status()
|
|
54
|
+
|
|
55
|
+
with open(local_path, "wb") as file:
|
|
56
|
+
for chunk in response.iter_content(chunk_size=8192):
|
|
57
|
+
file.write(chunk)
|
|
58
|
+
if chmod is not None:
|
|
59
|
+
os.chmod(local_path, 0o600)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from contextlib import suppress
|
|
3
|
+
from typing import Dict, List, Optional, Union
|
|
4
|
+
|
|
5
|
+
import click
|
|
6
|
+
from simple_term_menu import TerminalMenu
|
|
7
|
+
|
|
8
|
+
from lightning_sdk.cli.legacy.exceptions import StudioCliError
|
|
9
|
+
from lightning_sdk.studio import VM, Studio
|
|
10
|
+
from lightning_sdk.teamspace import Teamspace
|
|
11
|
+
from lightning_sdk.utils.resolve import _get_authed_user
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class StudiosMenu:
|
|
15
|
+
"""This class is used to select a studio from a list of possible studios within a teamspace.
|
|
16
|
+
|
|
17
|
+
It can be used to select a studio from a list of possible studios, or to resolve a studio from a name.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, teamspace: Teamspace, vm: bool = False) -> None:
|
|
21
|
+
"""Initialize the StudiosMenu with a teamspace.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
teamspace: The teamspace to list studios from
|
|
25
|
+
"""
|
|
26
|
+
self.teamspace = teamspace
|
|
27
|
+
self.vm = vm
|
|
28
|
+
|
|
29
|
+
def _get_studio_from_interactive_menu(self, possible_studios: Dict[str, Union[Studio, VM]]) -> Union[Studio, VM]:
|
|
30
|
+
studio_names = sorted(possible_studios.keys())
|
|
31
|
+
terminal_menu = self._prepare_terminal_menu_studios(studio_names, vm=self.vm)
|
|
32
|
+
terminal_menu.show()
|
|
33
|
+
|
|
34
|
+
selected_name = studio_names[terminal_menu.chosen_menu_index]
|
|
35
|
+
return possible_studios[selected_name]
|
|
36
|
+
|
|
37
|
+
def _get_studio_from_name(self, studio: str, possible_studios: Dict[str, Union[Studio, VM]]) -> Union[Studio, VM]:
|
|
38
|
+
if studio in possible_studios:
|
|
39
|
+
return possible_studios[studio]
|
|
40
|
+
|
|
41
|
+
click.echo(f"Could not find {'VM' if self.vm else 'Studio'} {studio}, please select it from the list:")
|
|
42
|
+
return self._get_studio_from_interactive_menu(possible_studios)
|
|
43
|
+
|
|
44
|
+
@staticmethod
|
|
45
|
+
def _prepare_terminal_menu_studios(
|
|
46
|
+
studio_names: List[str], title: Optional[str] = None, vm: bool = False
|
|
47
|
+
) -> TerminalMenu:
|
|
48
|
+
if title is None:
|
|
49
|
+
title = f"Please select a {'VM' if vm else 'Studio'} out of the following:"
|
|
50
|
+
|
|
51
|
+
return TerminalMenu(studio_names, title=title, clear_menu_on_exit=True)
|
|
52
|
+
|
|
53
|
+
def _get_possible_studios(self) -> Dict[str, Union[Studio, VM]]:
|
|
54
|
+
"""Get all available studios in the teamspace."""
|
|
55
|
+
studios: Dict[str, Union[Studio, VM]] = {}
|
|
56
|
+
|
|
57
|
+
user = _get_authed_user()
|
|
58
|
+
teamspace_studios = self.teamspace.vms if self.vm else self.teamspace.studios
|
|
59
|
+
for studio in teamspace_studios:
|
|
60
|
+
if studio._studio.user_id == user.id:
|
|
61
|
+
studios[studio.name] = studio
|
|
62
|
+
return studios
|
|
63
|
+
|
|
64
|
+
def __call__(self, studio: Optional[str] = None) -> Union[Studio, VM]:
|
|
65
|
+
"""Select a studio from the teamspace.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
studio: Optional studio name to select. If not provided, will show interactive menu.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Selected Studio/VM object
|
|
72
|
+
|
|
73
|
+
Raises:
|
|
74
|
+
StudioCliError: If studio selection fails
|
|
75
|
+
"""
|
|
76
|
+
try:
|
|
77
|
+
# try to resolve the studio from the name, environment or config
|
|
78
|
+
resolved_studio = None
|
|
79
|
+
|
|
80
|
+
selected_cls = VM if self.vm else Studio
|
|
81
|
+
|
|
82
|
+
with suppress(Exception):
|
|
83
|
+
resolved_studio = selected_cls(name=studio, teamspace=self.teamspace, create_ok=False)
|
|
84
|
+
|
|
85
|
+
if resolved_studio is not None:
|
|
86
|
+
return resolved_studio
|
|
87
|
+
|
|
88
|
+
if os.environ.get("LIGHTNING_NON_INTERACTIVE", "0") == "1" and studio is None:
|
|
89
|
+
raise ValueError(
|
|
90
|
+
f"{'VM' if self.vm else 'Studio'} selection is not supported in non-interactive mode. "
|
|
91
|
+
"Please provide a studio name."
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
click.echo(f"Listing studios in teamspace {self.teamspace.owner.name}/{self.teamspace.name}...")
|
|
95
|
+
|
|
96
|
+
possible_studios = self._get_possible_studios()
|
|
97
|
+
|
|
98
|
+
if not possible_studios:
|
|
99
|
+
raise ValueError(f"No studios found in teamspace {self.teamspace.name}")
|
|
100
|
+
|
|
101
|
+
if studio is None:
|
|
102
|
+
return self._get_studio_from_interactive_menu(possible_studios)
|
|
103
|
+
|
|
104
|
+
return self._get_studio_from_name(studio, possible_studios)
|
|
105
|
+
|
|
106
|
+
except KeyboardInterrupt:
|
|
107
|
+
raise KeyboardInterrupt from None
|
|
108
|
+
|
|
109
|
+
except Exception as e:
|
|
110
|
+
raise StudioCliError(
|
|
111
|
+
f"Could not resolve a {'VM' if self.vm else 'Studio'}. "
|
|
112
|
+
"Please pass it as an argument or contact Lightning AI directly to resolve this issue."
|
|
113
|
+
) from e
|