lightning-sdk 0.1.3__py3-none-any.whl → 0.1.47__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lightning_sdk/__init__.py +12 -2
- lightning_sdk/agents.py +46 -0
- lightning_sdk/ai_hub.py +185 -0
- lightning_sdk/api/__init__.py +4 -0
- lightning_sdk/api/agents_api.py +107 -0
- lightning_sdk/api/ai_hub_api.py +130 -0
- lightning_sdk/api/deployment_api.py +574 -0
- lightning_sdk/api/job_api.py +328 -0
- lightning_sdk/api/lit_registry_api.py +12 -0
- lightning_sdk/api/mmt_api.py +205 -0
- lightning_sdk/api/org_api.py +1 -3
- lightning_sdk/api/studio_api.py +172 -81
- lightning_sdk/api/teamspace_api.py +237 -20
- lightning_sdk/api/user_api.py +24 -9
- lightning_sdk/api/utils.py +429 -48
- lightning_sdk/cli/ai_hub.py +49 -0
- lightning_sdk/cli/download.py +132 -0
- lightning_sdk/cli/entrypoint.py +13 -3
- lightning_sdk/cli/list.py +54 -0
- lightning_sdk/cli/run.py +206 -0
- lightning_sdk/cli/serve.py +218 -0
- lightning_sdk/cli/studios_menu.py +78 -0
- lightning_sdk/cli/teamspace_menu.py +94 -0
- lightning_sdk/cli/upload.py +79 -89
- lightning_sdk/constants.py +29 -1
- lightning_sdk/deployment/__init__.py +25 -0
- lightning_sdk/deployment/deployment.py +389 -0
- lightning_sdk/helpers.py +49 -0
- lightning_sdk/job/__init__.py +5 -0
- lightning_sdk/job/base.py +359 -0
- lightning_sdk/job/job.py +291 -0
- lightning_sdk/job/v1.py +269 -0
- lightning_sdk/job/v2.py +221 -0
- lightning_sdk/job/work.py +81 -0
- lightning_sdk/lightning_cloud/__version__.py +1 -1
- lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
- lightning_sdk/lightning_cloud/env.py +1 -0
- lightning_sdk/lightning_cloud/login.py +12 -8
- lightning_sdk/lightning_cloud/openapi/__init__.py +289 -42
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +10 -0
- lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py +141 -0
- lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1075 -227
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +9 -1
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +992 -233
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +883 -120
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +10 -5
- lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py +756 -0
- lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +422 -1
- lightning_sdk/lightning_cloud/openapi/api/experiments_service_api.py +242 -0
- lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +674 -0
- lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +3823 -0
- lightning_sdk/lightning_cloud/openapi/api/lightningapp_instance_service_api.py +158 -594
- lightning_sdk/lightning_cloud/openapi/api/lightningapp_v2_service_api.py +0 -1086
- lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +113 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +1753 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +343 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
- lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
- lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
- lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
- lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
- lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
- lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +279 -40
- lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/{assistants_id_body.py → agents_id_body.py} +201 -71
- lightning_sdk/lightning_cloud/openapi/models/app_id_works_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_cluster_health_response.py → captures_id_body.py} +16 -16
- lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +58 -6
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/create.py +157 -1
- lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +43 -17
- lightning_sdk/lightning_cloud/openapi/models/experiment_name_variant_name_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +107 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_lightningapp_instance.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
- lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
- lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
- lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +52 -26
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
- lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
- lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +159 -55
- lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
- lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
- lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +43 -43
- lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +136 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
- lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_container_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_deployment_state.py} +11 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_strategy.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
- lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +67 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +137 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +723 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
- lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
- lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_multi_machine_job_event_type.py} +9 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
- lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_resource_visibility.py} +37 -37
- lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
- lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_service_artifact.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +43 -43
- lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
- lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1032 -330
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
- lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
- lightning_sdk/lightning_cloud/rest_client.py +47 -23
- lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
- lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
- lightning_sdk/lightning_cloud/utils/data_connection.py +144 -7
- lightning_sdk/lit_registry.py +39 -0
- lightning_sdk/machine.py +21 -4
- lightning_sdk/mmt/__init__.py +4 -0
- lightning_sdk/mmt/base.py +326 -0
- lightning_sdk/mmt/mmt.py +306 -0
- lightning_sdk/mmt/v1.py +209 -0
- lightning_sdk/mmt/v2.py +221 -0
- lightning_sdk/models.py +153 -0
- lightning_sdk/organization.py +1 -1
- lightning_sdk/plugin.py +207 -41
- lightning_sdk/services/__init__.py +2 -1
- lightning_sdk/services/file_endpoint.py +116 -213
- lightning_sdk/services/finetune/__init__.py +13 -15
- lightning_sdk/services/utilities.py +99 -26
- lightning_sdk/status.py +11 -6
- lightning_sdk/studio.py +90 -17
- lightning_sdk/teamspace.py +240 -12
- lightning_sdk/user.py +1 -1
- lightning_sdk/utils/__init__.py +0 -0
- lightning_sdk/utils/dynamic.py +61 -0
- lightning_sdk/utils/enum.py +116 -0
- lightning_sdk/{utils.py → utils/resolve.py} +41 -4
- lightning_sdk-0.1.47.dist-info/LICENSE +21 -0
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/METADATA +30 -4
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/RECORD +487 -204
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/WHEEL +1 -1
- lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
- lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
- lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
- lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
- lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
- lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
- lightning_sdk/services/uploader.py +0 -123
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/entry_points.txt +0 -0
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.47.dist-info}/top_level.txt +0 -0
lightning_sdk/job/v1.py
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Dict, Optional, Union
|
|
2
|
+
|
|
3
|
+
from lightning_sdk.api.job_api import JobApiV1
|
|
4
|
+
from lightning_sdk.job.base import _BaseJob
|
|
5
|
+
from lightning_sdk.status import Status
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from lightning_sdk.machine import Machine
|
|
9
|
+
from lightning_sdk.organization import Organization
|
|
10
|
+
from lightning_sdk.studio import Studio
|
|
11
|
+
from lightning_sdk.teamspace import Teamspace
|
|
12
|
+
from lightning_sdk.user import User
|
|
13
|
+
|
|
14
|
+
from functools import cached_property
|
|
15
|
+
|
|
16
|
+
from lightning_sdk.job.work import Work
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class _JobV1(_BaseJob):
|
|
20
|
+
"""Implementation to run async workloads from your Studio."""
|
|
21
|
+
|
|
22
|
+
def __init__(
|
|
23
|
+
self,
|
|
24
|
+
name: str,
|
|
25
|
+
teamspace: Union[str, "Teamspace", None] = None,
|
|
26
|
+
org: Union[str, "Organization", None] = None,
|
|
27
|
+
user: Union[str, "User", None] = None,
|
|
28
|
+
*,
|
|
29
|
+
_fetch_job: bool = True,
|
|
30
|
+
) -> None:
|
|
31
|
+
"""Fetch already existing jobs.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
name: the name of the job
|
|
35
|
+
teamspace: the teamspace the job is part of
|
|
36
|
+
org: the name of the organization owning the :param`teamspace` in case it is owned by an org
|
|
37
|
+
user: the name of the user owning the :param`teamspace`
|
|
38
|
+
in case it is owned directly by a user instead of an org
|
|
39
|
+
"""
|
|
40
|
+
self._job_api = JobApiV1()
|
|
41
|
+
super().__init__(name=name, teamspace=teamspace, org=org, user=user, _fetch_job=_fetch_job)
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
def run(
|
|
45
|
+
cls,
|
|
46
|
+
name: str,
|
|
47
|
+
machine: "Machine",
|
|
48
|
+
command: str,
|
|
49
|
+
studio: "Studio",
|
|
50
|
+
teamspace: Union[str, "Teamspace", None] = None,
|
|
51
|
+
org: Union[str, "Organization", None] = None,
|
|
52
|
+
user: Union[str, "User", None] = None,
|
|
53
|
+
cloud_account: Optional[str] = None,
|
|
54
|
+
interruptible: bool = False,
|
|
55
|
+
cluster: Optional[str] = None, # deprecated in favor of cloud_account
|
|
56
|
+
) -> "_BaseJob":
|
|
57
|
+
"""Start a new async workload from your studio.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
name: the name of the job
|
|
61
|
+
machine: the machine to run the workload on
|
|
62
|
+
command: the command to execute
|
|
63
|
+
studio: the studio the job belongs to
|
|
64
|
+
teamspace: the teamspace the job is part of
|
|
65
|
+
org: the organization owning the teamspace (if applicable)
|
|
66
|
+
user: the user owning the teamspace (if applicable)
|
|
67
|
+
cloud_account: the cloud account to run the workload on
|
|
68
|
+
interruptible: whether the workload can be interrupted
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
the created job
|
|
72
|
+
"""
|
|
73
|
+
return super().run(
|
|
74
|
+
name=name,
|
|
75
|
+
machine=machine,
|
|
76
|
+
command=command,
|
|
77
|
+
studio=studio,
|
|
78
|
+
image=None,
|
|
79
|
+
teamspace=teamspace,
|
|
80
|
+
org=org,
|
|
81
|
+
user=user,
|
|
82
|
+
cloud_account=cloud_account,
|
|
83
|
+
env=None,
|
|
84
|
+
interruptible=interruptible,
|
|
85
|
+
image_credentials=None,
|
|
86
|
+
cloud_account_auth=False,
|
|
87
|
+
cluster=cluster,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def _submit(
|
|
91
|
+
self,
|
|
92
|
+
machine: "Machine",
|
|
93
|
+
command: Optional[str] = None,
|
|
94
|
+
studio: Optional["Studio"] = None,
|
|
95
|
+
image: Optional[str] = None,
|
|
96
|
+
env: Optional[Dict[str, str]] = None,
|
|
97
|
+
interruptible: bool = False,
|
|
98
|
+
cloud_account: Optional[str] = None,
|
|
99
|
+
image_credentials: Optional[str] = None,
|
|
100
|
+
cloud_account_auth: bool = False,
|
|
101
|
+
artifacts_local: Optional[str] = None,
|
|
102
|
+
artifacts_remote: Optional[str] = None,
|
|
103
|
+
entrypoint: str = "sh -c",
|
|
104
|
+
) -> "_JobV1":
|
|
105
|
+
"""Submit a job to run on a machine.
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
machine: The machine to run the job on.
|
|
109
|
+
command: The command to execute.
|
|
110
|
+
studio: The studio the job belongs to.
|
|
111
|
+
image: The image to use for the job (not supported).
|
|
112
|
+
env: The environment variables for the job (not supported).
|
|
113
|
+
interruptible: Whether the job can be interrupted.
|
|
114
|
+
cloud_account: The cloud account to run the job on.
|
|
115
|
+
image_credentials: The image credentials for the job (not supported).
|
|
116
|
+
cloud_account_auth: Whether to use cloud account authentication for the job (not supported).
|
|
117
|
+
artifacts_local: The local path for persisting artifacts (not supported).
|
|
118
|
+
artifacts_remote: The remote path for persisting artifacts (not supported).
|
|
119
|
+
entrypoint: The entrypoint of your docker container (not supported).
|
|
120
|
+
Defaults to `sh -c` which just runs the provided command in a standard shell.
|
|
121
|
+
To use the pre-defined entrypoint of the provided image, set this to an empty string.
|
|
122
|
+
Only applicable when submitting docker jobs.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
The submitted job.
|
|
126
|
+
|
|
127
|
+
"""
|
|
128
|
+
if studio is None:
|
|
129
|
+
raise ValueError("Studio is required for submitting jobs")
|
|
130
|
+
if image is not None or image_credentials is not None or cloud_account_auth:
|
|
131
|
+
raise ValueError("Image is not supported for submitting jobs")
|
|
132
|
+
|
|
133
|
+
if artifacts_local is not None or artifacts_remote is not None:
|
|
134
|
+
raise ValueError("Specifying how to persist artifacts is not yet supported with jobs")
|
|
135
|
+
|
|
136
|
+
if env is not None:
|
|
137
|
+
raise ValueError("Environment variables are not supported for submitting jobs")
|
|
138
|
+
if command is None:
|
|
139
|
+
raise ValueError("Command is required for submitting jobs")
|
|
140
|
+
|
|
141
|
+
if entrypoint != "sh -c":
|
|
142
|
+
raise ValueError("Specifying the entrypoint is not yet supported with jobs")
|
|
143
|
+
|
|
144
|
+
# TODO: add support for empty names (will give an empty string)
|
|
145
|
+
_submitted = self._job_api.submit_job(
|
|
146
|
+
name=self._name,
|
|
147
|
+
command=command,
|
|
148
|
+
studio_id=studio._studio.id,
|
|
149
|
+
teamspace_id=self._teamspace.id,
|
|
150
|
+
cloud_account=cloud_account or "",
|
|
151
|
+
machine=machine,
|
|
152
|
+
interruptible=interruptible,
|
|
153
|
+
)
|
|
154
|
+
self._name = _submitted.name
|
|
155
|
+
self._job = _submitted
|
|
156
|
+
return self
|
|
157
|
+
|
|
158
|
+
def _update_internal_job(self) -> None:
|
|
159
|
+
try:
|
|
160
|
+
self._job = self._job_api.get_job(self._name, self.teamspace.id)
|
|
161
|
+
except ValueError as e:
|
|
162
|
+
raise ValueError(f"Job {self._name} does not exist in Teamspace {self.teamspace.name}") from e
|
|
163
|
+
|
|
164
|
+
@property
|
|
165
|
+
def status(self) -> "Status":
|
|
166
|
+
"""Returns the status of the job."""
|
|
167
|
+
try:
|
|
168
|
+
status = self._job_api.get_job_status(self._job.id, self.teamspace.id)
|
|
169
|
+
return _internal_status_to_external_status(status)
|
|
170
|
+
except Exception:
|
|
171
|
+
raise RuntimeError(
|
|
172
|
+
f"Job {self._name} does not exist in Teamspace {self.teamspace.name}. Did you delete it?"
|
|
173
|
+
) from None
|
|
174
|
+
|
|
175
|
+
def stop(self) -> None:
|
|
176
|
+
"""Stops the job. is blocking until the ob is stopped."""
|
|
177
|
+
if self.status in (Status.Stopped, Status.Failed):
|
|
178
|
+
return None
|
|
179
|
+
|
|
180
|
+
return self._job_api.stop_job(self._job.id, self.teamspace.id)
|
|
181
|
+
|
|
182
|
+
def delete(self) -> None:
|
|
183
|
+
"""Deletes the job.
|
|
184
|
+
|
|
185
|
+
Caution: this also deletes all artifacts created by the job.
|
|
186
|
+
"""
|
|
187
|
+
self._job_api.delete_job(self._job.id, self.teamspace.id)
|
|
188
|
+
|
|
189
|
+
@cached_property
|
|
190
|
+
def work(self) -> Work:
|
|
191
|
+
"""Get the work associated with the job."""
|
|
192
|
+
_work = self._job_api.list_works(self._job.id, self.teamspace.id)
|
|
193
|
+
if len(_work) == 0:
|
|
194
|
+
raise ValueError("No works found for job")
|
|
195
|
+
return Work(_work[0].id, self, self.teamspace)
|
|
196
|
+
|
|
197
|
+
@property
|
|
198
|
+
def machine(self) -> "Machine":
|
|
199
|
+
"""Get the machine the job is running on."""
|
|
200
|
+
return self.work.machine
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def name(self) -> str:
|
|
204
|
+
"""The name of the job."""
|
|
205
|
+
return self._job.name
|
|
206
|
+
|
|
207
|
+
@property
|
|
208
|
+
def artifact_path(self) -> Optional[str]:
|
|
209
|
+
"""The path to the artifacts of the job in the distributed teamspace filesystem."""
|
|
210
|
+
return self.work.artifact_path
|
|
211
|
+
|
|
212
|
+
@property
|
|
213
|
+
def snapshot_path(self) -> Optional[str]:
|
|
214
|
+
"""The path to the snapshot of the job in the distributed teamspace filesystem."""
|
|
215
|
+
return f"/teamspace/jobs/{self.name}/snapshot"
|
|
216
|
+
|
|
217
|
+
@property
|
|
218
|
+
def share_path(self) -> Optional[str]:
|
|
219
|
+
"""The path to the share of the job in the distributed teamspace filesystem."""
|
|
220
|
+
return f"/teamspace/jobs/{self.name}/share"
|
|
221
|
+
|
|
222
|
+
@property
|
|
223
|
+
def logs(self) -> str:
|
|
224
|
+
"""The logs of the job."""
|
|
225
|
+
return self.work.logs
|
|
226
|
+
|
|
227
|
+
@property
|
|
228
|
+
def image(self) -> Optional[str]:
|
|
229
|
+
"""The image used to submit the job."""
|
|
230
|
+
# jobsv1 don't support images, so return None here
|
|
231
|
+
return None
|
|
232
|
+
|
|
233
|
+
@property
|
|
234
|
+
def studio(self) -> Optional["Studio"]:
|
|
235
|
+
"""The studio used to submit the job."""
|
|
236
|
+
from lightning_sdk.studio import Studio
|
|
237
|
+
|
|
238
|
+
studio_name = self._job_api.get_studio_name(self._guaranteed_job)
|
|
239
|
+
return Studio(studio_name, teamspace=self.teamspace)
|
|
240
|
+
|
|
241
|
+
@property
|
|
242
|
+
def command(self) -> str:
|
|
243
|
+
"""The command the job is running."""
|
|
244
|
+
return self._job_api.get_command(self._guaranteed_job)
|
|
245
|
+
|
|
246
|
+
# the following and functions are solely to make the Work class function
|
|
247
|
+
@property
|
|
248
|
+
def _id(self) -> str:
|
|
249
|
+
return self._guaranteed_job.id
|
|
250
|
+
|
|
251
|
+
def _name_filter(self, name: str) -> str:
|
|
252
|
+
return name.replace("root.", "")
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def _internal_status_to_external_status(internal_status: str) -> "Status":
|
|
256
|
+
"""Converts internal status strings from HTTP requests to external enums."""
|
|
257
|
+
return {
|
|
258
|
+
# don't get a status if no instance alive
|
|
259
|
+
None: Status.Stopped,
|
|
260
|
+
# TODO: should we have deleted in here?
|
|
261
|
+
"LIGHTNINGAPP_INSTANCE_STATE_UNSPECIFIED": Status.Pending,
|
|
262
|
+
"LIGHTNINGAPP_INSTANCE_STATE_IMAGE_BUILDING": Status.Pending,
|
|
263
|
+
"LIGHTNINGAPP_INSTANCE_STATE_NOT_STARTED": Status.Pending,
|
|
264
|
+
"LIGHTNINGAPP_INSTANCE_STATE_PENDING": Status.Pending,
|
|
265
|
+
"LIGHTNINGAPP_INSTANCE_STATE_RUNNING": Status.Running,
|
|
266
|
+
"LIGHTNINGAPP_INSTANCE_STATE_FAILED": Status.Failed,
|
|
267
|
+
"LIGHTNINGAPP_INSTANCE_STATE_STOPPED": Status.Stopped,
|
|
268
|
+
"LIGHTNINGAPP_INSTANCE_STATE_COMPLETED": Status.Completed,
|
|
269
|
+
}[internal_status]
|
lightning_sdk/job/v2.py
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional, Union
|
|
2
|
+
|
|
3
|
+
from lightning_sdk.api.job_api import JobApiV2
|
|
4
|
+
from lightning_sdk.job.base import _BaseJob
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from lightning_sdk.machine import Machine
|
|
8
|
+
from lightning_sdk.organization import Organization
|
|
9
|
+
from lightning_sdk.status import Status
|
|
10
|
+
from lightning_sdk.studio import Studio
|
|
11
|
+
from lightning_sdk.teamspace import Teamspace
|
|
12
|
+
from lightning_sdk.user import User
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class _JobV2(_BaseJob):
|
|
16
|
+
def __init__(
|
|
17
|
+
self,
|
|
18
|
+
name: str,
|
|
19
|
+
teamspace: Union[str, "Teamspace", None] = None,
|
|
20
|
+
org: Union[str, "Organization", None] = None,
|
|
21
|
+
user: Union[str, "User", None] = None,
|
|
22
|
+
*,
|
|
23
|
+
_fetch_job: bool = True,
|
|
24
|
+
) -> None:
|
|
25
|
+
"""Fetch already existing jobs.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
name: the name of the job
|
|
29
|
+
teamspace: the teamspace the job is part of
|
|
30
|
+
org: the name of the organization owning the :param`teamspace` in case it is owned by an org
|
|
31
|
+
user: the name of the user owning the :param`teamspace`
|
|
32
|
+
in case it is owned directly by a user instead of an org.
|
|
33
|
+
"""
|
|
34
|
+
self._job_api = JobApiV2()
|
|
35
|
+
super().__init__(name=name, teamspace=teamspace, org=org, user=user, _fetch_job=_fetch_job)
|
|
36
|
+
|
|
37
|
+
def _submit(
|
|
38
|
+
self,
|
|
39
|
+
machine: "Machine",
|
|
40
|
+
command: Optional[str] = None,
|
|
41
|
+
studio: Optional["Studio"] = None,
|
|
42
|
+
image: Optional[str] = None,
|
|
43
|
+
env: Optional[Dict[str, str]] = None,
|
|
44
|
+
interruptible: bool = False,
|
|
45
|
+
cloud_account: Optional[str] = None,
|
|
46
|
+
image_credentials: Optional[str] = None,
|
|
47
|
+
cloud_account_auth: bool = False,
|
|
48
|
+
artifacts_local: Optional[str] = None,
|
|
49
|
+
artifacts_remote: Optional[str] = None,
|
|
50
|
+
entrypoint: str = "sh -c",
|
|
51
|
+
) -> "_JobV2":
|
|
52
|
+
"""Submit a new job to the Lightning AI platform.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
machine: The machine type to run the job on. One of {", ".join(_MACHINE_VALUES)}.
|
|
56
|
+
command: The command to run inside your job. Required if using a studio. Optional if using an image.
|
|
57
|
+
If not provided for images, will run the container entrypoint and default command.
|
|
58
|
+
studio: The studio env to run the job with. Mutually exclusive with image.
|
|
59
|
+
image: The docker image to run the job with. Mutually exclusive with studio.
|
|
60
|
+
env: Environment variables to set inside the job.
|
|
61
|
+
interruptible: Whether the job should run on interruptible instances. They are cheaper but can be preempted.
|
|
62
|
+
cloud_account: The cloud account to run the job on.
|
|
63
|
+
Defaults to the studio cloud account if running with studio compute env.
|
|
64
|
+
If not provided will fall back to the teamspaces default cloud account.
|
|
65
|
+
image_credentials: The credentials used to pull the image. Required if the image is private.
|
|
66
|
+
This should be the name of the respective credentials secret created on the Lightning AI platform.
|
|
67
|
+
cloud_account_auth: Whether to authenticate with the cloud account to pull the image.
|
|
68
|
+
Required if the registry is part of a cloud provider (e.g. ECR).
|
|
69
|
+
artifacts_local: The path of inside the docker container, you want to persist images from.
|
|
70
|
+
CAUTION: When setting this to "/", it will effectively erase your container.
|
|
71
|
+
Only supported for jobs with a docker image compute environment.
|
|
72
|
+
artifacts_remote: The remote storage to persist your artifacts to.
|
|
73
|
+
Should be of format <CONNECTION_TYPE>:<CONNECTION_NAME>:<PATH_WITHIN_CONNECTION>.
|
|
74
|
+
PATH_WITHIN_CONNECTION hereby is a path relative to the connection's root.
|
|
75
|
+
E.g. efs:data:some-path would result in an EFS connection named `data` and to the path `some-path`
|
|
76
|
+
within it.
|
|
77
|
+
Note that the connection needs to be added to the teamspace already in order for it to be found.
|
|
78
|
+
Only supported for jobs with a docker image compute environment.
|
|
79
|
+
entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
|
|
80
|
+
just runs the provided command in a standard shell.
|
|
81
|
+
To use the pre-defined entrypoint of the provided image, set this to an empty string.
|
|
82
|
+
Only applicable when submitting docker jobs.
|
|
83
|
+
"""
|
|
84
|
+
# Command is required if Studio is provided to know what to run
|
|
85
|
+
# Image is mutually exclusive with Studio
|
|
86
|
+
# Command is optional for Image
|
|
87
|
+
# Either image or studio must be provided
|
|
88
|
+
if studio is not None:
|
|
89
|
+
studio_id = studio._studio.id
|
|
90
|
+
if image is not None:
|
|
91
|
+
raise ValueError(
|
|
92
|
+
"image and studio are mutually exclusive as both define the environment to run the job in"
|
|
93
|
+
)
|
|
94
|
+
if command is None:
|
|
95
|
+
raise ValueError("command is required when using a studio")
|
|
96
|
+
else:
|
|
97
|
+
studio_id = None
|
|
98
|
+
if image is None:
|
|
99
|
+
raise ValueError("either image or studio must be provided")
|
|
100
|
+
|
|
101
|
+
submitted = self._job_api.submit_job(
|
|
102
|
+
name=self.name,
|
|
103
|
+
command=command,
|
|
104
|
+
cloud_account=cloud_account,
|
|
105
|
+
teamspace_id=self._teamspace.id,
|
|
106
|
+
studio_id=studio_id,
|
|
107
|
+
image=image,
|
|
108
|
+
machine=machine,
|
|
109
|
+
interruptible=interruptible,
|
|
110
|
+
env=env,
|
|
111
|
+
image_credentials=image_credentials,
|
|
112
|
+
cloud_account_auth=cloud_account_auth,
|
|
113
|
+
artifacts_local=artifacts_local,
|
|
114
|
+
artifacts_remote=artifacts_remote,
|
|
115
|
+
entrypoint=entrypoint,
|
|
116
|
+
)
|
|
117
|
+
self._job = submitted
|
|
118
|
+
self._name = submitted.name
|
|
119
|
+
return self
|
|
120
|
+
|
|
121
|
+
def stop(self) -> None:
|
|
122
|
+
"""Stop the job. If the job is already stopped, this is a no-op. This is blocking until the job is stopped."""
|
|
123
|
+
self._job_api.stop_job(job_id=self._guaranteed_job.id, teamspace_id=self._teamspace.id)
|
|
124
|
+
|
|
125
|
+
def delete(self) -> None:
|
|
126
|
+
"""Delete the job.
|
|
127
|
+
|
|
128
|
+
Caution: This also deletes all artifacts created by the job.
|
|
129
|
+
"""
|
|
130
|
+
self._job_api.delete_job(
|
|
131
|
+
job_id=self._guaranteed_job.id,
|
|
132
|
+
teamspace_id=self._teamspace.id,
|
|
133
|
+
cloudspace_id=self._guaranteed_job.spec.cloudspace_id,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def _latest_job(self) -> Any:
|
|
138
|
+
"""Guarantees to fetch the latest version of a job before returning it."""
|
|
139
|
+
self._update_internal_job()
|
|
140
|
+
return self._job
|
|
141
|
+
|
|
142
|
+
@property
|
|
143
|
+
def status(self) -> "Status":
|
|
144
|
+
"""The current status of the job."""
|
|
145
|
+
return self._job_api._job_state_to_external(self._latest_job.state)
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def machine(self) -> "Machine":
|
|
149
|
+
"""The machine type the job is running on."""
|
|
150
|
+
# only fetch the job it it hasn't been fetched yet as machine cannot change over time
|
|
151
|
+
return self._job_api._get_job_machine_from_spec(self._guaranteed_job.spec)
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def artifact_path(self) -> Optional[str]:
|
|
155
|
+
"""The path to the artifacts of the job within the distributed teamspace filesystem."""
|
|
156
|
+
if self._guaranteed_job.spec.image != "":
|
|
157
|
+
if self._guaranteed_job.spec.artifacts_destination != "":
|
|
158
|
+
splits = self._guaranteed_job.spec.artifacts_destination.split(":")
|
|
159
|
+
return f"/teamspace/{splits[0]}_connections/{splits[1]}/{splits[2]}"
|
|
160
|
+
return None
|
|
161
|
+
|
|
162
|
+
return f"/teamspace/jobs/{self._guaranteed_job.name}/artifacts"
|
|
163
|
+
|
|
164
|
+
@property
|
|
165
|
+
def snapshot_path(self) -> Optional[str]:
|
|
166
|
+
"""The path to the snapshot of the Studio used to create the job within the distributed teamspace filesystem."""
|
|
167
|
+
if self._guaranteed_job.spec.image != "":
|
|
168
|
+
return None
|
|
169
|
+
return f"/teamspace/jobs/{self._guaranteed_job.name}/snapshot"
|
|
170
|
+
|
|
171
|
+
@property
|
|
172
|
+
def share_path(self) -> Optional[str]:
|
|
173
|
+
"""The path to the share of the job within the distributed teamspace filesystem."""
|
|
174
|
+
raise NotImplementedError("Not implemented yet")
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def logs(self) -> str:
|
|
178
|
+
from lightning_sdk.status import Status
|
|
179
|
+
|
|
180
|
+
if self.status not in (Status.Failed, Status.Completed, Status.Stopped):
|
|
181
|
+
raise RuntimeError("Getting jobs logs while the job is pending or running is not supported yet!")
|
|
182
|
+
|
|
183
|
+
return self._job_api.get_logs_finished(job_id=self._guaranteed_job.id, teamspace_id=self.teamspace.id)
|
|
184
|
+
|
|
185
|
+
@property
|
|
186
|
+
def link(self) -> str:
|
|
187
|
+
if self._job_api.get_image_name(self._guaranteed_job):
|
|
188
|
+
return (
|
|
189
|
+
f"https://lightning.ai/{self.teamspace.owner.name}/{self.teamspace.name}/jobs/{self.name}?app_id=jobs"
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
return super().link
|
|
193
|
+
|
|
194
|
+
@property
|
|
195
|
+
def image(self) -> Optional[str]:
|
|
196
|
+
"""The image used to submit the job."""
|
|
197
|
+
return self._job_api.get_image_name(self._guaranteed_job)
|
|
198
|
+
|
|
199
|
+
@property
|
|
200
|
+
def studio(self) -> Optional["Studio"]:
|
|
201
|
+
"""The studio used to submit the job."""
|
|
202
|
+
from lightning_sdk.studio import Studio
|
|
203
|
+
|
|
204
|
+
studio_name = self._job_api.get_studio_name(self._guaranteed_job)
|
|
205
|
+
|
|
206
|
+
# if job was submitted with image, studio will be None
|
|
207
|
+
if not studio_name:
|
|
208
|
+
return None
|
|
209
|
+
return Studio(studio_name, teamspace=self.teamspace)
|
|
210
|
+
|
|
211
|
+
@property
|
|
212
|
+
def command(self) -> str:
|
|
213
|
+
"""The command the job is running."""
|
|
214
|
+
return self._job_api.get_command(self._guaranteed_job)
|
|
215
|
+
|
|
216
|
+
def _update_internal_job(self) -> None:
|
|
217
|
+
if getattr(self, "_job", None) is None:
|
|
218
|
+
self._job = self._job_api.get_job_by_name(name=self._name, teamspace_id=self._teamspace.id)
|
|
219
|
+
return
|
|
220
|
+
|
|
221
|
+
self._job = self._job_api.get_job(job_id=self._job.id, teamspace_id=self._teamspace.id)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Optional, Protocol
|
|
2
|
+
|
|
3
|
+
from lightning_sdk.api.job_api import JobApiV1
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from lightning_sdk.job.base import MachineDict
|
|
7
|
+
from lightning_sdk.machine import Machine
|
|
8
|
+
from lightning_sdk.status import Status
|
|
9
|
+
from lightning_sdk.teamspace import Teamspace
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class _WorkHolder(Protocol):
|
|
13
|
+
@property
|
|
14
|
+
def _id(self) -> str:
|
|
15
|
+
...
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def name(self) -> str:
|
|
19
|
+
...
|
|
20
|
+
|
|
21
|
+
def _name_filter(self, name: str) -> str:
|
|
22
|
+
...
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Work:
|
|
26
|
+
def __init__(self, work_id: str, job: _WorkHolder, teamspace: "Teamspace") -> None:
|
|
27
|
+
self._id = work_id
|
|
28
|
+
self._job = job
|
|
29
|
+
self._teamspace = teamspace
|
|
30
|
+
self._job_api = JobApiV1()
|
|
31
|
+
self._work = None
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def _latest_work(self) -> Any:
|
|
35
|
+
self._work = self._job_api.get_work(work_id=self._id, job_id=self._job._id, teamspace_id=self._teamspace.id)
|
|
36
|
+
return self._work
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def _guaranteed_work(self) -> Any:
|
|
40
|
+
if self._work is None:
|
|
41
|
+
return self._latest_work
|
|
42
|
+
|
|
43
|
+
return self._work
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def id(self) -> str:
|
|
47
|
+
return self._guaranteed_work.id
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def name(self) -> str:
|
|
51
|
+
return self._job._name_filter(self._guaranteed_work.name)
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def machine(self) -> "Machine":
|
|
55
|
+
return self._job_api.get_machine_from_work(self._guaranteed_work)
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def artifact_path(self) -> Optional[str]:
|
|
59
|
+
return f"/teamspace/jobs/{self._job.name}/{self.name}"
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def status(self) -> "Status":
|
|
63
|
+
return self._job_api.get_status_from_work(self._latest_work)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def logs(self) -> str:
|
|
67
|
+
"""The logs of the work."""
|
|
68
|
+
from lightning_sdk.status import Status
|
|
69
|
+
|
|
70
|
+
if self.status not in (Status.Failed, Status.Completed, Status.Stopped):
|
|
71
|
+
raise RuntimeError("Getting jobs logs while the job is pending or running is not supported yet!")
|
|
72
|
+
|
|
73
|
+
return self._job_api.get_logs_finished(job_id=self._job._id, work_id=self._id, teamspace_id=self._teamspace.id)
|
|
74
|
+
|
|
75
|
+
def dict(self) -> "MachineDict":
|
|
76
|
+
"""Dict representation of the work."""
|
|
77
|
+
return {
|
|
78
|
+
"name": self.name,
|
|
79
|
+
"status": self.status,
|
|
80
|
+
"machine": self.machine,
|
|
81
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.5.
|
|
1
|
+
__version__ = "0.5.70"
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import click
|
|
2
1
|
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
def main():
|
|
6
|
-
pass
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@main.command()
|
|
10
|
-
def login():
|
|
3
|
+
def login() -> None:
|
|
11
4
|
"""Authorize the CLI to access Grid AI resources for a particular user.
|
|
12
|
-
|
|
13
|
-
a web browser will open to complete the authentication.
|
|
5
|
+
|
|
6
|
+
Use login command to force authenticate, a web browser will open to complete the authentication.
|
|
14
7
|
"""
|
|
15
8
|
from lightning_sdk.lightning_cloud.login import Auth # local to avoid circular import
|
|
16
9
|
|
|
@@ -18,10 +11,19 @@ def login():
|
|
|
18
11
|
auth.clear()
|
|
19
12
|
auth._run_server()
|
|
20
13
|
|
|
21
|
-
|
|
22
|
-
@main.command()
|
|
23
|
-
def logout():
|
|
14
|
+
def logout() -> None:
|
|
24
15
|
"""Logout from LightningCloud"""
|
|
25
16
|
from lightning_sdk.lightning_cloud.login import Auth # local to avoid circular import
|
|
26
17
|
|
|
27
18
|
Auth.clear()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def main() -> None:
|
|
22
|
+
"""CLI entrypoint."""
|
|
23
|
+
from fire import Fire
|
|
24
|
+
|
|
25
|
+
Fire({"login": login, "logout": logout})
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
if __name__ == "__main__":
|
|
29
|
+
main()
|