wandb 0.17.9__py3-none-win32.whl → 0.18.0__py3-none-win32.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 -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:
|