wandb 0.22.1__py3-none-win_arm64.whl → 0.22.2__py3-none-win_arm64.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.
- wandb/__init__.py +1 -1
- wandb/__init__.pyi +6 -3
- wandb/bin/gpu_stats.exe +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/beta.py +16 -2
- wandb/cli/beta_leet.py +74 -0
- wandb/cli/cli.py +34 -7
- wandb/proto/v3/wandb_api_pb2.py +86 -0
- wandb/proto/v3/wandb_internal_pb2.py +352 -351
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_api_pb2.py +37 -0
- wandb/proto/v4/wandb_internal_pb2.py +352 -351
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/proto/v5/wandb_api_pb2.py +38 -0
- wandb/proto/v5/wandb_internal_pb2.py +352 -351
- wandb/proto/v5/wandb_settings_pb2.py +2 -2
- wandb/proto/v6/wandb_api_pb2.py +48 -0
- wandb/proto/v6/wandb_internal_pb2.py +352 -351
- wandb/proto/v6/wandb_settings_pb2.py +2 -2
- wandb/proto/wandb_api_pb2.py +18 -0
- wandb/proto/wandb_generate_proto.py +1 -0
- wandb/sdk/artifacts/artifact.py +30 -30
- wandb/sdk/artifacts/artifact_manifest_entry.py +6 -12
- wandb/sdk/artifacts/storage_handler.py +18 -12
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +11 -6
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +9 -6
- wandb/sdk/artifacts/storage_handlers/http_handler.py +9 -4
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +10 -6
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +5 -4
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +10 -8
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +6 -4
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +24 -21
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +4 -2
- wandb/sdk/artifacts/storage_policies/_multipart.py +187 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +61 -242
- wandb/sdk/artifacts/storage_policy.py +25 -12
- wandb/sdk/data_types/object_3d.py +67 -2
- wandb/sdk/internal/job_builder.py +27 -10
- wandb/sdk/internal/sender.py +4 -1
- wandb/sdk/launch/create_job.py +2 -1
- wandb/sdk/lib/progress.py +1 -70
- wandb/sdk/wandb_init.py +1 -1
- wandb/sdk/wandb_run.py +5 -2
- wandb/sdk/wandb_settings.py +13 -12
- {wandb-0.22.1.dist-info → wandb-0.22.2.dist-info}/METADATA +1 -1
- {wandb-0.22.1.dist-info → wandb-0.22.2.dist-info}/RECORD +49 -42
- {wandb-0.22.1.dist-info → wandb-0.22.2.dist-info}/WHEEL +0 -0
- {wandb-0.22.1.dist-info → wandb-0.22.2.dist-info}/entry_points.txt +0 -0
- {wandb-0.22.1.dist-info → wandb-0.22.2.dist-info}/licenses/LICENSE +0 -0
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
|
|
25
25
|
from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
|
26
26
|
|
27
27
|
|
28
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x1d\n\x0cListIntValue\x12\r\n\x05value\x18\x01 \x03(\x05\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\x99N\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x14insecure_disable_ssl\x18\xb9\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06x_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\x0corganization\x18\xbc\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bx_files_dir\x18\xb4\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x17x_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1fx_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x14x_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x17x_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12K\n$x_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n$x_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x43\n\x1dx_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1cx_file_stream_max_line_bytes\x18\xb2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12M\n&x_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12M\n&x_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1fx_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13x_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12G\n x_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n x_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x19x_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\tx_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16x_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0ex_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x19x_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bx_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x12x_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12H\n\"x_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x15x_stats_dcgm_exporter\x18\xbb\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12O\n\x1ex_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12H\n\x1cx_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12S\n!x_stats_open_metrics_http_headers\x18\xb8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x16x_stats_gpu_device_ids\x18\xba\x01 \x01(\x0b\x32\x1c.wandb_internal.ListIntValue\x12\x37\n\x11x_stats_cpu_count\x18\xc2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_stats_cpu_logical_count\x18\xc3\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x11x_stats_gpu_count\x18\xc4\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10x_stats_gpu_type\x18\xc5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12?\n\x1ax_stats_track_process_tree\x18\xc6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\x07x_label\x18\xb5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\tx_primary\x18\xb6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15x_update_finish_state\x18\xb7\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17\x61llow_offline_artifacts\x18\xb1\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x10sync_tensorboard\x18\xb3\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x42\n\x1dx_server_side_derived_summary\x18\xbd\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x46\n!x_server_side_expand_glob_metrics\x18\xbe\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_skip_transaction_log\x18\xbf\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12J\n#x_stats_coreweave_metadata_base_url\x18\xc0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n#x_stats_coreweave_metadata_endpoint\x18\xc1\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10x_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15x_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17x_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18x_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0ex_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x18x_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x17x_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x30\n\x0bx_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10x_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12x_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13x_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0ex_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueJ\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\x0c\x10\rJ\x04\x08\x13\x10\x14J\x04\x08$\x10%J\x04\x08+\x10,J\x04\x08,\x10-J\x04\x08-\x10.J\x04\x08\x32\x10\x33J\x04\x08\x33\x10\x34J\x04\x08[\x10\\J\x04\x08^\x10_J\x04\x08\x64\x10\x65J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01J\x06\x08\xad\x01\x10\xae\x01J\x06\x08\xb0\x01\x10\xb1\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x1d\n\x0cListIntValue\x12\r\n\x05value\x18\x01 \x03(\x05\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\xc2M\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x14insecure_disable_ssl\x18\xb9\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06x_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\x0corganization\x18\xbc\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x17x_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1fx_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x14x_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x17x_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12K\n$x_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n$x_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x43\n\x1dx_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1cx_file_stream_max_line_bytes\x18\xb2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12M\n&x_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12M\n&x_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1fx_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13x_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12G\n x_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n x_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x19x_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\tx_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16x_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0ex_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x19x_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bx_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x12x_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12H\n\"x_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x15x_stats_dcgm_exporter\x18\xbb\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12O\n\x1ex_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12H\n\x1cx_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12S\n!x_stats_open_metrics_http_headers\x18\xb8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x16x_stats_gpu_device_ids\x18\xba\x01 \x01(\x0b\x32\x1c.wandb_internal.ListIntValue\x12\x37\n\x11x_stats_cpu_count\x18\xc2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_stats_cpu_logical_count\x18\xc3\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x11x_stats_gpu_count\x18\xc4\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10x_stats_gpu_type\x18\xc5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12?\n\x1ax_stats_track_process_tree\x18\xc6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\x07x_label\x18\xb5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\tx_primary\x18\xb6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15x_update_finish_state\x18\xb7\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17\x61llow_offline_artifacts\x18\xb1\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x10sync_tensorboard\x18\xb3\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x42\n\x1dx_server_side_derived_summary\x18\xbd\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x46\n!x_server_side_expand_glob_metrics\x18\xbe\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_skip_transaction_log\x18\xbf\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12J\n#x_stats_coreweave_metadata_base_url\x18\xc0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n#x_stats_coreweave_metadata_endpoint\x18\xc1\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10x_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15x_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17x_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18x_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0ex_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x18x_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x17x_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x30\n\x0bx_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10x_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12x_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13x_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0ex_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueJ\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\x0c\x10\rJ\x04\x08\x13\x10\x14J\x04\x08$\x10%J\x04\x08+\x10,J\x04\x08,\x10-J\x04\x08-\x10.J\x04\x08\x32\x10\x33J\x04\x08\x33\x10\x34J\x04\x08\x46\x10GJ\x04\x08[\x10\\J\x04\x08^\x10_J\x04\x08\x64\x10\x65J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01J\x06\x08\xad\x01\x10\xae\x01J\x06\x08\xb0\x01\x10\xb1\x01J\x06\x08\xb4\x01\x10\xb5\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
|
29
29
|
|
30
30
|
_globals = globals()
|
31
31
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -54,5 +54,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
54
54
|
_globals['_RUNMOMENT']._serialized_start=653
|
55
55
|
_globals['_RUNMOMENT']._serialized_end=708
|
56
56
|
_globals['_SETTINGS']._serialized_start=711
|
57
|
-
_globals['_SETTINGS']._serialized_end=
|
57
|
+
_globals['_SETTINGS']._serialized_end=10633
|
58
58
|
# @@protoc_insertion_point(module_scope)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import google.protobuf
|
2
|
+
|
3
|
+
protobuf_version = google.protobuf.__version__[0]
|
4
|
+
|
5
|
+
if protobuf_version == "3":
|
6
|
+
from wandb.proto.v3.wandb_api_pb2 import *
|
7
|
+
elif protobuf_version == "4":
|
8
|
+
from wandb.proto.v4.wandb_api_pb2 import *
|
9
|
+
elif protobuf_version == "5":
|
10
|
+
from wandb.proto.v5.wandb_api_pb2 import *
|
11
|
+
elif protobuf_version == "6":
|
12
|
+
from wandb.proto.v6.wandb_api_pb2 import *
|
13
|
+
else:
|
14
|
+
raise ImportError(
|
15
|
+
"Failed to import protobufs for protobuf version"
|
16
|
+
f" {google.protobuf.__version__}. `wandb` only works with major"
|
17
|
+
" versions 3, 4, 5, and 6 of the protobuf package.",
|
18
|
+
)
|
wandb/sdk/artifacts/artifact.py
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
5
|
import atexit
|
6
|
-
import concurrent.futures
|
7
6
|
import contextlib
|
8
7
|
import json
|
9
8
|
import logging
|
@@ -15,10 +14,10 @@ import stat
|
|
15
14
|
import tempfile
|
16
15
|
import time
|
17
16
|
from collections import deque
|
17
|
+
from concurrent.futures import Executor, ThreadPoolExecutor, as_completed
|
18
18
|
from copy import copy
|
19
19
|
from dataclasses import asdict, dataclass, replace
|
20
20
|
from datetime import timedelta
|
21
|
-
from functools import partial
|
22
21
|
from itertools import filterfalse
|
23
22
|
from pathlib import Path, PurePosixPath
|
24
23
|
from typing import (
|
@@ -50,6 +49,7 @@ from wandb.errors.term import termerror, termlog, termwarn
|
|
50
49
|
from wandb.proto import wandb_internal_pb2 as pb
|
51
50
|
from wandb.proto.wandb_deprecated import Deprecated
|
52
51
|
from wandb.sdk import wandb_setup
|
52
|
+
from wandb.sdk.artifacts.storage_policies._multipart import should_multipart_download
|
53
53
|
from wandb.sdk.data_types._dtypes import Type as WBType
|
54
54
|
from wandb.sdk.data_types._dtypes import TypeRegistry
|
55
55
|
from wandb.sdk.internal.internal_api import Api as InternalApi
|
@@ -2046,24 +2046,14 @@ class Artifact:
|
|
2046
2046
|
|
2047
2047
|
download_logger = ArtifactDownloadLogger(nfiles=nfiles)
|
2048
2048
|
|
2049
|
-
def _download_entry(
|
2050
|
-
|
2051
|
-
|
2052
|
-
|
2053
|
-
|
2054
|
-
|
2055
|
-
) -> None:
|
2056
|
-
_thread_local_api_settings.api_key = api_key
|
2057
|
-
_thread_local_api_settings.cookies = cookies
|
2058
|
-
_thread_local_api_settings.headers = headers
|
2059
|
-
|
2049
|
+
def _download_entry(entry: ArtifactManifestEntry, executor: Executor) -> None:
|
2050
|
+
multipart_executor = (
|
2051
|
+
executor
|
2052
|
+
if should_multipart_download(entry.size, override=multipart)
|
2053
|
+
else None
|
2054
|
+
)
|
2060
2055
|
try:
|
2061
|
-
entry.download(
|
2062
|
-
root,
|
2063
|
-
skip_cache=skip_cache,
|
2064
|
-
executor=executor,
|
2065
|
-
multipart=multipart,
|
2066
|
-
)
|
2056
|
+
entry.download(root, skip_cache=skip_cache, executor=multipart_executor)
|
2067
2057
|
except FileNotFoundError as e:
|
2068
2058
|
if allow_missing_references:
|
2069
2059
|
wandb.termwarn(str(e))
|
@@ -2074,15 +2064,23 @@ class Artifact:
|
|
2074
2064
|
return
|
2075
2065
|
download_logger.notify_downloaded()
|
2076
2066
|
|
2077
|
-
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
|
2084
|
-
)
|
2067
|
+
def _init_thread(
|
2068
|
+
api_key: str | None, cookies: dict | None, headers: dict | None
|
2069
|
+
) -> None:
|
2070
|
+
"""Initialize the thread-local API settings in the CURRENT thread."""
|
2071
|
+
_thread_local_api_settings.api_key = api_key
|
2072
|
+
_thread_local_api_settings.cookies = cookies
|
2073
|
+
_thread_local_api_settings.headers = headers
|
2085
2074
|
|
2075
|
+
with ThreadPoolExecutor(
|
2076
|
+
max_workers=64,
|
2077
|
+
initializer=_init_thread,
|
2078
|
+
initargs=(
|
2079
|
+
_thread_local_api_settings.api_key,
|
2080
|
+
_thread_local_api_settings.cookies,
|
2081
|
+
_thread_local_api_settings.headers,
|
2082
|
+
),
|
2083
|
+
) as executor:
|
2086
2084
|
batch_size = env.get_artifact_fetch_file_url_batch_size()
|
2087
2085
|
|
2088
2086
|
active_futures = set()
|
@@ -2103,7 +2101,9 @@ class Artifact:
|
|
2103
2101
|
# continue
|
2104
2102
|
entry._download_url = node.direct_url
|
2105
2103
|
if (not path_prefix) or entry.path.startswith(str(path_prefix)):
|
2106
|
-
active_futures.add(
|
2104
|
+
active_futures.add(
|
2105
|
+
executor.submit(_download_entry, entry, executor=executor)
|
2106
|
+
)
|
2107
2107
|
|
2108
2108
|
# Wait for download threads to catch up.
|
2109
2109
|
#
|
@@ -2118,14 +2118,14 @@ class Artifact:
|
|
2118
2118
|
# Consider this for a future change, or (depending on risk and risk tolerance)
|
2119
2119
|
# managing this logic via asyncio instead, if viable.
|
2120
2120
|
if len(active_futures) > batch_size:
|
2121
|
-
for future in
|
2121
|
+
for future in as_completed(active_futures):
|
2122
2122
|
future.result() # check for errors
|
2123
2123
|
active_futures.remove(future)
|
2124
2124
|
if len(active_futures) <= batch_size:
|
2125
2125
|
break
|
2126
2126
|
|
2127
2127
|
# Check for errors.
|
2128
|
-
for future in
|
2128
|
+
for future in as_completed(active_futures):
|
2129
2129
|
future.result()
|
2130
2130
|
|
2131
2131
|
if log:
|
@@ -182,7 +182,6 @@ class ArtifactManifestEntry:
|
|
182
182
|
root: str | None = None,
|
183
183
|
skip_cache: bool | None = None,
|
184
184
|
executor: concurrent.futures.Executor | None = None,
|
185
|
-
multipart: bool | None = None,
|
186
185
|
) -> FilePathStr:
|
187
186
|
"""Download this artifact entry to the specified root path.
|
188
187
|
|
@@ -193,11 +192,10 @@ class ArtifactManifestEntry:
|
|
193
192
|
Returns:
|
194
193
|
(str): The path of the downloaded artifact entry.
|
195
194
|
"""
|
196
|
-
|
197
|
-
raise NotImplementedError
|
195
|
+
artifact = self.parent_artifact()
|
198
196
|
|
199
|
-
root = root or
|
200
|
-
|
197
|
+
root = root or artifact._default_root()
|
198
|
+
artifact._add_download_root(root)
|
201
199
|
path = str(Path(self.path))
|
202
200
|
dest_path = os.path.join(root, path)
|
203
201
|
|
@@ -225,16 +223,12 @@ class ArtifactManifestEntry:
|
|
225
223
|
return FilePathStr(dest_path)
|
226
224
|
|
227
225
|
if self.ref is not None:
|
228
|
-
cache_path =
|
226
|
+
cache_path = artifact.manifest.storage_policy.load_reference(
|
229
227
|
self, local=True, dest_path=override_cache_path
|
230
228
|
)
|
231
229
|
else:
|
232
|
-
cache_path =
|
233
|
-
self
|
234
|
-
self,
|
235
|
-
dest_path=override_cache_path,
|
236
|
-
executor=executor,
|
237
|
-
multipart=multipart,
|
230
|
+
cache_path = artifact.manifest.storage_policy.load_file(
|
231
|
+
artifact, self, dest_path=override_cache_path, executor=executor
|
238
232
|
)
|
239
233
|
|
240
234
|
# Determine the final path
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
|
-
from
|
5
|
+
from abc import ABC, abstractmethod
|
6
|
+
from typing import TYPE_CHECKING, Final
|
6
7
|
|
7
8
|
from wandb.sdk.lib.paths import FilePathStr, URIStr
|
8
9
|
|
@@ -12,18 +13,11 @@ if TYPE_CHECKING:
|
|
12
13
|
from wandb.sdk.artifacts.artifact import Artifact
|
13
14
|
from wandb.sdk.artifacts.artifact_manifest_entry import ArtifactManifestEntry
|
14
15
|
|
15
|
-
DEFAULT_MAX_OBJECTS = 10**7
|
16
|
+
DEFAULT_MAX_OBJECTS: Final[int] = 10_000_000 # 10**7
|
16
17
|
|
17
18
|
|
18
|
-
class
|
19
|
-
|
20
|
-
"""Checks whether this handler can handle the given url.
|
21
|
-
|
22
|
-
Returns:
|
23
|
-
Whether this handler can handle the given url.
|
24
|
-
"""
|
25
|
-
raise NotImplementedError
|
26
|
-
|
19
|
+
class _BaseStorageHandler(ABC):
|
20
|
+
@abstractmethod
|
27
21
|
def load_path(
|
28
22
|
self,
|
29
23
|
manifest_entry: ArtifactManifestEntry,
|
@@ -40,6 +34,7 @@ class StorageHandler:
|
|
40
34
|
"""
|
41
35
|
raise NotImplementedError
|
42
36
|
|
37
|
+
@abstractmethod
|
43
38
|
def store_path(
|
44
39
|
self,
|
45
40
|
artifact: Artifact,
|
@@ -47,7 +42,7 @@ class StorageHandler:
|
|
47
42
|
name: str | None = None,
|
48
43
|
checksum: bool = True,
|
49
44
|
max_objects: int | None = None,
|
50
|
-
) ->
|
45
|
+
) -> list[ArtifactManifestEntry]:
|
51
46
|
"""Store the file or directory at the given path to the specified artifact.
|
52
47
|
|
53
48
|
Args:
|
@@ -60,3 +55,14 @@ class StorageHandler:
|
|
60
55
|
A list of manifest entries to store within the artifact
|
61
56
|
"""
|
62
57
|
raise NotImplementedError
|
58
|
+
|
59
|
+
|
60
|
+
class StorageHandler(_BaseStorageHandler, ABC): # Handles a single storage protocol
|
61
|
+
@abstractmethod
|
62
|
+
def can_handle(self, parsed_url: ParseResult) -> bool:
|
63
|
+
"""Checks whether this handler can handle the given url.
|
64
|
+
|
65
|
+
Returns:
|
66
|
+
Whether this handler can handle the given url.
|
67
|
+
"""
|
68
|
+
raise NotImplementedError
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
4
4
|
|
5
5
|
from pathlib import PurePosixPath
|
6
6
|
from types import ModuleType
|
7
|
-
from typing import TYPE_CHECKING
|
7
|
+
from typing import TYPE_CHECKING
|
8
8
|
from urllib.parse import ParseResult, parse_qsl, urlparse
|
9
9
|
|
10
10
|
import wandb
|
@@ -20,17 +20,22 @@ if TYPE_CHECKING:
|
|
20
20
|
import azure.storage.blob # type: ignore
|
21
21
|
|
22
22
|
from wandb.sdk.artifacts.artifact import Artifact
|
23
|
+
from wandb.sdk.artifacts.artifact_file_cache import ArtifactFileCache
|
23
24
|
|
24
25
|
|
25
26
|
class AzureHandler(StorageHandler):
|
27
|
+
_scheme: str
|
28
|
+
_cache: ArtifactFileCache
|
29
|
+
|
30
|
+
def __init__(self, scheme: str = "https") -> None:
|
31
|
+
self._scheme = scheme
|
32
|
+
self._cache = get_artifact_file_cache()
|
33
|
+
|
26
34
|
def can_handle(self, parsed_url: ParseResult) -> bool:
|
27
|
-
return parsed_url.scheme ==
|
35
|
+
return parsed_url.scheme == self._scheme and parsed_url.netloc.endswith(
|
28
36
|
".blob.core.windows.net"
|
29
37
|
)
|
30
38
|
|
31
|
-
def __init__(self, scheme: str | None = None) -> None:
|
32
|
-
self._cache = get_artifact_file_cache()
|
33
|
-
|
34
39
|
def load_path(
|
35
40
|
self,
|
36
41
|
manifest_entry: ArtifactManifestEntry,
|
@@ -101,7 +106,7 @@ class AzureHandler(StorageHandler):
|
|
101
106
|
name: StrPath | None = None,
|
102
107
|
checksum: bool = True,
|
103
108
|
max_objects: int | None = None,
|
104
|
-
) ->
|
109
|
+
) -> list[ArtifactManifestEntry]:
|
105
110
|
account_url, container_name, blob_name, query = self._parse_uri(path)
|
106
111
|
path = URIStr(f"{account_url}/{container_name}/{blob_name}")
|
107
112
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
4
4
|
|
5
5
|
import time
|
6
6
|
from pathlib import PurePosixPath
|
7
|
-
from typing import TYPE_CHECKING
|
7
|
+
from typing import TYPE_CHECKING
|
8
8
|
from urllib.parse import ParseResult, urlparse
|
9
9
|
|
10
10
|
from wandb import util
|
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
|
|
19
19
|
import google.cloud.storage as gcs_module # type: ignore
|
20
20
|
|
21
21
|
from wandb.sdk.artifacts.artifact import Artifact
|
22
|
+
from wandb.sdk.artifacts.artifact_file_cache import ArtifactFileCache
|
22
23
|
|
23
24
|
|
24
25
|
class _GCSIsADirectoryError(Exception):
|
@@ -26,10 +27,12 @@ class _GCSIsADirectoryError(Exception):
|
|
26
27
|
|
27
28
|
|
28
29
|
class GCSHandler(StorageHandler):
|
30
|
+
_scheme: str
|
29
31
|
_client: gcs_module.client.Client | None
|
32
|
+
_cache: ArtifactFileCache
|
30
33
|
|
31
|
-
def __init__(self, scheme: str
|
32
|
-
self._scheme = scheme
|
34
|
+
def __init__(self, scheme: str = "gs") -> None:
|
35
|
+
self._scheme = scheme
|
33
36
|
self._client = None
|
34
37
|
self._cache = get_artifact_file_cache()
|
35
38
|
|
@@ -111,7 +114,7 @@ class GCSHandler(StorageHandler):
|
|
111
114
|
name: StrPath | None = None,
|
112
115
|
checksum: bool = True,
|
113
116
|
max_objects: int | None = None,
|
114
|
-
) ->
|
117
|
+
) -> list[ArtifactManifestEntry]:
|
115
118
|
self.init_gcs()
|
116
119
|
assert self._client is not None # mypy: unwraps optionality
|
117
120
|
|
@@ -131,7 +134,7 @@ class GCSHandler(StorageHandler):
|
|
131
134
|
raise ValueError(f"Object does not exist: {path}#{version}")
|
132
135
|
multi = obj is None
|
133
136
|
if multi:
|
134
|
-
start_time = time.
|
137
|
+
start_time = time.monotonic()
|
135
138
|
termlog(
|
136
139
|
f'Generating checksum for up to {max_objects} objects with prefix "{key}"... ',
|
137
140
|
newline=False,
|
@@ -148,7 +151,7 @@ class GCSHandler(StorageHandler):
|
|
148
151
|
if not obj.name.endswith("/")
|
149
152
|
]
|
150
153
|
if start_time is not None:
|
151
|
-
termlog("Done. %.1fs" % (time.
|
154
|
+
termlog("Done. %.1fs" % (time.monotonic() - start_time), prefix=False)
|
152
155
|
if len(entries) > max_objects:
|
153
156
|
raise ValueError(
|
154
157
|
f"Exceeded {max_objects} objects tracked, pass max_objects to add_reference"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
5
|
import os
|
6
|
-
from typing import TYPE_CHECKING
|
6
|
+
from typing import TYPE_CHECKING
|
7
7
|
from urllib.parse import ParseResult
|
8
8
|
|
9
9
|
from wandb.sdk.artifacts.artifact_file_cache import get_artifact_file_cache
|
@@ -18,11 +18,16 @@ if TYPE_CHECKING:
|
|
18
18
|
from requests.structures import CaseInsensitiveDict
|
19
19
|
|
20
20
|
from wandb.sdk.artifacts.artifact import Artifact
|
21
|
+
from wandb.sdk.artifacts.artifact_file_cache import ArtifactFileCache
|
21
22
|
|
22
23
|
|
23
24
|
class HTTPHandler(StorageHandler):
|
24
|
-
|
25
|
-
|
25
|
+
_scheme: str
|
26
|
+
_cache: ArtifactFileCache
|
27
|
+
_session: requests.Session
|
28
|
+
|
29
|
+
def __init__(self, session: requests.Session, scheme: str = "http") -> None:
|
30
|
+
self._scheme = scheme
|
26
31
|
self._cache = get_artifact_file_cache()
|
27
32
|
self._session = session
|
28
33
|
|
@@ -75,7 +80,7 @@ class HTTPHandler(StorageHandler):
|
|
75
80
|
name: StrPath | None = None,
|
76
81
|
checksum: bool = True,
|
77
82
|
max_objects: int | None = None,
|
78
|
-
) ->
|
83
|
+
) -> list[ArtifactManifestEntry]:
|
79
84
|
name = name or os.path.basename(path)
|
80
85
|
if not checksum:
|
81
86
|
return [ArtifactManifestEntry(path=name, ref=path, digest=path)]
|
@@ -6,7 +6,7 @@ import os
|
|
6
6
|
import shutil
|
7
7
|
import time
|
8
8
|
from pathlib import Path
|
9
|
-
from typing import TYPE_CHECKING
|
9
|
+
from typing import TYPE_CHECKING
|
10
10
|
from urllib.parse import ParseResult
|
11
11
|
|
12
12
|
from wandb import util
|
@@ -20,17 +20,21 @@ from wandb.sdk.lib.paths import FilePathStr, StrPath, URIStr
|
|
20
20
|
|
21
21
|
if TYPE_CHECKING:
|
22
22
|
from wandb.sdk.artifacts.artifact import Artifact
|
23
|
+
from wandb.sdk.artifacts.artifact_file_cache import ArtifactFileCache
|
23
24
|
|
24
25
|
|
25
26
|
class LocalFileHandler(StorageHandler):
|
26
27
|
"""Handles file:// references."""
|
27
28
|
|
28
|
-
|
29
|
+
_scheme: str
|
30
|
+
_cache: ArtifactFileCache
|
31
|
+
|
32
|
+
def __init__(self, scheme: str = "file") -> None:
|
29
33
|
"""Track files or directories on a local filesystem.
|
30
34
|
|
31
35
|
Expand directories to create an entry for each file contained.
|
32
36
|
"""
|
33
|
-
self._scheme = scheme
|
37
|
+
self._scheme = scheme
|
34
38
|
self._cache = get_artifact_file_cache()
|
35
39
|
|
36
40
|
def can_handle(self, parsed_url: ParseResult) -> bool:
|
@@ -75,7 +79,7 @@ class LocalFileHandler(StorageHandler):
|
|
75
79
|
name: StrPath | None = None,
|
76
80
|
checksum: bool = True,
|
77
81
|
max_objects: int | None = None,
|
78
|
-
) ->
|
82
|
+
) -> list[ArtifactManifestEntry]:
|
79
83
|
local_path = util.local_file_uri_to_path(path)
|
80
84
|
max_objects = max_objects or DEFAULT_MAX_OBJECTS
|
81
85
|
# We have a single file or directory
|
@@ -95,7 +99,7 @@ class LocalFileHandler(StorageHandler):
|
|
95
99
|
|
96
100
|
if os.path.isdir(local_path):
|
97
101
|
i = 0
|
98
|
-
start_time = time.
|
102
|
+
start_time = time.monotonic()
|
99
103
|
if checksum:
|
100
104
|
termlog(
|
101
105
|
f'Generating checksum for up to {max_objects} files in "{local_path}"... ',
|
@@ -126,7 +130,7 @@ class LocalFileHandler(StorageHandler):
|
|
126
130
|
)
|
127
131
|
entries.append(entry)
|
128
132
|
if checksum:
|
129
|
-
termlog("Done. %.1fs" % (time.
|
133
|
+
termlog("Done. %.1fs" % (time.monotonic() - start_time), prefix=False)
|
130
134
|
elif os.path.isfile(local_path):
|
131
135
|
name = name or os.path.basename(local_path)
|
132
136
|
entry = ArtifactManifestEntry(
|
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
|
-
from typing import TYPE_CHECKING
|
5
|
+
from typing import TYPE_CHECKING
|
6
6
|
from urllib.parse import urlparse
|
7
7
|
|
8
|
-
from wandb.sdk.artifacts.storage_handler import StorageHandler
|
8
|
+
from wandb.sdk.artifacts.storage_handler import StorageHandler, _BaseStorageHandler
|
9
9
|
from wandb.sdk.lib.paths import FilePathStr, URIStr
|
10
10
|
|
11
11
|
if TYPE_CHECKING:
|
@@ -13,8 +13,9 @@ if TYPE_CHECKING:
|
|
13
13
|
from wandb.sdk.artifacts.artifact_manifest_entry import ArtifactManifestEntry
|
14
14
|
|
15
15
|
|
16
|
-
class MultiHandler(
|
16
|
+
class MultiHandler(_BaseStorageHandler):
|
17
17
|
_handlers: list[StorageHandler]
|
18
|
+
_default_handler: StorageHandler | None
|
18
19
|
|
19
20
|
def __init__(
|
20
21
|
self,
|
@@ -49,7 +50,7 @@ class MultiHandler(StorageHandler):
|
|
49
50
|
name: str | None = None,
|
50
51
|
checksum: bool = True,
|
51
52
|
max_objects: int | None = None,
|
52
|
-
) ->
|
53
|
+
) -> list[ArtifactManifestEntry]:
|
53
54
|
handler = self._get_handler(path)
|
54
55
|
return handler.store_path(
|
55
56
|
artifact, path, name=name, checksum=checksum, max_objects=max_objects
|
@@ -6,7 +6,7 @@ import os
|
|
6
6
|
import re
|
7
7
|
import time
|
8
8
|
from pathlib import PurePosixPath
|
9
|
-
from typing import TYPE_CHECKING
|
9
|
+
from typing import TYPE_CHECKING
|
10
10
|
from urllib.parse import parse_qsl, urlparse
|
11
11
|
|
12
12
|
from wandb import util
|
@@ -32,16 +32,18 @@ if TYPE_CHECKING:
|
|
32
32
|
import boto3.session # type: ignore
|
33
33
|
|
34
34
|
from wandb.sdk.artifacts.artifact import Artifact
|
35
|
+
from wandb.sdk.artifacts.artifact_file_cache import ArtifactFileCache
|
35
36
|
|
36
37
|
|
37
38
|
class S3Handler(StorageHandler):
|
38
|
-
_s3: boto3.resources.base.ServiceResource | None
|
39
39
|
_scheme: str
|
40
|
+
_cache: ArtifactFileCache
|
41
|
+
_s3: boto3.resources.base.ServiceResource | None
|
40
42
|
|
41
|
-
def __init__(self, scheme: str
|
42
|
-
self._scheme = scheme
|
43
|
-
self._s3 = None
|
43
|
+
def __init__(self, scheme: str = "s3") -> None:
|
44
|
+
self._scheme = scheme
|
44
45
|
self._cache = get_artifact_file_cache()
|
46
|
+
self._s3 = None
|
45
47
|
|
46
48
|
def can_handle(self, parsed_url: ParseResult) -> bool:
|
47
49
|
return parsed_url.scheme == self._scheme
|
@@ -160,7 +162,7 @@ class S3Handler(StorageHandler):
|
|
160
162
|
name: StrPath | None = None,
|
161
163
|
checksum: bool = True,
|
162
164
|
max_objects: int | None = None,
|
163
|
-
) ->
|
165
|
+
) -> list[ArtifactManifestEntry]:
|
164
166
|
self.init_boto()
|
165
167
|
assert self._s3 is not None # mypy: unwraps optionality
|
166
168
|
|
@@ -206,7 +208,7 @@ class S3Handler(StorageHandler):
|
|
206
208
|
multi = True
|
207
209
|
|
208
210
|
if multi:
|
209
|
-
start_time = time.
|
211
|
+
start_time = time.monotonic()
|
210
212
|
termlog(
|
211
213
|
f'Generating checksum for up to {max_objects} objects in "{bucket}/{key}"... ',
|
212
214
|
newline=False,
|
@@ -227,7 +229,7 @@ class S3Handler(StorageHandler):
|
|
227
229
|
if size(obj) > 0
|
228
230
|
]
|
229
231
|
if start_time is not None:
|
230
|
-
termlog("Done. %.1fs" % (time.
|
232
|
+
termlog("Done. %.1fs" % (time.monotonic() - start_time), prefix=False)
|
231
233
|
if len(entries) > max_objects:
|
232
234
|
raise ValueError(
|
233
235
|
f"Exceeded {max_objects} objects tracked, pass max_objects to add_reference"
|