lightning-sdk 2025.8.6rc2__py3-none-any.whl → 2025.11.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lightning_sdk/__init__.py +13 -7
- lightning_sdk/__version__.py +3 -0
- lightning_sdk/agents.py +2 -1
- lightning_sdk/ai_hub.py +2 -1
- lightning_sdk/api/__init__.py +2 -0
- lightning_sdk/api/base_studio_api.py +13 -9
- lightning_sdk/api/cloud_account_api.py +31 -10
- lightning_sdk/api/deployment_api.py +27 -1
- lightning_sdk/api/job_api.py +16 -12
- lightning_sdk/api/license_api.py +26 -59
- lightning_sdk/api/llm_api.py +25 -2
- lightning_sdk/api/mmt_api.py +5 -2
- lightning_sdk/api/studio_api.py +252 -55
- lightning_sdk/api/teamspace_api.py +106 -30
- lightning_sdk/api/user_api.py +56 -2
- lightning_sdk/api/utils.py +108 -18
- lightning_sdk/base_studio.py +51 -27
- lightning_sdk/cli/__init__.py +1 -0
- lightning_sdk/cli/base_studio/__init__.py +10 -0
- lightning_sdk/cli/base_studio/list.py +43 -0
- lightning_sdk/cli/config/__init__.py +14 -0
- lightning_sdk/cli/config/get.py +57 -0
- lightning_sdk/cli/config/set.py +92 -0
- lightning_sdk/cli/config/show.py +9 -0
- lightning_sdk/cli/entrypoint.py +71 -71
- lightning_sdk/cli/groups.py +56 -0
- lightning_sdk/cli/job/__init__.py +7 -0
- lightning_sdk/cli/{clusters_menu.py → legacy/clusters_menu.py} +9 -6
- lightning_sdk/cli/{configure.py → legacy/configure.py} +2 -2
- lightning_sdk/cli/{connect.py → legacy/connect.py} +2 -2
- lightning_sdk/cli/{create.py → legacy/create.py} +12 -14
- lightning_sdk/cli/{delete.py → legacy/delete.py} +5 -5
- lightning_sdk/cli/legacy/deploy/__init__.py +0 -0
- lightning_sdk/cli/{deploy → legacy/deploy}/_auth.py +5 -6
- lightning_sdk/cli/{deploy → legacy/deploy}/devbox.py +8 -2
- lightning_sdk/cli/{deploy → legacy/deploy}/serve.py +19 -8
- lightning_sdk/cli/{download.py → legacy/download.py} +14 -15
- lightning_sdk/cli/legacy/entrypoint.py +110 -0
- lightning_sdk/cli/{generate.py → legacy/generate.py} +1 -1
- lightning_sdk/cli/{inspection.py → legacy/inspection.py} +1 -1
- lightning_sdk/cli/{job_and_mmt_action.py → legacy/job_and_mmt_action.py} +6 -6
- lightning_sdk/cli/{jobs_menu.py → legacy/jobs_menu.py} +1 -1
- lightning_sdk/cli/{list.py → legacy/list.py} +12 -13
- lightning_sdk/cli/{mmts_menu.py → legacy/mmts_menu.py} +1 -1
- lightning_sdk/cli/{open.py → legacy/open.py} +4 -4
- lightning_sdk/cli/{start.py → legacy/start.py} +1 -0
- lightning_sdk/cli/{stop.py → legacy/stop.py} +1 -1
- lightning_sdk/cli/{switch.py → legacy/switch.py} +1 -0
- lightning_sdk/cli/{teamspace_menu.py → legacy/teamspace_menu.py} +1 -1
- lightning_sdk/cli/{upload.py → legacy/upload.py} +7 -8
- lightning_sdk/cli/license/__init__.py +14 -0
- lightning_sdk/cli/license/get.py +15 -0
- lightning_sdk/cli/license/list.py +45 -0
- lightning_sdk/cli/license/set.py +13 -0
- lightning_sdk/cli/mmt/__init__.py +7 -0
- lightning_sdk/cli/studio/__init__.py +24 -0
- lightning_sdk/cli/studio/connect.py +139 -0
- lightning_sdk/cli/studio/create.py +96 -0
- lightning_sdk/cli/studio/delete.py +49 -0
- lightning_sdk/cli/studio/list.py +85 -0
- lightning_sdk/cli/studio/ssh.py +64 -0
- lightning_sdk/cli/studio/start.py +115 -0
- lightning_sdk/cli/studio/stop.py +45 -0
- lightning_sdk/cli/studio/switch.py +66 -0
- lightning_sdk/cli/utils/__init__.py +7 -0
- lightning_sdk/cli/utils/cloud_account_map.py +10 -0
- lightning_sdk/cli/utils/get_base_studio.py +24 -0
- lightning_sdk/cli/utils/handle_machine_and_gpus_args.py +69 -0
- lightning_sdk/cli/utils/logging.py +122 -0
- lightning_sdk/cli/utils/owner_selection.py +110 -0
- lightning_sdk/cli/utils/resolve.py +28 -0
- lightning_sdk/cli/utils/richt_print.py +35 -0
- lightning_sdk/cli/utils/save_to_config.py +27 -0
- lightning_sdk/cli/utils/ssh_connection.py +59 -0
- lightning_sdk/cli/utils/studio_selection.py +113 -0
- lightning_sdk/cli/utils/teamspace_selection.py +125 -0
- lightning_sdk/cli/vm/__init__.py +20 -0
- lightning_sdk/cli/vm/create.py +33 -0
- lightning_sdk/cli/vm/delete.py +25 -0
- lightning_sdk/cli/vm/list.py +30 -0
- lightning_sdk/cli/vm/ssh.py +31 -0
- lightning_sdk/cli/vm/start.py +60 -0
- lightning_sdk/cli/vm/stop.py +25 -0
- lightning_sdk/cli/vm/switch.py +38 -0
- lightning_sdk/constants.py +1 -0
- lightning_sdk/deployment/__init__.py +2 -0
- lightning_sdk/deployment/deployment.py +17 -2
- lightning_sdk/helpers.py +56 -37
- lightning_sdk/job/base.py +21 -6
- lightning_sdk/job/job.py +13 -0
- lightning_sdk/job/v1.py +11 -0
- lightning_sdk/job/v2.py +12 -0
- lightning_sdk/lightning_cloud/login.py +320 -10
- lightning_sdk/lightning_cloud/openapi/__init__.py +113 -3
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +3 -0
- lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +713 -75
- lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py +376 -0
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +191 -1
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +420 -0
- lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py +0 -97
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +420 -0
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +101 -0
- lightning_sdk/lightning_cloud/openapi/api/incidents_service_api.py +1058 -0
- lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +121 -0
- lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +1742 -94
- lightning_sdk/lightning_cloud/openapi/api/markets_service_api.py +145 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +4 -4
- lightning_sdk/lightning_cloud/openapi/api/product_license_service_api.py +108 -108
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +105 -0
- lightning_sdk/lightning_cloud/openapi/api/schedules_service_api.py +347 -0
- lightning_sdk/lightning_cloud/openapi/api/sdk_command_history_service_api.py +141 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +761 -1
- lightning_sdk/lightning_cloud/openapi/configuration.py +3 -19
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +110 -3
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_visibility_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_kubernetestemplates_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_metrics_body.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/create.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/create_machine_request_represents_the_request_to_create_a_machine.py +461 -0
- lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +3 -81
- lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/id_render_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_sleepconfig_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_transfer_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/incident_id_messages_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/incidents_id_body.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/job_id_reportroutingtelemetry_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/kubernetestemplates_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/license_key_validate_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/message_id_actions_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/messages_message_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +109 -31
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_storage_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_storagetransfers_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_tab_management_messages.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +41 -15
- lightning_sdk/lightning_cloud/openapi/models/storagetransfers_validate_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/update1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_abort_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_aggregated_pod_metrics.py +799 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ai_pod_v1.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_session_daily_aggregated.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_billing_tier.py +0 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cancel_running_cloud_space_instance_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_transfer_metadata.py +147 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudflare_v1.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_metrics.py +1527 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_container_metrics.py +21 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_create_incident_request.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_license_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_machine_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_model_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_daily_model_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_message_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_kubernetes_template_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_license_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_machine_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_filestore_data_connection.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metric.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_firewall_rule.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_required_balance_status_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_transfer_estimate_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_latest_model_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_machine_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_market_pricing_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_temp_bucket_credentials_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +41 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_group_node_metrics.py +1215 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_group_pod_metrics.py +1241 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_request.py +177 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_user.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_detail.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_event.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_message.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_severity.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_type.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_indexes.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kai_scheduler_queue_metrics.py +627 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_aws_config.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template_property.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_license.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_elastic_cluster_v1.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_aggregated_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metric_timestamps_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_user_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_conversation_message_actions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_group_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_messages_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incidents_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kai_scheduler_queues_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_templates_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_product_licenses_response.py → v1_list_license_response.py} +16 -16
- lightning_sdk/lightning_cloud/openapi/models/v1_list_machines_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_platform_notifications_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_schedule_runs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_storage_transfers_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lustre_data_connection.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine_direct_v1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_market_price.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_message_action.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_model_metrics.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_namespace_metrics.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_namespace_user_metrics.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +361 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_notification_type.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_pause_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_platform_notification.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +335 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_tab.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_product_license_check_response.py → v1_purchase_annual_upsell_request.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_render_kubernetes_template_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_deployment_routing_telemetry_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_required_balance_reason.py +107 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_request.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_resume_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_routing_telemetry.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule_run.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_severity.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_type.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer_status.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_login_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_login_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_owner_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_instance_config_request.py +3 -81
- lightning_sdk/lightning_cloud/openapi/models/v1_update_project_tab_order_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +41 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +444 -600
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_license_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_storage_transfer_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_voltage_park_direct_v1.py +29 -3
- lightning_sdk/lightning_cloud/rest_client.py +48 -45
- lightning_sdk/lightning_cloud/utils/data_connection.py +51 -1
- lightning_sdk/llm/llm.py +175 -56
- lightning_sdk/llm/public_assistants.py +44 -7
- lightning_sdk/machine.py +21 -2
- lightning_sdk/mmt/base.py +7 -0
- lightning_sdk/mmt/mmt.py +11 -3
- lightning_sdk/mmt/v1.py +3 -1
- lightning_sdk/mmt/v2.py +4 -0
- lightning_sdk/owner.py +2 -1
- lightning_sdk/pipeline/steps.py +6 -0
- lightning_sdk/plugin.py +6 -1
- lightning_sdk/studio.py +294 -53
- lightning_sdk/teamspace.py +167 -7
- lightning_sdk/user.py +19 -1
- lightning_sdk/utils/config.py +179 -0
- lightning_sdk/utils/license.py +13 -0
- lightning_sdk/utils/logging.py +79 -0
- lightning_sdk/utils/names.py +1179 -0
- lightning_sdk/utils/progress.py +283 -0
- lightning_sdk/utils/resolve.py +82 -7
- {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/METADATA +2 -1
- {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/RECORD +328 -169
- {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/entry_points.txt +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_product_license.py +0 -435
- lightning_sdk/services/license.py +0 -363
- /lightning_sdk/cli/{deploy → legacy}/__init__.py +0 -0
- /lightning_sdk/cli/{ai_hub.py → legacy/ai_hub.py} +0 -0
- /lightning_sdk/cli/{docker_cli.py → legacy/docker_cli.py} +0 -0
- /lightning_sdk/cli/{exceptions.py → legacy/exceptions.py} +0 -0
- /lightning_sdk/cli/{run.py → legacy/run.py} +0 -0
- /lightning_sdk/cli/{studios_menu.py → legacy/studios_menu.py} +0 -0
- /lightning_sdk/cli/{coloring.py → utils/coloring.py} +0 -0
- {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/LICENSE +0 -0
- {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/WHEEL +0 -0
- {lightning_sdk-2025.8.6rc2.dist-info → lightning_sdk-2025.11.5.dist-info}/top_level.txt +0 -0
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
import importlib
|
|
2
|
-
import json
|
|
3
|
-
import os
|
|
4
|
-
import socket
|
|
5
|
-
import threading
|
|
6
|
-
from contextlib import suppress
|
|
7
|
-
from functools import partial
|
|
8
|
-
from importlib import metadata
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from typing import Optional, Tuple
|
|
11
|
-
|
|
12
|
-
from lightning_sdk.api.license_api import LICENSE_SIGNING_URL, LicenseApi, generate_url_user_settings
|
|
13
|
-
from lightning_sdk.lightning_cloud.login import Auth
|
|
14
|
-
|
|
15
|
-
MESSAGE_NOT_AUTHENTICATED = (
|
|
16
|
-
"┌─────────────────────────────────────────────────────────────────────────┐\n"
|
|
17
|
-
"│ ⚠️ No authenticated user found or license API is not available. │\n"
|
|
18
|
-
"│ │\n"
|
|
19
|
-
"│ Please make sure you are logged in and have a valid license. │\n"
|
|
20
|
-
"│ If you're not logged in, you can use the following command: │\n"
|
|
21
|
-
"│ │\n"
|
|
22
|
-
"│ lightning login │\n"
|
|
23
|
-
"└─────────────────────────────────────────────────────────────────────────┘"
|
|
24
|
-
)
|
|
25
|
-
MESSAGE_AUTH_NO_LICENSE = (
|
|
26
|
-
"┌──────────────────────────────────────────────────────────────────────────────────────────────┐\n"
|
|
27
|
-
"│ ⚠️ No valid license found for the authenticated user for product '{self.product_name}'. │\n"
|
|
28
|
-
"│ │\n"
|
|
29
|
-
"│ Please ensure you have an approved license for this product. │\n"
|
|
30
|
-
"│ If you believe this is an error, please contact support. │\n"
|
|
31
|
-
"│ │\n"
|
|
32
|
-
"│ You can review or update your license settings here: │\n"
|
|
33
|
-
f"│ {LICENSE_SIGNING_URL:<89}│\n"
|
|
34
|
-
"└──────────────────────────────────────────────────────────────────────────────────────────────┘"
|
|
35
|
-
)
|
|
36
|
-
MESSAGE_GUIDE_SIGN_LICENSE = (
|
|
37
|
-
"┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐\n"
|
|
38
|
-
"│ ⚠️ {reason} │\n"
|
|
39
|
-
"│ Details: license key ({license_strats}...{license_ends}) for package {package_name:<56} │\n"
|
|
40
|
-
"│ Please make sure you have signed the license agreement and set the license key. │\n"
|
|
41
|
-
"│ │\n"
|
|
42
|
-
"│ Sign the license agreement here (if you dont have Lightning account, you will asked to create one): │\n"
|
|
43
|
-
"│ {link}\n"
|
|
44
|
-
"│ │\n"
|
|
45
|
-
"│ Once you have the license key, you may need to reinstall this package to activate it. Use the commands: │\n"
|
|
46
|
-
"│ │\n"
|
|
47
|
-
"│ export LIGHTNING_LICENSE_KEY=<your_license_key> │\n"
|
|
48
|
-
"│ pip install --force-reinstall --no-deps {package_name:<63} │\n"
|
|
49
|
-
"│ │\n"
|
|
50
|
-
"│ For more information, please refer to the documentation. │\n"
|
|
51
|
-
"└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘"
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def generate_message_guide_sign_license(package_name: str, reason: str, license_key: str = "") -> str:
|
|
56
|
-
"""Generate a default message for signing the license agreement."""
|
|
57
|
-
if not license_key:
|
|
58
|
-
license_key = "." * 64
|
|
59
|
-
return MESSAGE_GUIDE_SIGN_LICENSE.format(
|
|
60
|
-
link=generate_url_user_settings(name=package_name),
|
|
61
|
-
package_name=package_name,
|
|
62
|
-
reason=reason.ljust(102, " "),
|
|
63
|
-
license_strats=license_key[:5],
|
|
64
|
-
license_ends=license_key[-5:],
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
MESSAGE_WITH_KEY_OFFLINE = (
|
|
69
|
-
"┌──────────────────────────────────────────────────────────────────────────────────────┐\n"
|
|
70
|
-
"│ ⚠️ License key ({license_strats}...{license_ends}) is set, but the system is offline. │\n"
|
|
71
|
-
"│ │\n"
|
|
72
|
-
"│ Please ensure your license key is valid and that the system is connected online. │\n"
|
|
73
|
-
"└──────────────────────────────────────────────────────────────────────────────────────┘"
|
|
74
|
-
)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
def generate_message_with_key_offline(license_key: str) -> str:
|
|
78
|
-
"""Generate a message for when the license key is set but the system is offline."""
|
|
79
|
-
return MESSAGE_WITH_KEY_OFFLINE.format(license_strats=license_key[:5], license_ends=license_key[-5:])
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
class LightningLicense:
|
|
83
|
-
"""This class is used to manage the license for the Lightning SDK."""
|
|
84
|
-
|
|
85
|
-
_is_valid: Optional[bool] = None
|
|
86
|
-
_license_api: Optional[LicenseApi] = None
|
|
87
|
-
_stream_messages: Optional[callable] = None
|
|
88
|
-
|
|
89
|
-
def __init__(
|
|
90
|
-
self,
|
|
91
|
-
name: str,
|
|
92
|
-
license_key: Optional[str] = None,
|
|
93
|
-
product_version: Optional[str] = None,
|
|
94
|
-
product_type: str = "package",
|
|
95
|
-
stream_messages: callable = print,
|
|
96
|
-
) -> None:
|
|
97
|
-
self._product_name = name
|
|
98
|
-
self._license_key = license_key
|
|
99
|
-
self._product_version = product_version
|
|
100
|
-
self.product_type = product_type
|
|
101
|
-
self._is_valid = None
|
|
102
|
-
self._license_api = None
|
|
103
|
-
self._stream_messages = stream_messages
|
|
104
|
-
|
|
105
|
-
@property
|
|
106
|
-
def license_api(self) -> LicenseApi:
|
|
107
|
-
"""Get the LicenseApi instance."""
|
|
108
|
-
if not self._license_api:
|
|
109
|
-
with suppress(ValueError):
|
|
110
|
-
self._license_api = LicenseApi()
|
|
111
|
-
return self._license_api
|
|
112
|
-
|
|
113
|
-
def validate_license(self) -> bool:
|
|
114
|
-
"""Validate the license key."""
|
|
115
|
-
if not self.is_online():
|
|
116
|
-
raise ConnectionError("No internet connection.")
|
|
117
|
-
|
|
118
|
-
return self.license_api.valid_license(
|
|
119
|
-
license_key=self.license_key,
|
|
120
|
-
product_name=self.product_name,
|
|
121
|
-
product_version=self.product_version,
|
|
122
|
-
product_type=self.product_type,
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
def _auth_user_id(self) -> Tuple[Optional[str], Optional[str]]:
|
|
126
|
-
"""Get the authenticated user ID."""
|
|
127
|
-
try:
|
|
128
|
-
auth = Auth()
|
|
129
|
-
except ValueError:
|
|
130
|
-
return None, "No user credentials found. Please run `lightning login` to authenticate."
|
|
131
|
-
return auth.user_id, None
|
|
132
|
-
|
|
133
|
-
def _check_user_license(self, user_id: Optional[str] = None) -> bool:
|
|
134
|
-
"""Check if the authenticated user has a valid license for this product."""
|
|
135
|
-
if not user_id:
|
|
136
|
-
user_id, msg = self._auth_user_id()
|
|
137
|
-
if msg:
|
|
138
|
-
self._stream_messages(msg)
|
|
139
|
-
if not user_id:
|
|
140
|
-
return False
|
|
141
|
-
if not self.license_api:
|
|
142
|
-
self._stream_messages(MESSAGE_NOT_AUTHENTICATED)
|
|
143
|
-
return False
|
|
144
|
-
|
|
145
|
-
licenses = self.license_api.list_user_licenses(user_id=user_id)
|
|
146
|
-
for license_info in licenses:
|
|
147
|
-
if (
|
|
148
|
-
license_info.product_name == self.product_name
|
|
149
|
-
and license_info.product_type == self.product_type
|
|
150
|
-
and license_info.is_valid
|
|
151
|
-
):
|
|
152
|
-
return True
|
|
153
|
-
self._stream_messages(MESSAGE_AUTH_NO_LICENSE)
|
|
154
|
-
return False
|
|
155
|
-
|
|
156
|
-
@staticmethod
|
|
157
|
-
def is_online(timeout: float = 2.0) -> bool:
|
|
158
|
-
"""Check if the system is online by attempting to connect to a public DNS server (Google's).
|
|
159
|
-
|
|
160
|
-
This is a simple way to check for internet connectivity.
|
|
161
|
-
|
|
162
|
-
Args:
|
|
163
|
-
timeout: The timeout for the connection attempt.
|
|
164
|
-
"""
|
|
165
|
-
try:
|
|
166
|
-
socket.create_connection(("8.8.8.8", 53), timeout=timeout)
|
|
167
|
-
return True
|
|
168
|
-
except OSError:
|
|
169
|
-
return False
|
|
170
|
-
|
|
171
|
-
@property
|
|
172
|
-
def is_valid(self) -> Optional[bool]:
|
|
173
|
-
"""Check if the license key is valid.
|
|
174
|
-
|
|
175
|
-
license validation within package:
|
|
176
|
-
- user online with valid key -> everything as now
|
|
177
|
-
- user online with invalid key -> warning using wrong key + instructions
|
|
178
|
-
- user online with no key -> warning for missing license approval + instructions
|
|
179
|
-
- user offline with a key -> small warning that key could not be verified
|
|
180
|
-
- user offline with no key -> warning for missing license approval + instructions
|
|
181
|
-
"""
|
|
182
|
-
if isinstance(self._is_valid, bool):
|
|
183
|
-
# if the license key is already validated, return the cached value
|
|
184
|
-
return self._is_valid
|
|
185
|
-
is_online = self.is_online()
|
|
186
|
-
if is_online:
|
|
187
|
-
if self.license_key:
|
|
188
|
-
self._is_valid = self.validate_license()
|
|
189
|
-
else:
|
|
190
|
-
# try to check if the session has logged-in user and if the user has a valid license
|
|
191
|
-
self._stream_messages(
|
|
192
|
-
"Missing required license key for license validation."
|
|
193
|
-
f" Attempting to check if the authenticated user has a valid license for {self.product_name}."
|
|
194
|
-
)
|
|
195
|
-
user_id, auth_msg = self._auth_user_id()
|
|
196
|
-
if not user_id:
|
|
197
|
-
self._is_valid = False
|
|
198
|
-
if auth_msg:
|
|
199
|
-
self._stream_messages(auth_msg)
|
|
200
|
-
else:
|
|
201
|
-
self._is_valid = self._check_user_license(user_id=user_id)
|
|
202
|
-
elif self.license_key:
|
|
203
|
-
self._stream_messages(generate_message_with_key_offline(self.license_key))
|
|
204
|
-
else:
|
|
205
|
-
self._stream_messages(
|
|
206
|
-
generate_message_guide_sign_license(
|
|
207
|
-
package_name=self.product_name,
|
|
208
|
-
reason="License key is not set neither cannot be found in the package root or user home.",
|
|
209
|
-
)
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
return self._is_valid
|
|
213
|
-
|
|
214
|
-
@property
|
|
215
|
-
def has_required_details(self) -> bool:
|
|
216
|
-
"""Check if the license key and product name are set."""
|
|
217
|
-
return bool(self.license_key and self.product_name and self.product_type)
|
|
218
|
-
|
|
219
|
-
@staticmethod
|
|
220
|
-
def _find_package_license_key(package_name: str) -> Optional[str]:
|
|
221
|
-
"""Find the license key in the package root as .license_key or in user home as .lightning/licenses.json.
|
|
222
|
-
|
|
223
|
-
Args:
|
|
224
|
-
package_name: The name of the package. If not provided, it will be determined from the current module.
|
|
225
|
-
"""
|
|
226
|
-
if not package_name:
|
|
227
|
-
return None
|
|
228
|
-
pkg_spec = importlib.util.find_spec(package_name)
|
|
229
|
-
if pkg_spec is None:
|
|
230
|
-
return None
|
|
231
|
-
pkg_locations = pkg_spec.submodule_search_locations
|
|
232
|
-
if not pkg_locations:
|
|
233
|
-
return None
|
|
234
|
-
try:
|
|
235
|
-
license_file = os.path.join(pkg_locations[0], ".license_key")
|
|
236
|
-
with open(license_file) as fp:
|
|
237
|
-
return fp.read().strip()
|
|
238
|
-
except FileNotFoundError:
|
|
239
|
-
return None
|
|
240
|
-
|
|
241
|
-
@staticmethod
|
|
242
|
-
def _find_user_license_key(package_name: str) -> Optional[str]:
|
|
243
|
-
"""Find the license key in the user home as .lightning/licenses.json.
|
|
244
|
-
|
|
245
|
-
Args:
|
|
246
|
-
package_name: The name of the package.
|
|
247
|
-
"""
|
|
248
|
-
home = str(Path.home())
|
|
249
|
-
package_name = package_name.lower()
|
|
250
|
-
license_file = os.path.join(home, ".lightning", "licenses.json")
|
|
251
|
-
try:
|
|
252
|
-
with open(license_file) as fp:
|
|
253
|
-
licenses = json.load(fp)
|
|
254
|
-
# Check for the license key in the licenses.json file
|
|
255
|
-
for name in (package_name, package_name.replace("-", "_"), package_name.replace("_", "-")):
|
|
256
|
-
if name in licenses:
|
|
257
|
-
return licenses[name]
|
|
258
|
-
return None
|
|
259
|
-
except (FileNotFoundError, json.JSONDecodeError):
|
|
260
|
-
return None
|
|
261
|
-
|
|
262
|
-
@staticmethod
|
|
263
|
-
def _determine_package_version(package_name: str) -> Optional[str]:
|
|
264
|
-
"""Determine the product version based on the instantiation of the class.
|
|
265
|
-
|
|
266
|
-
Args:
|
|
267
|
-
package_name: The name of the package. If not provided, it will be determined from the current module.
|
|
268
|
-
"""
|
|
269
|
-
try:
|
|
270
|
-
return metadata.version(package_name)
|
|
271
|
-
except metadata.PackageNotFoundError:
|
|
272
|
-
return None
|
|
273
|
-
|
|
274
|
-
@property
|
|
275
|
-
def license_key(self) -> Optional[str]:
|
|
276
|
-
"""Get the license key."""
|
|
277
|
-
name = self.product_name.replace("-", "_")
|
|
278
|
-
if not self._license_key:
|
|
279
|
-
# If the license key is not set, first try to find it env variables
|
|
280
|
-
self._license_key = os.environ.get(f"LIGHTNING_{name.upper()}_LICENSE_KEY", None)
|
|
281
|
-
if not self._license_key:
|
|
282
|
-
# If the license key is not set, second try to find it in the package root
|
|
283
|
-
self._license_key = self._find_package_license_key(name)
|
|
284
|
-
# If not found, try to find it in the user home
|
|
285
|
-
if not self._license_key:
|
|
286
|
-
# If not found, try to find it in the user home
|
|
287
|
-
self._license_key = self._find_user_license_key(self.product_name)
|
|
288
|
-
return self._license_key
|
|
289
|
-
|
|
290
|
-
@property
|
|
291
|
-
def product_name(self) -> str:
|
|
292
|
-
"""Get the product name."""
|
|
293
|
-
return self._product_name
|
|
294
|
-
|
|
295
|
-
@property
|
|
296
|
-
def product_version(self) -> Optional[str]:
|
|
297
|
-
"""Get the product version."""
|
|
298
|
-
if not self._product_version and self.product_type == "package":
|
|
299
|
-
self._product_version = self._determine_package_version(self.product_name.replace("-", "_"))
|
|
300
|
-
return self._product_version
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
def check_license(
|
|
304
|
-
name: str,
|
|
305
|
-
license_key: Optional[str] = None,
|
|
306
|
-
product_version: Optional[str] = None,
|
|
307
|
-
product_type: str = "package",
|
|
308
|
-
stream_messages: callable = print,
|
|
309
|
-
) -> None:
|
|
310
|
-
"""Run the license check and stream outputs.
|
|
311
|
-
|
|
312
|
-
Args:
|
|
313
|
-
name: The name of the product.
|
|
314
|
-
license_key: The license key to check.
|
|
315
|
-
product_version: The version of the product.
|
|
316
|
-
product_type: The type of the product.
|
|
317
|
-
stream_messages: A callable to stream messages.
|
|
318
|
-
"""
|
|
319
|
-
lit_license = LightningLicense(
|
|
320
|
-
name=name,
|
|
321
|
-
license_key=license_key,
|
|
322
|
-
product_version=product_version,
|
|
323
|
-
product_type=product_type,
|
|
324
|
-
stream_messages=stream_messages,
|
|
325
|
-
)
|
|
326
|
-
if lit_license.is_valid is False:
|
|
327
|
-
stream_messages(
|
|
328
|
-
generate_message_guide_sign_license(
|
|
329
|
-
package_name=lit_license.product_name,
|
|
330
|
-
reason="License key is not valid or not set.",
|
|
331
|
-
license_key=lit_license.license_key,
|
|
332
|
-
)
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
def check_license_in_background(
|
|
337
|
-
name: str,
|
|
338
|
-
license_key: Optional[str] = None,
|
|
339
|
-
product_version: Optional[str] = None,
|
|
340
|
-
product_type: str = "package",
|
|
341
|
-
stream_messages: callable = print,
|
|
342
|
-
) -> threading.Thread:
|
|
343
|
-
"""Run the license check in a background thread and stream outputs.
|
|
344
|
-
|
|
345
|
-
Args:
|
|
346
|
-
name: The name of the product.
|
|
347
|
-
license_key: The license key to check.
|
|
348
|
-
product_version: The version of the product.
|
|
349
|
-
product_type: The type of the product.
|
|
350
|
-
stream_messages: A callable to stream messages.
|
|
351
|
-
"""
|
|
352
|
-
check_license_local = partial(
|
|
353
|
-
check_license,
|
|
354
|
-
name=name,
|
|
355
|
-
license_key=license_key,
|
|
356
|
-
product_version=product_version,
|
|
357
|
-
product_type=product_type,
|
|
358
|
-
stream_messages=stream_messages,
|
|
359
|
-
)
|
|
360
|
-
|
|
361
|
-
thread = threading.Thread(target=check_license_local, daemon=True)
|
|
362
|
-
thread.start()
|
|
363
|
-
return thread
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|