lightning-sdk 0.1.3__py3-none-any.whl → 0.1.46__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lightning_sdk/__init__.py +12 -2
- lightning_sdk/agents.py +46 -0
- lightning_sdk/ai_hub.py +185 -0
- lightning_sdk/api/__init__.py +4 -0
- lightning_sdk/api/agents_api.py +107 -0
- lightning_sdk/api/ai_hub_api.py +130 -0
- lightning_sdk/api/deployment_api.py +574 -0
- lightning_sdk/api/job_api.py +308 -0
- lightning_sdk/api/mmt_api.py +188 -0
- lightning_sdk/api/org_api.py +1 -3
- lightning_sdk/api/studio_api.py +172 -81
- lightning_sdk/api/teamspace_api.py +219 -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 +11 -3
- lightning_sdk/cli/run.py +206 -0
- lightning_sdk/cli/serve.py +218 -0
- lightning_sdk/cli/studios_menu.py +78 -0
- lightning_sdk/cli/upload.py +79 -89
- lightning_sdk/constants.py +29 -1
- lightning_sdk/deployment/__init__.py +25 -0
- lightning_sdk/deployment/deployment.py +389 -0
- lightning_sdk/helpers.py +49 -0
- lightning_sdk/job/__init__.py +5 -0
- lightning_sdk/job/base.py +295 -0
- lightning_sdk/job/job.py +266 -0
- lightning_sdk/job/v1.py +241 -0
- lightning_sdk/job/v2.py +193 -0
- lightning_sdk/job/work.py +72 -0
- lightning_sdk/lightning_cloud/__version__.py +1 -1
- lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
- lightning_sdk/lightning_cloud/env.py +1 -0
- lightning_sdk/lightning_cloud/login.py +12 -8
- lightning_sdk/lightning_cloud/openapi/__init__.py +288 -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 +242 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
- lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
- lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
- lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
- lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
- lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
- lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +278 -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_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 +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_deployment_strategy.py} +39 -39
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_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 +163 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +697 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_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/{get_cluster_health_response_health_status.py → v1_multi_machine_job_event_type.py} +9 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
- lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
- lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_secret_type.py} +10 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_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 +1006 -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 +145 -7
- lightning_sdk/machine.py +17 -4
- lightning_sdk/mmt/__init__.py +4 -0
- lightning_sdk/mmt/base.py +288 -0
- lightning_sdk/mmt/mmt.py +282 -0
- lightning_sdk/mmt/v1.py +185 -0
- lightning_sdk/mmt/v2.py +193 -0
- lightning_sdk/models.py +153 -0
- lightning_sdk/organization.py +1 -1
- lightning_sdk/plugin.py +207 -41
- lightning_sdk/services/__init__.py +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 +2 -1
- lightning_sdk/studio.py +90 -17
- lightning_sdk/teamspace.py +189 -11
- lightning_sdk/user.py +1 -1
- lightning_sdk/utils/__init__.py +0 -0
- lightning_sdk/utils/dynamic.py +61 -0
- lightning_sdk/utils/enum.py +116 -0
- lightning_sdk/{utils.py → utils/resolve.py} +41 -4
- lightning_sdk-0.1.46.dist-info/LICENSE +21 -0
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/METADATA +30 -4
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/RECORD +482 -204
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/WHEEL +1 -1
- lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
- lightning_sdk/lightning_cloud/openapi/models/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.46.dist-info}/entry_points.txt +0 -0
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/top_level.txt +0 -0
|
@@ -1,100 +1,142 @@
|
|
|
1
|
-
import json
|
|
2
1
|
import os
|
|
2
|
+
from pathlib import Path
|
|
3
3
|
from time import sleep
|
|
4
4
|
from typing import Any, Dict, Optional
|
|
5
|
-
from uuid import uuid4
|
|
6
5
|
|
|
7
6
|
import requests
|
|
7
|
+
import urllib3
|
|
8
8
|
|
|
9
|
+
from lightning_sdk.api.utils import _FileUploader
|
|
9
10
|
from lightning_sdk.lightning_cloud.login import Auth
|
|
10
|
-
from lightning_sdk.lightning_cloud.openapi import
|
|
11
|
-
CommandArgumentCommandArgumentType,
|
|
12
|
-
ProjectIdServiceexecutionBody,
|
|
13
|
-
V1CommandArgument,
|
|
14
|
-
)
|
|
11
|
+
from lightning_sdk.lightning_cloud.openapi import CommandArgumentCommandArgumentType
|
|
15
12
|
from lightning_sdk.lightning_cloud.rest_client import LightningClient
|
|
16
|
-
from lightning_sdk.services.
|
|
17
|
-
from lightning_sdk.
|
|
18
|
-
from lightning_sdk.teamspace import Teamspace
|
|
19
|
-
from lightning_sdk.utils import _resolve_teamspace
|
|
13
|
+
from lightning_sdk.services.utilities import _get_cluster, _get_project, _get_service_url
|
|
14
|
+
from lightning_sdk.utils.resolve import _resolve_deprecated_cluster
|
|
20
15
|
|
|
21
|
-
|
|
22
|
-
_DOWNLOAD_IDS_KEY = "download_ids"
|
|
23
|
-
_LIGHTNING_SERVICES_PIPELINE_ID = uuid4().hex
|
|
16
|
+
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
24
17
|
|
|
18
|
+
_LIGHTNING_SERVICE_EXECUTION_ID_HEADER = "X-Lightning-Service-Execution-Id"
|
|
19
|
+
_AUTHORIZATION_HEADER = "Authorization"
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
|
|
22
|
+
class Client:
|
|
28
23
|
"""This class is used to communicate with the File Endpoint."""
|
|
29
24
|
|
|
30
25
|
def __init__(
|
|
31
26
|
self,
|
|
32
|
-
|
|
27
|
+
name: str,
|
|
28
|
+
teamspace: Optional[str],
|
|
29
|
+
cloud_account: Optional[str] = None,
|
|
30
|
+
cluster_id: Optional[str] = None, # deprecated in favor of cloud_account
|
|
33
31
|
) -> None:
|
|
34
|
-
"""Constructor of the
|
|
32
|
+
"""Constructor of the Client.
|
|
35
33
|
|
|
36
34
|
Args:
|
|
37
|
-
|
|
35
|
+
name: The name of the Studio File Endpoint Service.
|
|
36
|
+
teamspace: The name of the teamspace you want to attach the upload data and artifacts to be.
|
|
37
|
+
cloud_account: The name of the cloud account on which to upload the data.
|
|
38
38
|
|
|
39
39
|
"""
|
|
40
|
-
|
|
40
|
+
cloud_account = _resolve_deprecated_cluster(cloud_account, cluster_id)
|
|
41
|
+
|
|
42
|
+
self._auth = Auth()
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
self._auth.authenticate()
|
|
46
|
+
except ConnectionError as e:
|
|
47
|
+
raise e
|
|
48
|
+
|
|
49
|
+
self._name = name
|
|
50
|
+
self._teamspace = teamspace
|
|
51
|
+
self._client = LightningClient()
|
|
52
|
+
self._project = _get_project(client=self._client, project_name=teamspace)
|
|
53
|
+
self._cloud_account = _get_cluster(
|
|
54
|
+
client=self._client, project_id=self._project.project_id, cluster_id=cloud_account
|
|
55
|
+
)
|
|
56
|
+
self._file_endpoint = self._client.endpoint_service_get_file_endpoint_by_name(
|
|
57
|
+
project_id=self._project.project_id, name=self._name
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
self.headers = {_AUTHORIZATION_HEADER: f"Bearer {self._auth.api_key}"}
|
|
61
|
+
|
|
62
|
+
self._arguments = []
|
|
63
|
+
for argument in self._file_endpoint.arguments:
|
|
64
|
+
self._arguments.append(Argument(**argument.to_dict()))
|
|
65
|
+
|
|
66
|
+
self.url = _get_service_url(self._file_endpoint.cloudspace_id, self._file_endpoint.id)
|
|
41
67
|
|
|
42
68
|
def run(
|
|
43
|
-
self,
|
|
69
|
+
self,
|
|
70
|
+
**kwargs: Dict[str, str],
|
|
44
71
|
) -> None:
|
|
45
72
|
"""The run method executes the file endpoint.
|
|
46
73
|
|
|
47
74
|
Args:
|
|
48
|
-
|
|
49
|
-
files: The files to be uploaded to the file endpoint
|
|
50
|
-
output_dir: The directory output where the artifacts files will be downloaded.
|
|
75
|
+
kwargs: The keyword arguments associated to the service
|
|
51
76
|
|
|
52
77
|
"""
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
78
|
+
for argument in self._arguments:
|
|
79
|
+
if argument.is_file:
|
|
80
|
+
if argument.name not in kwargs:
|
|
81
|
+
raise ValueError(f"This endpoint expects a file for the argument `{argument.name}`.")
|
|
82
|
+
value = kwargs[argument.name]
|
|
83
|
+
if not os.path.isfile(value):
|
|
84
|
+
raise ValueError(f"This endpoint expects a file for the argument `{argument.name}`.")
|
|
85
|
+
else:
|
|
86
|
+
if argument.name not in kwargs:
|
|
87
|
+
raise ValueError(f"This endpoint expects a value for the argument `{argument.name}`.")
|
|
88
|
+
value = kwargs[argument.name]
|
|
89
|
+
if os.path.isfile(value):
|
|
90
|
+
raise ValueError(f"This endpoint doesn't expect a file for `{argument.name}`.")
|
|
62
91
|
|
|
63
|
-
|
|
92
|
+
argument.value = str(Path(value).resolve())
|
|
64
93
|
|
|
65
|
-
|
|
66
|
-
|
|
94
|
+
missing_names = [v.name for v in self._arguments if v.value is None]
|
|
95
|
+
if missing_names:
|
|
96
|
+
raise ValueError(f"You are missing values for the following arguments: {missing_names}")
|
|
67
97
|
|
|
68
|
-
|
|
98
|
+
# Avoid uploading duplicated files
|
|
99
|
+
files_to_upload = {}
|
|
100
|
+
for argument in self._arguments:
|
|
101
|
+
if not argument.should_upload:
|
|
102
|
+
continue
|
|
103
|
+
files_to_upload[argument.value] = argument
|
|
69
104
|
|
|
70
|
-
if
|
|
71
|
-
|
|
105
|
+
# TODO: Verify if the file exists in Teampace and avoid uploading if already there.
|
|
106
|
+
for argument in files_to_upload.values():
|
|
107
|
+
_FileUploader(
|
|
108
|
+
client=self._client,
|
|
109
|
+
teamspace_id=self._project.project_id,
|
|
110
|
+
cloud_account=self._cloud_account.cluster_id,
|
|
111
|
+
file_path=argument.value,
|
|
112
|
+
progress_bar=True,
|
|
113
|
+
remote_path=_sanitize_uploads_remote_path(argument.value),
|
|
114
|
+
)()
|
|
72
115
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
116
|
+
json = {
|
|
117
|
+
"teamspace_id": self._project.project_id,
|
|
118
|
+
"cluster_id": self._cloud_account.cluster_id,
|
|
119
|
+
"input": {},
|
|
120
|
+
}
|
|
121
|
+
for argument in self._arguments:
|
|
122
|
+
json["input"].update(**argument.to_dict())
|
|
77
123
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
)
|
|
124
|
+
response = requests.post(self.url, json=json, headers=self.headers)
|
|
125
|
+
if response.status_code != 200:
|
|
126
|
+
raise Exception(f"The endpoint isn't reachable. Status code: {response.status_code}")
|
|
82
127
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
with open(files[name], "rb") as f:
|
|
88
|
-
response = requests.post(url, files={upload_id: f})
|
|
128
|
+
self.headers = {
|
|
129
|
+
**self.headers,
|
|
130
|
+
_LIGHTNING_SERVICE_EXECUTION_ID_HEADER: response.headers[_LIGHTNING_SERVICE_EXECUTION_ID_HEADER],
|
|
131
|
+
}
|
|
89
132
|
|
|
90
|
-
|
|
91
|
-
raise Exception(f"Failed to upload the file {name}. Status code: {response.status_code}")
|
|
133
|
+
self._check_progress(response.json())
|
|
92
134
|
|
|
93
135
|
def _check_progress(self, data: Dict[str, str]) -> Dict[str, str]:
|
|
94
136
|
"""Check the current Studio status."""
|
|
95
137
|
while True:
|
|
96
138
|
url = f"{self.url}?run_id={data['run_id']}"
|
|
97
|
-
response = requests.post(url)
|
|
139
|
+
response = requests.post(url, headers=self.headers)
|
|
98
140
|
|
|
99
141
|
if response.status_code != 200:
|
|
100
142
|
raise Exception(f"The file endpoint had an error. Status code: {response.status_code}")
|
|
@@ -112,25 +154,10 @@ class FileEndpoint:
|
|
|
112
154
|
raise RuntimeError("The Studio File Endpoint failed")
|
|
113
155
|
|
|
114
156
|
# Wait until making the next request
|
|
115
|
-
sleep(
|
|
157
|
+
sleep(3)
|
|
116
158
|
|
|
117
159
|
return data
|
|
118
160
|
|
|
119
|
-
def _download_files(self, data: Dict[str, str], output_dir: str) -> None:
|
|
120
|
-
"""Download the artifact files."""
|
|
121
|
-
os.makedirs(output_dir, exist_ok=True)
|
|
122
|
-
|
|
123
|
-
for download_id in data[_DOWNLOAD_IDS_KEY]:
|
|
124
|
-
url = f"{self.url}?download_id={download_id}"
|
|
125
|
-
|
|
126
|
-
with requests.post(url, stream=True) as r:
|
|
127
|
-
r.raise_for_status()
|
|
128
|
-
filename = r.headers["Content-Disposition"].split("filename=")[1]
|
|
129
|
-
filename = os.path.basename(filename)
|
|
130
|
-
with open(os.path.join(output_dir, filename), "wb") as f:
|
|
131
|
-
for chunk in r.iter_content(chunk_size=8192):
|
|
132
|
-
f.write(chunk)
|
|
133
|
-
|
|
134
161
|
|
|
135
162
|
class Argument:
|
|
136
163
|
"""A holder for the service argument."""
|
|
@@ -168,153 +195,29 @@ class Argument:
|
|
|
168
195
|
"""Returns the name."""
|
|
169
196
|
return self._name
|
|
170
197
|
|
|
171
|
-
def
|
|
198
|
+
def to_dict(self) -> Dict[str, str]:
|
|
172
199
|
"""Convert the argument into its OpenAPI dataclass counterpart."""
|
|
173
200
|
if self.is_text:
|
|
174
|
-
return
|
|
175
|
-
|
|
176
|
-
value = self._value.replace("/teamspace/studios/this_studio/", "")
|
|
177
|
-
return V1CommandArgument(name=self._name, type=self._type, value=value)
|
|
178
|
-
|
|
201
|
+
return {self._name: str(self._value)}
|
|
179
202
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
def __init__(
|
|
184
|
-
self,
|
|
185
|
-
id: str, # noqa: A002
|
|
186
|
-
teamspace: Optional[str] = None,
|
|
187
|
-
) -> None:
|
|
188
|
-
"""Constructor of the FileEndpoint.
|
|
189
|
-
|
|
190
|
-
Args:
|
|
191
|
-
id: The id of the Studio File Endpoint Service.
|
|
192
|
-
teamspace: The name of the Teamspace in which the Service
|
|
203
|
+
if self.should_upload:
|
|
204
|
+
return {self._name: f"/teamspace/Uploads/{os.path.basename(self._value)}"}
|
|
193
205
|
|
|
194
|
-
|
|
195
|
-
auth = Auth()
|
|
206
|
+
return {self._name: self._value}
|
|
196
207
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
self.id = id
|
|
203
|
-
|
|
204
|
-
self._client = LightningClient()
|
|
205
|
-
if teamspace is not None:
|
|
206
|
-
teamspace = _resolve_teamspace(teamspace, org=None, user=None)
|
|
207
|
-
|
|
208
|
-
self._teamspace_id = (
|
|
209
|
-
teamspace.id if isinstance(teamspace, Teamspace) else _get_project(client=self._client).project_id
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
self._file_endpoint = self._client.endpoint_service_get_file_endpoint(project_id=self._teamspace_id, id=self.id)
|
|
213
|
-
self._arguments = []
|
|
214
|
-
|
|
215
|
-
for argument in self._file_endpoint.arguments:
|
|
216
|
-
self._arguments.append(Argument(**argument.to_dict()))
|
|
217
|
-
|
|
218
|
-
def run(
|
|
219
|
-
self,
|
|
220
|
-
pipeline_id: Optional[str] = _LIGHTNING_SERVICES_PIPELINE_ID,
|
|
221
|
-
download_artifacts: bool = True,
|
|
222
|
-
**kwargs: Dict[str, str],
|
|
223
|
-
) -> None:
|
|
224
|
-
"""The run method executes the file endpoint.
|
|
225
|
-
|
|
226
|
-
Args:
|
|
227
|
-
pipeline_id: The ID of the current pipeline
|
|
228
|
-
download_artifacts: Whether to download the artifacts associated to the service execution.
|
|
229
|
-
kwargs: The keyword arguments associated to the service
|
|
230
|
-
|
|
231
|
-
"""
|
|
232
|
-
for argument in self._arguments:
|
|
233
|
-
if argument.is_file:
|
|
234
|
-
if argument.name not in kwargs:
|
|
235
|
-
raise ValueError(f"This endpoint expects a file for the argument `{argument.name}`.")
|
|
236
|
-
value = kwargs[argument.name]
|
|
237
|
-
if not os.path.isfile(value):
|
|
238
|
-
raise ValueError(f"This endpoint expects a file for the argument `{argument.name}`.")
|
|
239
|
-
else:
|
|
240
|
-
if argument.name not in kwargs:
|
|
241
|
-
raise ValueError(f"This endpoint expects a value for the argument `{argument.name}`.")
|
|
242
|
-
value = kwargs[argument.name]
|
|
243
|
-
if os.path.isfile(value):
|
|
244
|
-
raise ValueError(f"This endpoint doesn't expect a file for `{argument.name}`.")
|
|
245
|
-
|
|
246
|
-
argument.value = value
|
|
247
|
-
|
|
248
|
-
missing_names = [v.name for v in self._arguments if v.value is None]
|
|
249
|
-
if missing_names:
|
|
250
|
-
raise ValueError(f"You are missing values for the following arguments: {missing_names}")
|
|
251
|
-
|
|
252
|
-
service_execution = self._client.endpoint_service_create_service_execution(
|
|
253
|
-
project_id=self._teamspace_id,
|
|
254
|
-
body=ProjectIdServiceexecutionBody(
|
|
255
|
-
file_endpoint_id=self.id,
|
|
256
|
-
pipeline_id=pipeline_id,
|
|
257
|
-
arguments=[argument.to_openapi() for argument in self._arguments],
|
|
258
|
-
),
|
|
259
|
-
)
|
|
260
|
-
|
|
261
|
-
for argument in self._arguments:
|
|
262
|
-
if argument.is_text:
|
|
263
|
-
continue
|
|
264
|
-
|
|
265
|
-
upload_id = None
|
|
266
|
-
for service_argument in service_execution.arguments:
|
|
267
|
-
if argument.name == service_argument.name:
|
|
268
|
-
upload_id = service_argument.id
|
|
269
|
-
|
|
270
|
-
if upload_id is None:
|
|
271
|
-
raise ValueError("This shouldn't have happened. Please, contact lightning.ai.")
|
|
272
|
-
|
|
273
|
-
# TODO: Move the logic to use pre-defined pre-signed URLs
|
|
274
|
-
_ServiceFileUploader(
|
|
275
|
-
client=self._client,
|
|
276
|
-
teamspace_id=self._teamspace_id,
|
|
277
|
-
service_execution_id=service_execution.id,
|
|
278
|
-
upload_id=upload_id,
|
|
279
|
-
file_path=argument.value,
|
|
280
|
-
progress_bar=True,
|
|
281
|
-
)()
|
|
282
|
-
|
|
283
|
-
self._client.endpoint_service_run_service_execution(
|
|
284
|
-
project_id=self._teamspace_id,
|
|
285
|
-
id=service_execution.id,
|
|
286
|
-
body={},
|
|
287
|
-
)
|
|
288
|
-
|
|
289
|
-
sleep(1)
|
|
290
|
-
|
|
291
|
-
result = {}
|
|
292
|
-
|
|
293
|
-
while True:
|
|
294
|
-
service_execution_status = self._client.endpoint_service_get_service_execution_status(
|
|
295
|
-
project_id=self._teamspace_id,
|
|
296
|
-
id=service_execution.id,
|
|
297
|
-
body={},
|
|
298
|
-
)
|
|
299
|
-
|
|
300
|
-
if "phase" in service_execution_status.data:
|
|
301
|
-
phase = service_execution_status.data["phase"]
|
|
302
|
-
|
|
303
|
-
if "FAILED" in phase:
|
|
304
|
-
print("Failed executing. Please, contact lightning.ai")
|
|
305
|
-
raise ValueError(f"Failed executing {service_execution.id}. Please, contact lightning.ai")
|
|
208
|
+
@property
|
|
209
|
+
def should_upload(self) -> bool:
|
|
210
|
+
"""Whether the file should be uploaded."""
|
|
211
|
+
if not self.is_file:
|
|
212
|
+
return False
|
|
306
213
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
print(service_execution_status)
|
|
311
|
-
break
|
|
214
|
+
value = str(Path(self.value).resolve())
|
|
215
|
+
if value.startswith("/teamspace/"):
|
|
216
|
+
return False
|
|
312
217
|
|
|
313
|
-
|
|
218
|
+
return True
|
|
314
219
|
|
|
315
|
-
sleep(3)
|
|
316
220
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
print(k, v)
|
|
221
|
+
def _sanitize_uploads_remote_path(file_path: str) -> str:
|
|
222
|
+
remote_path = os.path.basename(file_path)
|
|
223
|
+
return f"/Uploads/{remote_path}"
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
from typing import Literal
|
|
2
2
|
|
|
3
|
-
from lightning_sdk.services.file_endpoint import
|
|
3
|
+
from lightning_sdk.services.file_endpoint import Client
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class LLMFinetune(
|
|
6
|
+
class LLMFinetune(Client):
|
|
7
7
|
"""The LLM Finetune is the client to the LLM Finetune Service Studio.
|
|
8
8
|
|
|
9
9
|
Learn more: https://lightning.ai/lightning-ai/studios/llm-finetune-service~01h5rahq6gbhw5m4bzyws0at5h.
|
|
10
10
|
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
def __init__(self) -> None:
|
|
14
|
-
super().__init__(
|
|
13
|
+
def __init__(self, teamspace: str) -> None:
|
|
14
|
+
super().__init__(name="lightning-al/llm-finetunes", teamspace=teamspace)
|
|
15
15
|
|
|
16
16
|
def run(
|
|
17
17
|
self,
|
|
@@ -22,16 +22,14 @@ class LLMFinetune(FileEndpoint):
|
|
|
22
22
|
learning_rate: float = 0.0002,
|
|
23
23
|
micro_batch_size: int = 2,
|
|
24
24
|
global_batch_size: int = 8,
|
|
25
|
-
output_dir: str = "results",
|
|
26
25
|
) -> None:
|
|
27
26
|
"""The run method executes the LLM Finetune Service."""
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
super().run(args, files, output_dir)
|
|
27
|
+
super().run(
|
|
28
|
+
data_path=data_path,
|
|
29
|
+
model=model,
|
|
30
|
+
mode=mode,
|
|
31
|
+
epochs=epochs,
|
|
32
|
+
learning_rate=learning_rate,
|
|
33
|
+
micro_batch_size=micro_batch_size,
|
|
34
|
+
global_batch_size=global_batch_size,
|
|
35
|
+
)
|
|
@@ -1,38 +1,111 @@
|
|
|
1
|
+
import contextlib
|
|
1
2
|
import os
|
|
2
3
|
from typing import Optional
|
|
3
4
|
|
|
5
|
+
import requests
|
|
6
|
+
import urllib3
|
|
7
|
+
|
|
8
|
+
from lightning_sdk.api.utils import _get_cloud_url
|
|
4
9
|
from lightning_sdk.lightning_cloud.openapi import V1Membership
|
|
5
10
|
from lightning_sdk.lightning_cloud.rest_client import LightningClient
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
_CHUNK_SIZE = 1024 * 1024
|
|
8
13
|
|
|
9
14
|
|
|
10
|
-
def _get_project(client: LightningClient,
|
|
15
|
+
def _get_project(client: LightningClient, project_name: Optional[str] = None) -> V1Membership:
|
|
11
16
|
"""Get a project membership for the user from the backend."""
|
|
12
|
-
if project_id is None:
|
|
13
|
-
project_id = LIGHTNING_CLOUD_PROJECT_ID
|
|
14
|
-
|
|
15
|
-
if project_id is not None:
|
|
16
|
-
project = client.projects_service_get_project(project_id)
|
|
17
|
-
if not project:
|
|
18
|
-
raise ValueError(
|
|
19
|
-
"Environment variable `LIGHTNING_CLOUD_PROJECT_ID` is set but could not find an associated project."
|
|
20
|
-
)
|
|
21
|
-
return V1Membership(
|
|
22
|
-
name=project.name,
|
|
23
|
-
display_name=project.display_name,
|
|
24
|
-
description=project.description,
|
|
25
|
-
created_at=project.created_at,
|
|
26
|
-
project_id=project.id,
|
|
27
|
-
owner_id=project.owner_id,
|
|
28
|
-
owner_type=project.owner_type,
|
|
29
|
-
quotas=project.quotas,
|
|
30
|
-
updated_at=project.updated_at,
|
|
31
|
-
)
|
|
32
|
-
|
|
33
17
|
projects = client.projects_service_list_memberships()
|
|
34
18
|
if len(projects.memberships) == 0:
|
|
35
19
|
raise ValueError("No valid projects found. Please reach out to lightning.ai team to create a project")
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
20
|
+
|
|
21
|
+
if project_name is None:
|
|
22
|
+
return projects.memberships[0]
|
|
23
|
+
|
|
24
|
+
matches = []
|
|
25
|
+
for membership in projects.memberships:
|
|
26
|
+
if membership.name == project_name or membership.display_name == project_name:
|
|
27
|
+
matches.append(membership)
|
|
28
|
+
|
|
29
|
+
if len(matches) == 1:
|
|
30
|
+
return matches[0]
|
|
31
|
+
|
|
32
|
+
if len(matches) >= 2:
|
|
33
|
+
raise ValueError(f"We found several teamspaces. Which one do you want to use {[m.name for m in matches]}")
|
|
34
|
+
|
|
35
|
+
raise ValueError("No valid projects found. Please reach out to lightning.ai team to create a project")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _get_cluster(client: LightningClient, project_id: str, cluster_id: Optional[str] = None) -> V1Membership:
|
|
39
|
+
"""Get a project membership for the user from the backend."""
|
|
40
|
+
clusters = client.projects_service_list_project_cluster_bindings(project_id=project_id)
|
|
41
|
+
if cluster_id:
|
|
42
|
+
for cluster in clusters.clusters:
|
|
43
|
+
if cluster.cluster_id == cluster_id:
|
|
44
|
+
return cluster
|
|
45
|
+
raise ValueError(
|
|
46
|
+
f"No valid cluster found with the provided {cluster_id}."
|
|
47
|
+
f"Found {[c.cluster_id for c in clusters.clusters]}."
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
clusters = sorted(clusters.clusters, key=lambda x: x.created_at)
|
|
51
|
+
if len(clusters):
|
|
52
|
+
return clusters[0]
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _get_service_url(cloud_space_id: str, file_endpoint_id: str) -> str:
|
|
57
|
+
url = _get_cloud_url()
|
|
58
|
+
domain = _get_domain(url)
|
|
59
|
+
protocol = _get_protocol(url)
|
|
60
|
+
return f"{protocol}//{file_endpoint_id}-{cloud_space_id}.cloudspaces.{domain}"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _get_domain(url: str) -> str:
|
|
64
|
+
base_url = url.split("//")[1].split("/")[0]
|
|
65
|
+
if "localhost:9800" in base_url:
|
|
66
|
+
return "local.litng.ai:8118"
|
|
67
|
+
if "lightning.ai" in base_url and "localhost:8888" in base_url:
|
|
68
|
+
return "litng.ai"
|
|
69
|
+
return base_url
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _get_protocol(url: str) -> str:
|
|
73
|
+
return url.split("//")[0]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def download_file(filepath: str, cache_dir: str = "/cache") -> str:
|
|
77
|
+
"""Download the file passed to the service execution by the user."""
|
|
78
|
+
service_id = os.getenv("LIGHTNING_SERVICE_EXECUTION_ID")
|
|
79
|
+
|
|
80
|
+
if service_id is None:
|
|
81
|
+
raise RuntimeError("The ServiceId is required. Please reach out to lightning.ai team.")
|
|
82
|
+
|
|
83
|
+
# Note: Make the function idempotent
|
|
84
|
+
prefix = os.path.join(cache_dir, service_id)
|
|
85
|
+
if not filepath.startswith(prefix):
|
|
86
|
+
saved_filepath = filepath
|
|
87
|
+
if saved_filepath.startswith("/"):
|
|
88
|
+
saved_filepath = saved_filepath[1:]
|
|
89
|
+
saved_filepath = os.path.join(prefix, saved_filepath)
|
|
90
|
+
else:
|
|
91
|
+
saved_filepath = filepath
|
|
92
|
+
filepath = filepath.replace(prefix, "")
|
|
93
|
+
|
|
94
|
+
if os.path.exists(saved_filepath):
|
|
95
|
+
return saved_filepath
|
|
96
|
+
|
|
97
|
+
client = LightningClient(retry=False)
|
|
98
|
+
download_artifacts = client.endpoint_service_download_service_execution_artifact(
|
|
99
|
+
project_id=os.getenv("LIGHTNING_CLOUD_PROJECT_ID"), id=service_id, page_token=None, filepath=filepath
|
|
100
|
+
)
|
|
101
|
+
artifact = download_artifacts.artifacts[0]
|
|
102
|
+
|
|
103
|
+
os.makedirs(os.path.dirname(saved_filepath), exist_ok=True)
|
|
104
|
+
|
|
105
|
+
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
106
|
+
with contextlib.suppress(ConnectionError):
|
|
107
|
+
request = requests.get(artifact.url, stream=True, verify=False)
|
|
108
|
+
with open(saved_filepath, "wb") as fp:
|
|
109
|
+
for chunk in request.iter_content(chunk_size=_CHUNK_SIZE):
|
|
110
|
+
fp.write(chunk) # type: ignore
|
|
111
|
+
return saved_filepath
|
lightning_sdk/status.py
CHANGED