wandb 0.17.9__py3-none-win_amd64.whl → 0.18.0__py3-none-win_amd64.whl
Sign up to get free protection for your applications and to get access to all the features.
- wandb/__init__.py +1 -6
- wandb/__init__.pyi +27 -17
- wandb/analytics/sentry.py +1 -1
- wandb/bin/wandb-core +0 -0
- wandb/cli/cli.py +15 -10
- wandb/env.py +1 -13
- wandb/integration/tensorboard/log.py +0 -3
- wandb/jupyter.py +18 -3
- wandb/proto/v3/wandb_internal_pb2.py +230 -230
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_internal_pb2.py +230 -230
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/proto/v5/wandb_internal_pb2.py +230 -230
- wandb/proto/v5/wandb_settings_pb2.py +2 -2
- wandb/sdk/artifacts/_validators.py +45 -0
- wandb/sdk/artifacts/artifact.py +100 -45
- wandb/sdk/artifacts/artifact_saver.py +6 -0
- wandb/sdk/interface/interface.py +7 -4
- wandb/sdk/internal/internal_api.py +16 -6
- wandb/sdk/internal/sender.py +1 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +11 -2
- wandb/sdk/launch/inputs/internal.py +2 -2
- wandb/sdk/lib/_settings_toposort_generated.py +1 -3
- wandb/sdk/service/server_sock.py +1 -1
- wandb/sdk/service/service.py +1 -2
- wandb/sdk/wandb_init.py +11 -6
- wandb/sdk/wandb_login.py +1 -0
- wandb/sdk/wandb_require.py +4 -20
- wandb/sdk/wandb_run.py +26 -10
- wandb/sdk/wandb_settings.py +1 -3
- {wandb-0.17.9.dist-info → wandb-0.18.0.dist-info}/METADATA +5 -5
- {wandb-0.17.9.dist-info → wandb-0.18.0.dist-info}/RECORD +35 -34
- {wandb-0.17.9.dist-info → wandb-0.18.0.dist-info}/WHEEL +0 -0
- {wandb-0.17.9.dist-info → wandb-0.18.0.dist-info}/entry_points.txt +0 -0
- {wandb-0.17.9.dist-info → wandb-0.18.0.dist-info}/licenses/LICENSE +0 -0
@@ -15,7 +15,7 @@ _sym_db = _symbol_database.Default()
|
|
15
15
|
from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
|
16
16
|
|
17
17
|
|
18
|
-
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\"\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\"\x8aG\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\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\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\r_require_core\x18$ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_require_legacy_service\x18\xad\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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<\n\x16_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12<\n\x16_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n#_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n#_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12L\n%_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12L\n%_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x1e_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x12_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1f_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1f_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x18_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_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+\n\x05_cuda\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x14_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x17_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17_internal_queue_timeout\x18\x13 \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\x33\n\r_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\x17_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x16_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\n_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0f_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\x05_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x12_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_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/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x18_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x1a_stats_sample_rate_seconds\x18+ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x19_stats_samples_to_average\x18, \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x12_stats_join_assets\x18- \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12G\n!_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x1d_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12G\n\x1b_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_tracelog\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\r_unsaved_keys\x18\x33 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\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\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\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-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\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/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\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*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\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-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\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\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\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\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\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-\n\tsave_code\x18s \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\x30\n\tsweep_url\x18\x83\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\x30\n\tsync_file\x18\x86\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/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_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.StringValue\x12;\n\x11_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueJ\x04\x08\x0c\x10\rJ\x04\x08^\x10_J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01\x62\x06proto3')
|
18
|
+
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\"\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\"\xdd\x46\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\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\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_require_legacy_service\x18\xad\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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<\n\x16_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12<\n\x16_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n#_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n#_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12L\n%_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12L\n%_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x1e_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x12_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1f_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1f_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x18_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_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+\n\x05_cuda\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x14_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x17_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17_internal_queue_timeout\x18\x13 \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\x33\n\r_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\x17_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x16_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\n_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0f_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\x05_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x12_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_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/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x18_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x1a_stats_sample_rate_seconds\x18+ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x19_stats_samples_to_average\x18, \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x12_stats_join_assets\x18- \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12G\n!_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x1d_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12G\n\x1b_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_tracelog\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\r_unsaved_keys\x18\x33 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\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\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\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/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\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*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\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-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\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\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\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\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\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-\n\tsave_code\x18s \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\x30\n\tsweep_url\x18\x83\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\x30\n\tsync_file\x18\x86\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/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_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.StringValue\x12;\n\x11_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueJ\x04\x08\x0c\x10\rJ\x04\x08$\x10%J\x04\x08^\x10_J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01\x62\x06proto3')
|
19
19
|
|
20
20
|
_globals = globals()
|
21
21
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -41,5 +41,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
41
41
|
_globals['_RUNMOMENT']._serialized_start=622
|
42
42
|
_globals['_RUNMOMENT']._serialized_end=677
|
43
43
|
_globals['_SETTINGS']._serialized_start=680
|
44
|
-
_globals['_SETTINGS']._serialized_end=
|
44
|
+
_globals['_SETTINGS']._serialized_end=9733
|
45
45
|
# @@protoc_insertion_point(module_scope)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
"""Internal validation helper functions that are specific to artifacts."""
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
5
|
+
import re
|
6
|
+
from typing import TYPE_CHECKING, Hashable, TypeVar
|
7
|
+
|
8
|
+
if TYPE_CHECKING:
|
9
|
+
from typing import Collection
|
10
|
+
|
11
|
+
|
12
|
+
HashableT = TypeVar("HashableT", bound=Hashable)
|
13
|
+
|
14
|
+
|
15
|
+
def validate_aliases(aliases: Collection[str]) -> list[str]:
|
16
|
+
"""Validate the artifact aliases and return them as a list.
|
17
|
+
|
18
|
+
Raises:
|
19
|
+
ValueError: If any of the aliases contain invalid characters.
|
20
|
+
"""
|
21
|
+
invalid_chars = ("/", ":")
|
22
|
+
if any(char in alias for alias in aliases for char in invalid_chars):
|
23
|
+
raise ValueError(
|
24
|
+
f"Aliases must not contain any of the following characters: {', '.join(invalid_chars)}"
|
25
|
+
)
|
26
|
+
return list(aliases)
|
27
|
+
|
28
|
+
|
29
|
+
_VALID_TAG_PATTERN: re.Pattern[str] = re.compile(r"^[-\w]+( +[-\w]+)*$")
|
30
|
+
|
31
|
+
|
32
|
+
def validate_tags(tags: Collection[str]) -> list[str]:
|
33
|
+
"""Validate the artifact tag names and return them as a deduped list.
|
34
|
+
|
35
|
+
In the case of duplicates, only keep the first tag, and otherwise maintain the order of appearance.
|
36
|
+
|
37
|
+
Raises:
|
38
|
+
ValueError: If any of the tags contain invalid characters.
|
39
|
+
"""
|
40
|
+
if any(not _VALID_TAG_PATTERN.match(tag) for tag in tags):
|
41
|
+
raise ValueError(
|
42
|
+
"Invalid tag(s). "
|
43
|
+
"Tags must only contain alphanumeric characters separated by hyphens, underscores, and/or spaces."
|
44
|
+
)
|
45
|
+
return list(dict.fromkeys(tags))
|
wandb/sdk/artifacts/artifact.py
CHANGED
@@ -50,6 +50,7 @@ from wandb.apis.normalize import normalize_exceptions
|
|
50
50
|
from wandb.apis.public import ArtifactCollection, ArtifactFiles, RetryingClient, Run
|
51
51
|
from wandb.data_types import WBValue
|
52
52
|
from wandb.errors.term import termerror, termlog, termwarn
|
53
|
+
from wandb.sdk.artifacts._validators import validate_aliases, validate_tags
|
53
54
|
from wandb.sdk.artifacts.artifact_download_logger import ArtifactDownloadLogger
|
54
55
|
from wandb.sdk.artifacts.artifact_instance_cache import artifact_instance_cache
|
55
56
|
from wandb.sdk.artifacts.artifact_manifest import ArtifactManifest
|
@@ -183,6 +184,8 @@ class Artifact:
|
|
183
184
|
self._ttl_changed: bool = False
|
184
185
|
self._aliases: List[str] = []
|
185
186
|
self._saved_aliases: List[str] = []
|
187
|
+
self._tags: List[str] = []
|
188
|
+
self._saved_tags: List[str] = []
|
186
189
|
self._distributed_id: Optional[str] = None
|
187
190
|
self._incremental: bool = incremental
|
188
191
|
self._use_as: Optional[str] = use_as
|
@@ -300,6 +303,7 @@ class Artifact:
|
|
300
303
|
and alias["artifactCollection"]["project"]["name"] == project
|
301
304
|
and alias["artifactCollection"]["name"] == name.split(":")[0]
|
302
305
|
]
|
306
|
+
tags = [tag_obj["name"] for tag_obj in attrs.get("tags", [])]
|
303
307
|
version_aliases = [
|
304
308
|
alias for alias in aliases if util.alias_is_version_index(alias)
|
305
309
|
]
|
@@ -330,6 +334,8 @@ class Artifact:
|
|
330
334
|
alias for alias in aliases if not util.alias_is_version_index(alias)
|
331
335
|
]
|
332
336
|
artifact._saved_aliases = copy(artifact._aliases)
|
337
|
+
artifact._tags = tags
|
338
|
+
artifact._saved_tags = copy(artifact._tags)
|
333
339
|
artifact._state = ArtifactState(attrs["state"])
|
334
340
|
if "currentManifest" in attrs:
|
335
341
|
artifact._load_manifest(attrs["currentManifest"]["file"]["directUrl"])
|
@@ -604,12 +610,19 @@ class Artifact:
|
|
604
610
|
def aliases(self, aliases: List[str]) -> None:
|
605
611
|
"""Set the aliases associated with this artifact."""
|
606
612
|
self._ensure_logged("aliases")
|
613
|
+
self._aliases = validate_aliases(aliases)
|
607
614
|
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
self.
|
615
|
+
@property
|
616
|
+
def tags(self) -> List[str]:
|
617
|
+
"""List of one or more tags assigned to this artifact version."""
|
618
|
+
self._ensure_logged("tags")
|
619
|
+
return self._tags
|
620
|
+
|
621
|
+
@tags.setter
|
622
|
+
def tags(self, tags: List[str]) -> None:
|
623
|
+
"""Set the tags associated with this artifact."""
|
624
|
+
self._ensure_logged("tags")
|
625
|
+
self._tags = validate_tags(tags)
|
613
626
|
|
614
627
|
@property
|
615
628
|
def distributed_id(self) -> Optional[str]:
|
@@ -823,49 +836,53 @@ class Artifact:
|
|
823
836
|
return self
|
824
837
|
|
825
838
|
def _populate_after_save(self, artifact_id: str) -> None:
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
839
|
+
fields = InternalApi().server_artifact_introspection()
|
840
|
+
|
841
|
+
supports_ttl = "ttlIsInherited" in fields
|
842
|
+
ttl_duration_seconds = "ttlDurationSeconds" if supports_ttl else ""
|
843
|
+
ttl_is_inherited = "ttlIsInherited" if supports_ttl else ""
|
844
|
+
|
845
|
+
supports_tags = "tags" in fields
|
846
|
+
tags = "tags {name}" if supports_tags else ""
|
847
|
+
|
848
|
+
query_template = f"""
|
849
|
+
query ArtifactByIDShort($id: ID!) {{
|
850
|
+
artifact(id: $id) {{
|
851
|
+
artifactSequence {{
|
852
|
+
project {{
|
831
853
|
entityName
|
832
854
|
name
|
833
|
-
}
|
855
|
+
}}
|
834
856
|
name
|
835
|
-
}
|
857
|
+
}}
|
836
858
|
versionIndex
|
837
|
-
|
838
|
-
|
839
|
-
aliases {
|
840
|
-
artifactCollection {
|
841
|
-
project {
|
859
|
+
{ttl_duration_seconds}
|
860
|
+
{ttl_is_inherited}
|
861
|
+
aliases {{
|
862
|
+
artifactCollection {{
|
863
|
+
project {{
|
842
864
|
entityName
|
843
865
|
name
|
844
|
-
}
|
866
|
+
}}
|
845
867
|
name
|
846
|
-
}
|
868
|
+
}}
|
847
869
|
alias
|
848
|
-
}
|
870
|
+
}}
|
871
|
+
{tags!s}
|
849
872
|
state
|
850
|
-
currentManifest {
|
851
|
-
file {
|
873
|
+
currentManifest {{
|
874
|
+
file {{
|
852
875
|
directUrl
|
853
|
-
}
|
854
|
-
}
|
876
|
+
}}
|
877
|
+
}}
|
855
878
|
commitHash
|
856
879
|
fileCount
|
857
880
|
createdAt
|
858
881
|
updatedAt
|
859
|
-
}
|
860
|
-
}
|
882
|
+
}}
|
883
|
+
}}
|
861
884
|
"""
|
862
885
|
|
863
|
-
fields = InternalApi().server_artifact_introspection()
|
864
|
-
if "ttlIsInherited" not in fields:
|
865
|
-
query_template = query_template.replace("ttlDurationSeconds", "").replace(
|
866
|
-
"ttlIsInherited",
|
867
|
-
"",
|
868
|
-
)
|
869
886
|
query = gql(query_template)
|
870
887
|
|
871
888
|
assert self._client is not None
|
@@ -908,6 +925,7 @@ class Artifact:
|
|
908
925
|
and alias["artifactCollection"]["name"] == self._name.split(":")[0]
|
909
926
|
and not util.alias_is_version_index(alias["alias"])
|
910
927
|
]
|
928
|
+
self._tags = [tag_obj["name"] for tag_obj in attrs.get("tags", [])]
|
911
929
|
self._state = ArtifactState(attrs["state"])
|
912
930
|
self._load_manifest(attrs["currentManifest"]["file"]["directUrl"])
|
913
931
|
self._commit_hash = attrs["commitHash"]
|
@@ -936,7 +954,7 @@ class Artifact:
|
|
936
954
|
if response.get("AddAliasesInputInfoType"): # wandb backend version >= 0.13.0
|
937
955
|
aliases_to_add = set(self._aliases) - set(self._saved_aliases)
|
938
956
|
aliases_to_delete = set(self._saved_aliases) - set(self._aliases)
|
939
|
-
if
|
957
|
+
if aliases_to_add:
|
940
958
|
add_mutation = gql(
|
941
959
|
"""
|
942
960
|
mutation addAliases(
|
@@ -967,7 +985,7 @@ class Artifact:
|
|
967
985
|
],
|
968
986
|
},
|
969
987
|
)
|
970
|
-
if
|
988
|
+
if aliases_to_delete:
|
971
989
|
delete_mutation = gql(
|
972
990
|
"""
|
973
991
|
mutation deleteAliases(
|
@@ -1010,10 +1028,12 @@ class Artifact:
|
|
1010
1028
|
|
1011
1029
|
mutation_template = """
|
1012
1030
|
mutation updateArtifact(
|
1013
|
-
$artifactID: ID
|
1014
|
-
$description: String
|
1015
|
-
$metadata: JSONString
|
1031
|
+
$artifactID: ID!
|
1032
|
+
$description: String
|
1033
|
+
$metadata: JSONString
|
1016
1034
|
_TTL_DURATION_SECONDS_TYPE_
|
1035
|
+
_TAGS_TO_ADD_TYPE_
|
1036
|
+
_TAGS_TO_DELETE_TYPE_
|
1017
1037
|
$aliases: [ArtifactAliasInput!]
|
1018
1038
|
) {
|
1019
1039
|
updateArtifact(
|
@@ -1022,6 +1042,8 @@ class Artifact:
|
|
1022
1042
|
description: $description,
|
1023
1043
|
metadata: $metadata,
|
1024
1044
|
_TTL_DURATION_SECONDS_VALUE_
|
1045
|
+
_TAGS_TO_ADD_VALUE_
|
1046
|
+
_TAGS_TO_DELETE_VALUE_
|
1025
1047
|
aliases: $aliases
|
1026
1048
|
}
|
1027
1049
|
) {
|
@@ -1036,14 +1058,16 @@ class Artifact:
|
|
1036
1058
|
if "ttlIsInherited" in fields:
|
1037
1059
|
mutation_template = (
|
1038
1060
|
mutation_template.replace(
|
1039
|
-
"_TTL_DURATION_SECONDS_TYPE_",
|
1061
|
+
"_TTL_DURATION_SECONDS_TYPE_",
|
1062
|
+
"$ttlDurationSeconds: Int64",
|
1040
1063
|
)
|
1041
1064
|
.replace(
|
1042
1065
|
"_TTL_DURATION_SECONDS_VALUE_",
|
1043
|
-
"ttlDurationSeconds: $ttlDurationSeconds
|
1066
|
+
"ttlDurationSeconds: $ttlDurationSeconds",
|
1044
1067
|
)
|
1045
1068
|
.replace(
|
1046
|
-
"_TTL_DURATION_SECONDS_FIELDS_",
|
1069
|
+
"_TTL_DURATION_SECONDS_FIELDS_",
|
1070
|
+
"ttlDurationSeconds ttlIsInherited",
|
1047
1071
|
)
|
1048
1072
|
)
|
1049
1073
|
else:
|
@@ -1053,12 +1077,34 @@ class Artifact:
|
|
1053
1077
|
)
|
1054
1078
|
mutation_template = (
|
1055
1079
|
mutation_template.replace("_TTL_DURATION_SECONDS_TYPE_", "")
|
1056
|
-
.replace(
|
1057
|
-
"_TTL_DURATION_SECONDS_VALUE_",
|
1058
|
-
"",
|
1059
|
-
)
|
1080
|
+
.replace("_TTL_DURATION_SECONDS_VALUE_", "")
|
1060
1081
|
.replace("_TTL_DURATION_SECONDS_FIELDS_", "")
|
1061
1082
|
)
|
1083
|
+
|
1084
|
+
tags_to_add = validate_tags(set(self._tags) - set(self._saved_tags))
|
1085
|
+
tags_to_delete = validate_tags(set(self._saved_tags) - set(self._tags))
|
1086
|
+
if "tags" in fields:
|
1087
|
+
mutation_template = (
|
1088
|
+
mutation_template.replace(
|
1089
|
+
"_TAGS_TO_ADD_TYPE_", "$tagsToAdd: [TagInput!]"
|
1090
|
+
)
|
1091
|
+
.replace("_TAGS_TO_DELETE_TYPE_", "$tagsToDelete: [TagInput!]")
|
1092
|
+
.replace("_TAGS_TO_ADD_VALUE_", "tagsToAdd: $tagsToAdd")
|
1093
|
+
.replace("_TAGS_TO_DELETE_VALUE_", "tagsToDelete: $tagsToDelete")
|
1094
|
+
)
|
1095
|
+
else:
|
1096
|
+
if tags_to_add or tags_to_delete:
|
1097
|
+
termwarn(
|
1098
|
+
"Server not compatible with Artifact tags. "
|
1099
|
+
"To use Artifact tags, please upgrade the server to v0.85 or higher."
|
1100
|
+
)
|
1101
|
+
mutation_template = (
|
1102
|
+
mutation_template.replace("_TAGS_TO_ADD_TYPE_", "")
|
1103
|
+
.replace("_TAGS_TO_DELETE_TYPE_", "")
|
1104
|
+
.replace("_TAGS_TO_ADD_VALUE_", "")
|
1105
|
+
.replace("_TAGS_TO_DELETE_VALUE_", "")
|
1106
|
+
)
|
1107
|
+
|
1062
1108
|
mutation = gql(mutation_template)
|
1063
1109
|
assert self._client is not None
|
1064
1110
|
|
@@ -1071,6 +1117,8 @@ class Artifact:
|
|
1071
1117
|
"metadata": util.json_dumps_safer(self.metadata),
|
1072
1118
|
"ttlDurationSeconds": ttl_duration_input,
|
1073
1119
|
"aliases": aliases,
|
1120
|
+
"tagsToAdd": [{"tagName": tag_name} for tag_name in tags_to_add],
|
1121
|
+
"tagsToDelete": [{"tagName": tag_name} for tag_name in tags_to_delete],
|
1074
1122
|
},
|
1075
1123
|
)
|
1076
1124
|
attrs = response["updateArtifact"]["artifact"]
|
@@ -2316,6 +2364,7 @@ class Artifact:
|
|
2316
2364
|
}
|
2317
2365
|
alias
|
2318
2366
|
}
|
2367
|
+
_MAYBE_TAGS_
|
2319
2368
|
state
|
2320
2369
|
commitHash
|
2321
2370
|
fileCount
|
@@ -2324,9 +2373,15 @@ class Artifact:
|
|
2324
2373
|
}
|
2325
2374
|
"""
|
2326
2375
|
if "ttlIsInherited" not in fields:
|
2327
|
-
|
2376
|
+
fragment = fragment.replace("ttlDurationSeconds", "").replace(
|
2328
2377
|
"ttlIsInherited", ""
|
2329
2378
|
)
|
2379
|
+
|
2380
|
+
if "tags" in fields:
|
2381
|
+
fragment = fragment.replace("_MAYBE_TAGS_", "tags {name}")
|
2382
|
+
else:
|
2383
|
+
fragment = fragment.replace("_MAYBE_TAGS_", "")
|
2384
|
+
|
2330
2385
|
return fragment
|
2331
2386
|
|
2332
2387
|
def _ttl_duration_seconds_to_gql(self) -> Optional[int]:
|
@@ -71,6 +71,7 @@ class ArtifactSaver:
|
|
71
71
|
ttl_duration_seconds: Optional[int] = None,
|
72
72
|
description: Optional[str] = None,
|
73
73
|
aliases: Optional[Sequence[str]] = None,
|
74
|
+
tags: Optional[Sequence[str]] = None,
|
74
75
|
use_after_commit: bool = False,
|
75
76
|
incremental: bool = False,
|
76
77
|
history_step: Optional[int] = None,
|
@@ -87,6 +88,7 @@ class ArtifactSaver:
|
|
87
88
|
ttl_duration_seconds,
|
88
89
|
description,
|
89
90
|
aliases,
|
91
|
+
tags,
|
90
92
|
use_after_commit,
|
91
93
|
incremental,
|
92
94
|
history_step,
|
@@ -105,6 +107,7 @@ class ArtifactSaver:
|
|
105
107
|
ttl_duration_seconds: Optional[int] = None,
|
106
108
|
description: Optional[str] = None,
|
107
109
|
aliases: Optional[Sequence[str]] = None,
|
110
|
+
tags: Optional[Sequence[str]] = None,
|
108
111
|
use_after_commit: bool = False,
|
109
112
|
incremental: bool = False,
|
110
113
|
history_step: Optional[int] = None,
|
@@ -114,6 +117,8 @@ class ArtifactSaver:
|
|
114
117
|
for alias in aliases or []:
|
115
118
|
alias_specs.append({"artifactCollectionName": name, "alias": alias})
|
116
119
|
|
120
|
+
tag_specs = [{"tagName": tag} for tag in tags or []]
|
121
|
+
|
117
122
|
"""Returns the server artifact."""
|
118
123
|
self._server_artifact, latest = self._api.create_artifact(
|
119
124
|
type,
|
@@ -122,6 +127,7 @@ class ArtifactSaver:
|
|
122
127
|
metadata=metadata,
|
123
128
|
ttl_duration_seconds=ttl_duration_seconds,
|
124
129
|
aliases=alias_specs,
|
130
|
+
tags=tag_specs,
|
125
131
|
description=description,
|
126
132
|
is_user_created=self._is_user_created,
|
127
133
|
distributed_id=distributed_id,
|
wandb/sdk/interface/interface.py
CHANGED
@@ -519,6 +519,7 @@ class InterfaceBase:
|
|
519
519
|
run: "Run",
|
520
520
|
artifact: "Artifact",
|
521
521
|
aliases: Iterable[str],
|
522
|
+
tags: Optional[Iterable[str]] = None,
|
522
523
|
history_step: Optional[int] = None,
|
523
524
|
is_user_created: bool = False,
|
524
525
|
use_after_commit: bool = False,
|
@@ -532,8 +533,9 @@ class InterfaceBase:
|
|
532
533
|
proto_artifact.user_created = is_user_created
|
533
534
|
proto_artifact.use_after_commit = use_after_commit
|
534
535
|
proto_artifact.finalize = finalize
|
535
|
-
|
536
|
-
|
536
|
+
|
537
|
+
proto_artifact.aliases.extend(aliases or [])
|
538
|
+
proto_artifact.tags.extend(tags or [])
|
537
539
|
|
538
540
|
log_artifact = pb.LogArtifactRequest()
|
539
541
|
log_artifact.artifact.CopyFrom(proto_artifact)
|
@@ -577,6 +579,7 @@ class InterfaceBase:
|
|
577
579
|
run: "Run",
|
578
580
|
artifact: "Artifact",
|
579
581
|
aliases: Iterable[str],
|
582
|
+
tags: Optional[Iterable[str]] = None,
|
580
583
|
is_user_created: bool = False,
|
581
584
|
use_after_commit: bool = False,
|
582
585
|
finalize: bool = True,
|
@@ -589,8 +592,8 @@ class InterfaceBase:
|
|
589
592
|
proto_artifact.user_created = is_user_created
|
590
593
|
proto_artifact.use_after_commit = use_after_commit
|
591
594
|
proto_artifact.finalize = finalize
|
592
|
-
|
593
|
-
|
595
|
+
proto_artifact.aliases.extend(aliases or [])
|
596
|
+
proto_artifact.tags.extend(tags or [])
|
594
597
|
self._publish_artifact(proto_artifact)
|
595
598
|
|
596
599
|
@abstractmethod
|
@@ -3551,7 +3551,7 @@ class Api:
|
|
3551
3551
|
_id: Optional[str] = response["createArtifactType"]["artifactType"]["id"]
|
3552
3552
|
return _id
|
3553
3553
|
|
3554
|
-
def server_artifact_introspection(self) -> List:
|
3554
|
+
def server_artifact_introspection(self) -> List[str]:
|
3555
3555
|
query_string = """
|
3556
3556
|
query ProbeServerArtifact {
|
3557
3557
|
ArtifactInfoType: __type(name:"Artifact") {
|
@@ -3572,7 +3572,7 @@ class Api:
|
|
3572
3572
|
|
3573
3573
|
return self.server_artifact_fields_info
|
3574
3574
|
|
3575
|
-
def server_create_artifact_introspection(self) -> List:
|
3575
|
+
def server_create_artifact_introspection(self) -> List[str]:
|
3576
3576
|
query_string = """
|
3577
3577
|
query ProbeServerCreateArtifactInput {
|
3578
3578
|
CreateArtifactInputInfoType: __type(name:"CreateArtifactInput") {
|
@@ -3627,6 +3627,10 @@ class Api:
|
|
3627
3627
|
types += "$ttlDurationSeconds: Int64,"
|
3628
3628
|
values += "ttlDurationSeconds: $ttlDurationSeconds,"
|
3629
3629
|
|
3630
|
+
if "tags" in fields:
|
3631
|
+
types += "$tags: [TagInput!],"
|
3632
|
+
values += "tags: $tags,"
|
3633
|
+
|
3630
3634
|
query_template = """
|
3631
3635
|
mutation CreateArtifact(
|
3632
3636
|
$artifactTypeName: String!,
|
@@ -3686,18 +3690,25 @@ class Api:
|
|
3686
3690
|
metadata: Optional[Dict] = None,
|
3687
3691
|
ttl_duration_seconds: Optional[int] = None,
|
3688
3692
|
aliases: Optional[List[Dict[str, str]]] = None,
|
3693
|
+
tags: Optional[List[Dict[str, str]]] = None,
|
3689
3694
|
distributed_id: Optional[str] = None,
|
3690
3695
|
is_user_created: Optional[bool] = False,
|
3691
3696
|
history_step: Optional[int] = None,
|
3692
3697
|
) -> Tuple[Dict, Dict]:
|
3693
3698
|
fields = self.server_create_artifact_introspection()
|
3694
3699
|
artifact_fields = self.server_artifact_introspection()
|
3695
|
-
if "ttlIsInherited" not in artifact_fields and ttl_duration_seconds:
|
3700
|
+
if ("ttlIsInherited" not in artifact_fields) and ttl_duration_seconds:
|
3696
3701
|
wandb.termwarn(
|
3697
3702
|
"Server not compatible with setting Artifact TTLs, please upgrade the server to use Artifact TTL"
|
3698
3703
|
)
|
3699
3704
|
# ttlDurationSeconds is only usable if ttlIsInherited is also present
|
3700
3705
|
ttl_duration_seconds = None
|
3706
|
+
if ("tags" not in artifact_fields) and tags:
|
3707
|
+
wandb.termwarn(
|
3708
|
+
"Server not compatible with Artifact tags. "
|
3709
|
+
"To use Artifact tags, please upgrade the server to v0.85 or higher."
|
3710
|
+
)
|
3711
|
+
|
3701
3712
|
query_template = self._get_create_artifact_mutation(
|
3702
3713
|
fields, history_step, distributed_id
|
3703
3714
|
)
|
@@ -3706,8 +3717,6 @@ class Api:
|
|
3706
3717
|
project_name = project_name or self.settings("project")
|
3707
3718
|
if not is_user_created:
|
3708
3719
|
run_name = run_name or self.current_run_id
|
3709
|
-
if aliases is None:
|
3710
|
-
aliases = []
|
3711
3720
|
|
3712
3721
|
mutation = gql(query_template)
|
3713
3722
|
response = self.gql(
|
@@ -3722,7 +3731,8 @@ class Api:
|
|
3722
3731
|
"sequenceClientID": sequence_client_id,
|
3723
3732
|
"digest": digest,
|
3724
3733
|
"description": description,
|
3725
|
-
"aliases":
|
3734
|
+
"aliases": list(aliases or []),
|
3735
|
+
"tags": list(tags or []),
|
3726
3736
|
"metadata": json.dumps(util.make_safe_for_json(metadata))
|
3727
3737
|
if metadata
|
3728
3738
|
else None,
|
wandb/sdk/internal/sender.py
CHANGED
@@ -1589,6 +1589,7 @@ class SendManager:
|
|
1589
1589
|
ttl_duration_seconds=artifact.ttl_duration_seconds or None,
|
1590
1590
|
description=artifact.description or None,
|
1591
1591
|
aliases=artifact.aliases,
|
1592
|
+
tags=artifact.tags,
|
1592
1593
|
use_after_commit=artifact.use_after_commit,
|
1593
1594
|
distributed_id=artifact.distributed_id,
|
1594
1595
|
finalize=artifact.finalize,
|
@@ -183,8 +183,17 @@ class GPUAMD:
|
|
183
183
|
|
184
184
|
can_read_rocm_smi = False
|
185
185
|
try:
|
186
|
-
|
187
|
-
|
186
|
+
# try to read stats from rocm-smi and parse them
|
187
|
+
raw_stats = get_rocm_smi_stats()
|
188
|
+
card_keys = [
|
189
|
+
key for key in sorted(raw_stats.keys()) if key.startswith("card")
|
190
|
+
]
|
191
|
+
|
192
|
+
for card_key in card_keys:
|
193
|
+
card_stats = raw_stats[card_key]
|
194
|
+
parse_stats(card_stats)
|
195
|
+
|
196
|
+
can_read_rocm_smi = True
|
188
197
|
except Exception:
|
189
198
|
pass
|
190
199
|
|
@@ -141,9 +141,9 @@ def _replace_refs_and_allofs(schema: dict, defs: Optional[dict]) -> dict:
|
|
141
141
|
ret: Dict[str, Any] = {}
|
142
142
|
if "$ref" in schema and defs:
|
143
143
|
# Reference found, replace it with its definition
|
144
|
-
def_key = schema
|
144
|
+
def_key = schema.pop("$ref").split("#/$defs/")[1]
|
145
145
|
# Also run recursive replacement in case a ref contains more refs
|
146
|
-
|
146
|
+
ret = _replace_refs_and_allofs(defs.pop(def_key), defs)
|
147
147
|
for key, val in schema.items():
|
148
148
|
if isinstance(val, dict):
|
149
149
|
# Step into dicts recursively
|
@@ -1,5 +1,4 @@
|
|
1
|
-
# DO NOT EDIT -- GENERATED BY: `generate-tool.py --generate`
|
2
|
-
|
1
|
+
# DO NOT EDIT -- GENERATED BY: `generate-tool.py --generate`
|
3
2
|
__all__ = ("SETTINGS_TOPOLOGICALLY_SORTED", "_Setting")
|
4
3
|
|
5
4
|
import sys
|
@@ -63,7 +62,6 @@ _Setting = Literal[
|
|
63
62
|
"_proxies",
|
64
63
|
"_python",
|
65
64
|
"_runqueue_item_id",
|
66
|
-
"_require_core",
|
67
65
|
"_require_legacy_service",
|
68
66
|
"_save_requirements",
|
69
67
|
"_service_transport",
|
wandb/sdk/service/server_sock.py
CHANGED
@@ -199,7 +199,6 @@ class SockAcceptThread(threading.Thread):
|
|
199
199
|
self._clients = ClientDict()
|
200
200
|
|
201
201
|
def run(self) -> None:
|
202
|
-
self._sock.listen(5)
|
203
202
|
read_threads = []
|
204
203
|
|
205
204
|
while not self._stopped.is_set():
|
@@ -254,6 +253,7 @@ class SocketServer:
|
|
254
253
|
|
255
254
|
def start(self) -> None:
|
256
255
|
self._bind()
|
256
|
+
self._sock.listen(5)
|
257
257
|
self._thread = SockAcceptThread(sock=self._sock, mux=self._mux)
|
258
258
|
self._thread.start()
|
259
259
|
# Note: Uncomment to figure out what thread is not exiting properly
|
wandb/sdk/service/service.py
CHANGED
@@ -18,7 +18,6 @@ from wandb import _sentry, termlog
|
|
18
18
|
from wandb.env import (
|
19
19
|
core_debug,
|
20
20
|
core_error_reporting_enabled,
|
21
|
-
is_require_core,
|
22
21
|
is_require_legacy_service,
|
23
22
|
)
|
24
23
|
from wandb.errors import Error, WandbCoreNotAvailableError
|
@@ -169,7 +168,7 @@ class _Service:
|
|
169
168
|
|
170
169
|
service_args = []
|
171
170
|
|
172
|
-
if
|
171
|
+
if not is_require_legacy_service():
|
173
172
|
try:
|
174
173
|
core_path = get_core_path()
|
175
174
|
except WandbCoreNotAvailableError as e:
|