wandb 0.20.2rc20250616__py3-none-any.whl → 0.21.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wandb/__init__.py +1 -1
- wandb/__init__.pyi +24 -23
- wandb/apis/internal.py +3 -0
- wandb/apis/paginator.py +17 -4
- wandb/apis/public/api.py +83 -2
- wandb/apis/public/artifacts.py +10 -8
- wandb/apis/public/files.py +5 -5
- wandb/apis/public/projects.py +44 -3
- wandb/apis/public/reports.py +64 -8
- wandb/apis/public/runs.py +16 -23
- wandb/automations/__init__.py +10 -10
- wandb/automations/_filters/run_metrics.py +0 -2
- wandb/automations/_utils.py +0 -2
- wandb/automations/actions.py +0 -2
- wandb/automations/automations.py +0 -2
- wandb/automations/events.py +0 -2
- wandb/bin/gpu_stats +0 -0
- wandb/integration/catboost/catboost.py +6 -2
- wandb/integration/kfp/kfp_patch.py +3 -1
- wandb/integration/sb3/sb3.py +3 -3
- wandb/integration/ultralytics/callback.py +6 -2
- wandb/plot/__init__.py +2 -0
- wandb/plot/bar.py +30 -29
- wandb/plot/confusion_matrix.py +75 -71
- wandb/plot/histogram.py +26 -25
- wandb/plot/line.py +33 -32
- wandb/plot/line_series.py +100 -103
- wandb/plot/pr_curve.py +33 -32
- wandb/plot/roc_curve.py +38 -38
- wandb/plot/scatter.py +27 -27
- wandb/proto/v3/wandb_internal_pb2.py +366 -385
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_internal_pb2.py +352 -356
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/proto/v5/wandb_internal_pb2.py +352 -356
- wandb/proto/v5/wandb_settings_pb2.py +2 -2
- wandb/proto/v6/wandb_internal_pb2.py +352 -356
- wandb/proto/v6/wandb_settings_pb2.py +2 -2
- wandb/sdk/artifacts/_generated/__init__.py +12 -1
- wandb/sdk/artifacts/_generated/input_types.py +20 -2
- wandb/sdk/artifacts/_generated/link_artifact.py +21 -0
- wandb/sdk/artifacts/_generated/operations.py +9 -0
- wandb/sdk/artifacts/_validators.py +40 -2
- wandb/sdk/artifacts/artifact.py +163 -21
- wandb/sdk/data_types/base_types/media.py +9 -7
- wandb/sdk/data_types/base_types/wb_value.py +6 -6
- wandb/sdk/data_types/saved_model.py +3 -3
- wandb/sdk/data_types/table.py +41 -41
- wandb/sdk/data_types/trace_tree.py +12 -12
- wandb/sdk/interface/interface.py +8 -19
- wandb/sdk/interface/interface_shared.py +7 -16
- wandb/sdk/internal/datastore.py +18 -18
- wandb/sdk/internal/handler.py +3 -5
- wandb/sdk/internal/internal_api.py +54 -0
- wandb/sdk/internal/sender.py +23 -3
- wandb/sdk/internal/sender_config.py +9 -0
- wandb/sdk/launch/_project_spec.py +3 -3
- wandb/sdk/launch/agent/agent.py +3 -3
- wandb/sdk/launch/agent/job_status_tracker.py +3 -1
- wandb/sdk/launch/utils.py +3 -3
- wandb/sdk/lib/console_capture.py +66 -19
- wandb/sdk/wandb_init.py +1 -2
- wandb/sdk/wandb_require.py +0 -1
- wandb/sdk/wandb_run.py +23 -113
- wandb/sdk/wandb_settings.py +234 -72
- {wandb-0.20.2rc20250616.dist-info → wandb-0.21.0.dist-info}/METADATA +1 -1
- {wandb-0.20.2rc20250616.dist-info → wandb-0.21.0.dist-info}/RECORD +70 -70
- wandb/sdk/wandb_metadata.py +0 -623
- {wandb-0.20.2rc20250616.dist-info → wandb-0.21.0.dist-info}/WHEEL +0 -0
- {wandb-0.20.2rc20250616.dist-info → wandb-0.21.0.dist-info}/entry_points.txt +0 -0
- {wandb-0.20.2rc20250616.dist-info → wandb-0.21.0.dist-info}/licenses/LICENSE +0 -0
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
|
|
25
25
|
from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
|
26
26
|
|
27
27
|
|
28
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x1d\n\x0cListIntValue\x12\r\n\x05value\x18\x01 \x03(\x05\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\xecK\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x14insecure_disable_ssl\x18\xb9\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06x_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\x0corganization\x18\xbc\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bx_files_dir\x18\xb4\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x17x_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1fx_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x14x_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x17x_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12K\n$x_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n$x_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x43\n\x1dx_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1cx_file_stream_max_line_bytes\x18\xb2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12M\n&x_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12M\n&x_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1fx_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13x_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12G\n x_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n x_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x19x_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\tx_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16x_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0ex_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x19x_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bx_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x12x_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12H\n\"x_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x15x_stats_dcgm_exporter\x18\xbb\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12O\n\x1ex_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12H\n\x1cx_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12S\n!x_stats_open_metrics_http_headers\x18\xb8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x16x_stats_gpu_device_ids\x18\xba\x01 \x01(\x0b\x32\x1c.wandb_internal.ListIntValue\x12.\n\x07x_label\x18\xb5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\tx_primary\x18\xb6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15x_update_finish_state\x18\xb7\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17\x61llow_offline_artifacts\x18\xb1\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x10sync_tensorboard\x18\xb3\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x42\n\x1dx_server_side_derived_summary\x18\xbd\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x46\n!x_server_side_expand_glob_metrics\x18\xbe\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_skip_transaction_log\x18\xbf\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12J\n#x_stats_coreweave_metadata_base_url\x18\xc0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n#x_stats_coreweave_metadata_endpoint\x18\xc1\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10x_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15x_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17x_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18x_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0ex_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x18x_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x17x_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x30\n\x0bx_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10x_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12x_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13x_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0ex_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueJ\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\x0c\x10\rJ\x04\x08\x13\x10\x14J\x04\x08$\x10%J\x04\x08+\x10,J\x04\x08,\x10-J\x04\x08-\x10.J\x04\x08\x32\x10\x33J\x04\x08\x33\x10\x34J\x04\x08[\x10\\J\x04\x08^\x10_J\x04\x08\x64\x10\x65J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01J\x06\x08\xad\x01\x10\xae\x01J\x06\x08\xb0\x01\x10\xb1\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x1d\n\x0cListIntValue\x12\r\n\x05value\x18\x01 \x03(\x05\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\x99N\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x14insecure_disable_ssl\x18\xb9\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06x_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\x0corganization\x18\xbc\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bx_files_dir\x18\xb4\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x17x_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1fx_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x14x_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x17x_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12K\n$x_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n$x_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x43\n\x1dx_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1cx_file_stream_max_line_bytes\x18\xb2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12M\n&x_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12M\n&x_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1fx_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13x_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12G\n x_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n x_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x19x_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\tx_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12)\n\x03_os\x18 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16x_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0ex_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x19x_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bx_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x12x_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12H\n\"x_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x15x_stats_dcgm_exporter\x18\xbb\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12O\n\x1ex_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12H\n\x1cx_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12S\n!x_stats_open_metrics_http_headers\x18\xb8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x16x_stats_gpu_device_ids\x18\xba\x01 \x01(\x0b\x32\x1c.wandb_internal.ListIntValue\x12\x37\n\x11x_stats_cpu_count\x18\xc2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_stats_cpu_logical_count\x18\xc3\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x11x_stats_gpu_count\x18\xc4\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10x_stats_gpu_type\x18\xc5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12?\n\x1ax_stats_track_process_tree\x18\xc6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\x07x_label\x18\xb5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\tx_primary\x18\xb6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15x_update_finish_state\x18\xb7\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17\x61llow_offline_artifacts\x18\xb1\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x10sync_tensorboard\x18\xb3\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x42\n\x1dx_server_side_derived_summary\x18\xbd\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x46\n!x_server_side_expand_glob_metrics\x18\xbe\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_skip_transaction_log\x18\xbf\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12J\n#x_stats_coreweave_metadata_base_url\x18\xc0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n#x_stats_coreweave_metadata_endpoint\x18\xc1\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10x_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15x_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17x_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18x_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0ex_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x18x_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x17x_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x30\n\x0bx_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10x_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12x_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13x_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0ex_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueJ\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\x0c\x10\rJ\x04\x08\x13\x10\x14J\x04\x08$\x10%J\x04\x08+\x10,J\x04\x08,\x10-J\x04\x08-\x10.J\x04\x08\x32\x10\x33J\x04\x08\x33\x10\x34J\x04\x08[\x10\\J\x04\x08^\x10_J\x04\x08\x64\x10\x65J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01J\x06\x08\xad\x01\x10\xae\x01J\x06\x08\xb0\x01\x10\xb1\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
|
29
29
|
|
30
30
|
_globals = globals()
|
31
31
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -54,5 +54,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
54
54
|
_globals['_RUNMOMENT']._serialized_start=653
|
55
55
|
_globals['_RUNMOMENT']._serialized_end=708
|
56
56
|
_globals['_SETTINGS']._serialized_start=711
|
57
|
-
_globals['_SETTINGS']._serialized_end=
|
57
|
+
_globals['_SETTINGS']._serialized_end=10720
|
58
58
|
# @@protoc_insertion_point(module_scope)
|
@@ -73,7 +73,13 @@ from .fragments import (
|
|
73
73
|
FilesFragmentEdgesNode,
|
74
74
|
FilesFragmentPageInfo,
|
75
75
|
)
|
76
|
-
from .input_types import
|
76
|
+
from .input_types import (
|
77
|
+
ArtifactAliasInput,
|
78
|
+
ArtifactCollectionAliasInput,
|
79
|
+
LinkArtifactInput,
|
80
|
+
TagInput,
|
81
|
+
)
|
82
|
+
from .link_artifact import LinkArtifact, LinkArtifactLinkArtifact
|
77
83
|
from .move_artifact_collection import (
|
78
84
|
MoveArtifactCollection,
|
79
85
|
MoveArtifactCollectionMoveArtifactSequence,
|
@@ -89,6 +95,7 @@ from .operations import (
|
|
89
95
|
DELETE_ARTIFACT_PORTFOLIO_GQL,
|
90
96
|
DELETE_ARTIFACT_SEQUENCE_GQL,
|
91
97
|
FETCH_LINKED_ARTIFACTS_GQL,
|
98
|
+
LINK_ARTIFACT_GQL,
|
92
99
|
MOVE_ARTIFACT_COLLECTION_GQL,
|
93
100
|
PROJECT_ARTIFACT_COLLECTION_GQL,
|
94
101
|
PROJECT_ARTIFACT_COLLECTIONS_GQL,
|
@@ -166,6 +173,7 @@ __all__ = [
|
|
166
173
|
"DELETE_ARTIFACT_PORTFOLIO_GQL",
|
167
174
|
"DELETE_ARTIFACT_SEQUENCE_GQL",
|
168
175
|
"FETCH_LINKED_ARTIFACTS_GQL",
|
176
|
+
"LINK_ARTIFACT_GQL",
|
169
177
|
"MOVE_ARTIFACT_COLLECTION_GQL",
|
170
178
|
"PROJECT_ARTIFACTS_GQL",
|
171
179
|
"PROJECT_ARTIFACT_COLLECTIONS_GQL",
|
@@ -254,8 +262,11 @@ __all__ = [
|
|
254
262
|
"DeleteAliasesDeleteAliases",
|
255
263
|
"UpdateArtifact",
|
256
264
|
"UpdateArtifactUpdateArtifact",
|
265
|
+
"LinkArtifact",
|
266
|
+
"LinkArtifactLinkArtifact",
|
257
267
|
"ArtifactAliasInput",
|
258
268
|
"ArtifactCollectionAliasInput",
|
269
|
+
"LinkArtifactInput",
|
259
270
|
"TagInput",
|
260
271
|
"ArtifactCollectionsFragment",
|
261
272
|
"ArtifactCollectionsFragmentEdges",
|
@@ -3,11 +3,11 @@
|
|
3
3
|
|
4
4
|
from __future__ import annotations
|
5
5
|
|
6
|
-
from typing import Any, Optional
|
6
|
+
from typing import Any, List, Optional
|
7
7
|
|
8
8
|
from pydantic import Field
|
9
9
|
|
10
|
-
from wandb._pydantic import GQLBase
|
10
|
+
from wandb._pydantic import GQLBase, GQLId
|
11
11
|
|
12
12
|
|
13
13
|
class ArtifactAliasInput(GQLBase):
|
@@ -15,6 +15,21 @@ class ArtifactAliasInput(GQLBase):
|
|
15
15
|
alias: str
|
16
16
|
|
17
17
|
|
18
|
+
class LinkArtifactInput(GQLBase):
|
19
|
+
artifact_id: Optional[GQLId] = Field(alias="artifactID", default=None)
|
20
|
+
artifact_portfolio_id: Optional[GQLId] = Field(
|
21
|
+
alias="artifactPortfolioID", default=None
|
22
|
+
)
|
23
|
+
artifact_portfolio_name: Optional[str] = Field(
|
24
|
+
alias="artifactPortfolioName", default=None
|
25
|
+
)
|
26
|
+
entity_name: Optional[str] = Field(alias="entityName", default=None)
|
27
|
+
project_name: Optional[str] = Field(alias="projectName", default=None)
|
28
|
+
aliases: Optional[List[ArtifactAliasInput]] = None
|
29
|
+
client_id: Optional[GQLId] = Field(alias="clientID", default=None)
|
30
|
+
client_mutation_id: Optional[str] = Field(alias="clientMutationId", default=None)
|
31
|
+
|
32
|
+
|
18
33
|
class ArtifactCollectionAliasInput(GQLBase):
|
19
34
|
alias: str
|
20
35
|
entity_name: str = Field(alias="entityName")
|
@@ -26,3 +41,6 @@ class TagInput(GQLBase):
|
|
26
41
|
tag_category_name: Optional[str] = Field(alias="tagCategoryName", default=None)
|
27
42
|
tag_name: str = Field(alias="tagName")
|
28
43
|
attributes: Optional[Any] = None
|
44
|
+
|
45
|
+
|
46
|
+
LinkArtifactInput.model_rebuild()
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Generated by ariadne-codegen
|
2
|
+
# Source: tools/graphql_codegen/artifacts/
|
3
|
+
|
4
|
+
from __future__ import annotations
|
5
|
+
|
6
|
+
from typing import Optional
|
7
|
+
|
8
|
+
from pydantic import Field
|
9
|
+
|
10
|
+
from wandb._pydantic import GQLBase
|
11
|
+
|
12
|
+
|
13
|
+
class LinkArtifact(GQLBase):
|
14
|
+
link_artifact: Optional[LinkArtifactLinkArtifact] = Field(alias="linkArtifact")
|
15
|
+
|
16
|
+
|
17
|
+
class LinkArtifactLinkArtifact(GQLBase):
|
18
|
+
version_index: Optional[int] = Field(alias="versionIndex")
|
19
|
+
|
20
|
+
|
21
|
+
LinkArtifact.model_rebuild()
|
@@ -11,6 +11,7 @@ __all__ = [
|
|
11
11
|
"DELETE_ARTIFACT_PORTFOLIO_GQL",
|
12
12
|
"DELETE_ARTIFACT_SEQUENCE_GQL",
|
13
13
|
"FETCH_LINKED_ARTIFACTS_GQL",
|
14
|
+
"LINK_ARTIFACT_GQL",
|
14
15
|
"MOVE_ARTIFACT_COLLECTION_GQL",
|
15
16
|
"PROJECT_ARTIFACTS_GQL",
|
16
17
|
"PROJECT_ARTIFACT_COLLECTIONS_GQL",
|
@@ -609,3 +610,11 @@ fragment ArtifactFragment on Artifact {
|
|
609
610
|
updatedAt
|
610
611
|
}
|
611
612
|
"""
|
613
|
+
|
614
|
+
LINK_ARTIFACT_GQL = """
|
615
|
+
mutation LinkArtifact($input: LinkArtifactInput!) {
|
616
|
+
linkArtifact(input: $input) {
|
617
|
+
versionIndex
|
618
|
+
}
|
619
|
+
}
|
620
|
+
"""
|
@@ -4,9 +4,12 @@ from __future__ import annotations
|
|
4
4
|
|
5
5
|
import json
|
6
6
|
import re
|
7
|
-
from dataclasses import dataclass, field
|
7
|
+
from dataclasses import astuple, dataclass, field, replace
|
8
8
|
from functools import wraps
|
9
|
-
from typing import TYPE_CHECKING, Any, Callable, Dict, Literal, TypeVar, cast
|
9
|
+
from typing import TYPE_CHECKING, Any, Callable, Dict, Literal, Optional, TypeVar, cast
|
10
|
+
|
11
|
+
from pydantic.dataclasses import dataclass as pydantic_dataclass
|
12
|
+
from typing_extensions import Self
|
10
13
|
|
11
14
|
from wandb._iterutils import always_list
|
12
15
|
from wandb._pydantic import gql_typename
|
@@ -259,3 +262,38 @@ def ensure_not_finalized(method: DecoratedF) -> DecoratedF:
|
|
259
262
|
|
260
263
|
def is_artifact_registry_project(project: str) -> bool:
|
261
264
|
return project.startswith(REGISTRY_PREFIX)
|
265
|
+
|
266
|
+
|
267
|
+
@pydantic_dataclass
|
268
|
+
class ArtifactPath:
|
269
|
+
#: The collection name.
|
270
|
+
name: str
|
271
|
+
#: The project name, which can also be a registry name.
|
272
|
+
project: Optional[str] = None # noqa: UP045
|
273
|
+
#: Prefix is often an org or entity name.
|
274
|
+
prefix: Optional[str] = None # noqa: UP045
|
275
|
+
|
276
|
+
@classmethod
|
277
|
+
def from_str(cls, path: str) -> Self:
|
278
|
+
"""Instantiate by parsing an artifact path."""
|
279
|
+
if len(parts := path.split("/")) <= 3:
|
280
|
+
return cls(*reversed(parts))
|
281
|
+
raise ValueError(
|
282
|
+
f"Expected a valid path like `name`, `project/name`, or `prefix/project/name`. Got: {path!r}"
|
283
|
+
)
|
284
|
+
|
285
|
+
def to_str(self) -> str:
|
286
|
+
"""Returns the slash-separated string representation of the path."""
|
287
|
+
return "/".join(filter(bool, reversed(astuple(self))))
|
288
|
+
|
289
|
+
def with_defaults(
|
290
|
+
self,
|
291
|
+
prefix: str | None = None,
|
292
|
+
project: str | None = None,
|
293
|
+
) -> Self:
|
294
|
+
"""Returns this path with missing values set to the given defaults."""
|
295
|
+
return replace(
|
296
|
+
self,
|
297
|
+
prefix=self.prefix or prefix,
|
298
|
+
project=self.project or project,
|
299
|
+
)
|
wandb/sdk/artifacts/artifact.py
CHANGED
@@ -34,6 +34,7 @@ from wandb.apis.public import ArtifactCollection, ArtifactFiles, Run
|
|
34
34
|
from wandb.apis.public.utils import gql_compat
|
35
35
|
from wandb.data_types import WBValue
|
36
36
|
from wandb.errors import CommError
|
37
|
+
from wandb.errors.errors import UnsupportedError
|
37
38
|
from wandb.errors.term import termerror, termlog, termwarn
|
38
39
|
from wandb.proto import wandb_internal_pb2 as pb
|
39
40
|
from wandb.proto.wandb_deprecated import Deprecated
|
@@ -61,16 +62,20 @@ from ._generated import (
|
|
61
62
|
ADD_ALIASES_GQL,
|
62
63
|
DELETE_ALIASES_GQL,
|
63
64
|
FETCH_LINKED_ARTIFACTS_GQL,
|
65
|
+
LINK_ARTIFACT_GQL,
|
64
66
|
UPDATE_ARTIFACT_GQL,
|
65
67
|
ArtifactAliasInput,
|
66
68
|
ArtifactCollectionAliasInput,
|
67
69
|
FetchLinkedArtifacts,
|
70
|
+
LinkArtifact,
|
71
|
+
LinkArtifactInput,
|
68
72
|
TagInput,
|
69
73
|
UpdateArtifact,
|
70
74
|
)
|
71
75
|
from ._graphql_fragments import _gql_artifact_fragment, omit_artifact_fields
|
72
76
|
from ._validators import (
|
73
77
|
LINKED_ARTIFACT_COLLECTION_TYPE,
|
78
|
+
ArtifactPath,
|
74
79
|
_LinkArtifactFields,
|
75
80
|
ensure_logged,
|
76
81
|
ensure_not_finalized,
|
@@ -277,6 +282,87 @@ class Artifact:
|
|
277
282
|
name = "{}:v{}".format(src_collection["name"], attrs["versionIndex"])
|
278
283
|
return cls._from_attrs(entity_name, project_name, name, attrs, client)
|
279
284
|
|
285
|
+
@classmethod
|
286
|
+
def _membership_from_name(
|
287
|
+
cls,
|
288
|
+
*,
|
289
|
+
entity: str,
|
290
|
+
project: str,
|
291
|
+
name: str,
|
292
|
+
client: RetryingClient,
|
293
|
+
) -> Artifact:
|
294
|
+
if not InternalApi()._server_supports(
|
295
|
+
pb.ServerFeature.PROJECT_ARTIFACT_COLLECTION_MEMBERSHIP
|
296
|
+
):
|
297
|
+
raise UnsupportedError(
|
298
|
+
"querying for the artifact collection membership is not supported "
|
299
|
+
"by this version of wandb server. Consider updating to the latest version."
|
300
|
+
)
|
301
|
+
|
302
|
+
query = gql(
|
303
|
+
f"""
|
304
|
+
query ArtifactByName($entityName: String!, $projectName: String!, $name: String!) {{
|
305
|
+
project(name: $projectName, entityName: $entityName) {{
|
306
|
+
artifactCollectionMembership(name: $name) {{
|
307
|
+
id
|
308
|
+
artifactCollection {{
|
309
|
+
id
|
310
|
+
name
|
311
|
+
project {{
|
312
|
+
id
|
313
|
+
entityName
|
314
|
+
name
|
315
|
+
}}
|
316
|
+
}}
|
317
|
+
artifact {{
|
318
|
+
...ArtifactFragment
|
319
|
+
}}
|
320
|
+
}}
|
321
|
+
}}
|
322
|
+
}}
|
323
|
+
{_gql_artifact_fragment()}
|
324
|
+
"""
|
325
|
+
)
|
326
|
+
|
327
|
+
query_variable_values: dict[str, Any] = {
|
328
|
+
"entityName": entity,
|
329
|
+
"projectName": project,
|
330
|
+
"name": name,
|
331
|
+
}
|
332
|
+
response = client.execute(
|
333
|
+
query,
|
334
|
+
variable_values=query_variable_values,
|
335
|
+
)
|
336
|
+
if not (project_attrs := response.get("project")):
|
337
|
+
raise ValueError(f"project {project!r} not found under entity {entity!r}")
|
338
|
+
if not (acm_attrs := project_attrs.get("artifactCollectionMembership")):
|
339
|
+
entity_project = f"{entity}/{project}"
|
340
|
+
raise ValueError(
|
341
|
+
f"artifact membership {name!r} not found in {entity_project!r}"
|
342
|
+
)
|
343
|
+
if not (ac_attrs := acm_attrs.get("artifactCollection")):
|
344
|
+
raise ValueError("artifact collection not found")
|
345
|
+
if not (
|
346
|
+
(ac_name := ac_attrs.get("name"))
|
347
|
+
and (ac_project_attrs := ac_attrs.get("project"))
|
348
|
+
):
|
349
|
+
raise ValueError("artifact collection project not found")
|
350
|
+
ac_project = ac_project_attrs.get("name")
|
351
|
+
ac_entity = ac_project_attrs.get("entityName")
|
352
|
+
if is_artifact_registry_project(ac_project) and project == "model-registry":
|
353
|
+
wandb.termwarn(
|
354
|
+
"This model registry has been migrated and will be discontinued. "
|
355
|
+
f"Your request was redirected to the corresponding artifact `{ac_name}` in the new registry. "
|
356
|
+
f"Please update your paths to point to the migrated registry directly, `{ac_project}/{ac_name}`."
|
357
|
+
)
|
358
|
+
entity = ac_entity
|
359
|
+
project = ac_project
|
360
|
+
if not (attrs := acm_attrs.get("artifact")):
|
361
|
+
entity_project = f"{entity}/{project}"
|
362
|
+
raise ValueError(f"artifact {name!r} not found in {entity_project!r}")
|
363
|
+
|
364
|
+
return cls._from_attrs(entity, project, name, attrs, client)
|
365
|
+
|
280
366
|
@classmethod
|
281
367
|
def _from_name(
|
282
368
|
cls,
|
@@ -287,14 +373,31 @@ class Artifact:
|
|
287
373
|
client: RetryingClient,
|
288
374
|
enable_tracking: bool = False,
|
289
375
|
) -> Artifact:
|
376
|
+
if InternalApi()._server_supports(
|
377
|
+
pb.ServerFeature.PROJECT_ARTIFACT_COLLECTION_MEMBERSHIP
|
378
|
+
):
|
379
|
+
return cls._membership_from_name(
|
380
|
+
entity=entity,
|
381
|
+
project=project,
|
382
|
+
name=name,
|
383
|
+
client=client,
|
384
|
+
)
|
385
|
+
|
386
|
+
query_variable_values: dict[str, Any] = {
|
387
|
+
"entityName": entity,
|
388
|
+
"projectName": project,
|
389
|
+
"name": name,
|
390
|
+
}
|
391
|
+
query_vars = ["$entityName: String!", "$projectName: String!", "$name: String!"]
|
392
|
+
query_args = ["name: $name"]
|
393
|
+
|
290
394
|
server_supports_enabling_artifact_usage_tracking = (
|
291
395
|
InternalApi().server_project_type_introspection()
|
292
396
|
)
|
293
|
-
query_vars = ["$entityName: String!", "$projectName: String!", "$name: String!"]
|
294
|
-
query_args = ["name: $name"]
|
295
397
|
if server_supports_enabling_artifact_usage_tracking:
|
296
398
|
query_vars.append("$enableTracking: Boolean")
|
297
399
|
query_args.append("enableTracking: $enableTracking")
|
400
|
+
query_variable_values["enableTracking"] = enable_tracking
|
298
401
|
|
299
402
|
vars_str = ", ".join(query_vars)
|
300
403
|
args_str = ", ".join(query_args)
|
@@ -311,14 +414,6 @@ class Artifact:
|
|
311
414
|
{_gql_artifact_fragment()}
|
312
415
|
"""
|
313
416
|
)
|
314
|
-
query_variable_values: dict[str, Any] = {
|
315
|
-
"entityName": entity,
|
316
|
-
"projectName": project,
|
317
|
-
"name": name,
|
318
|
-
}
|
319
|
-
if server_supports_enabling_artifact_usage_tracking:
|
320
|
-
query_variable_values["enableTracking"] = enable_tracking
|
321
|
-
|
322
417
|
response = client.execute(
|
323
418
|
query,
|
324
419
|
variable_values=query_variable_values,
|
@@ -329,6 +424,7 @@ class Artifact:
|
|
329
424
|
attrs = project_attrs.get("artifact")
|
330
425
|
if not attrs:
|
331
426
|
raise ValueError(f"artifact '{name}' not found in '{entity}/{project}'")
|
427
|
+
|
332
428
|
return cls._from_attrs(entity, project, name, attrs, client)
|
333
429
|
|
334
430
|
@classmethod
|
@@ -2361,25 +2457,71 @@ class Artifact:
|
|
2361
2457
|
Returns:
|
2362
2458
|
The linked artifact if linking was successful, otherwise None.
|
2363
2459
|
"""
|
2460
|
+
from wandb import Api
|
2461
|
+
|
2364
2462
|
if self.is_link:
|
2365
2463
|
wandb.termwarn(
|
2366
2464
|
"Linking to a link artifact will result in directly linking to the source artifact of that link artifact."
|
2367
2465
|
)
|
2368
2466
|
|
2369
|
-
if
|
2370
|
-
|
2371
|
-
|
2467
|
+
if self._client is None:
|
2468
|
+
raise ValueError("Client not initialized for artifact mutations")
|
2469
|
+
|
2470
|
+
# Save the artifact first if necessary
|
2471
|
+
if self.is_draft():
|
2472
|
+
if not self._is_draft_save_started():
|
2473
|
+
self.save(project=self.source_project)
|
2474
|
+
|
2475
|
+
# Wait until the artifact is committed before trying to link it.
|
2476
|
+
self.wait()
|
2372
2477
|
|
2478
|
+
api = Api(overrides={"entity": self.source_entity})
|
2479
|
+
|
2480
|
+
target = ArtifactPath.from_str(target_path).with_defaults(
|
2481
|
+
project=api.settings.get("project") or "uncategorized",
|
2482
|
+
)
|
2483
|
+
|
2484
|
+
# Parse the entity (first part of the path) appropriately,
|
2485
|
+
# depending on whether we're linking to a registry
|
2486
|
+
if target.project and is_artifact_registry_project(target.project):
|
2487
|
+
# In a Registry linking, the entity is used to fetch the organization of the artifact
|
2488
|
+
# therefore the source artifact's entity is passed to the backend
|
2489
|
+
organization = target.prefix or api.settings.get("organization") or ""
|
2490
|
+
|
2491
|
+
target.prefix = InternalApi()._resolve_org_entity_name(
|
2492
|
+
self.source_entity, organization
|
2493
|
+
)
|
2373
2494
|
else:
|
2374
|
-
|
2375
|
-
entity=self._source_entity,
|
2376
|
-
project=self._source_project,
|
2377
|
-
job_type="auto",
|
2378
|
-
settings=wandb.Settings(silent="true"),
|
2379
|
-
) as run:
|
2380
|
-
return run.link_artifact(self, target_path, aliases)
|
2495
|
+
target = target.with_defaults(prefix=self.source_entity)
|
2381
2496
|
|
2382
|
-
|
2497
|
+
# Prepare the validated GQL input, send it
|
2498
|
+
alias_inputs = [
|
2499
|
+
ArtifactAliasInput(artifact_collection_name=target.name, alias=a)
|
2500
|
+
for a in (aliases or [])
|
2501
|
+
]
|
2502
|
+
gql_input = LinkArtifactInput(
|
2503
|
+
artifact_id=self.id,
|
2504
|
+
artifact_portfolio_name=target.name,
|
2505
|
+
entity_name=target.prefix,
|
2506
|
+
project_name=target.project,
|
2507
|
+
aliases=alias_inputs,
|
2508
|
+
)
|
2509
|
+
gql_vars = {"input": gql_input.model_dump(exclude_none=True)}
|
2510
|
+
gql_op = gql(LINK_ARTIFACT_GQL)
|
2511
|
+
data = self._client.execute(gql_op, variable_values=gql_vars)
|
2512
|
+
|
2513
|
+
result = LinkArtifact.model_validate(data).link_artifact
|
2514
|
+
if not (result and (version_idx := result.version_index) is not None):
|
2515
|
+
raise ValueError("Unable to parse linked artifact version from response")
|
2516
|
+
|
2517
|
+
# Fetch the linked artifact to return it
|
2518
|
+
linked_path = f"{target.to_str()}:v{version_idx}"
|
2519
|
+
|
2520
|
+
try:
|
2521
|
+
return api._artifact(linked_path)
|
2522
|
+
except Exception as e:
|
2523
|
+
wandb.termerror(f"Error fetching link artifact after linking: {e}")
|
2524
|
+
return None
|
2383
2525
|
|
2384
2526
|
@ensure_logged
|
2385
2527
|
def unlink(self) -> None:
|
@@ -127,9 +127,9 @@ class Media(WBValue):
|
|
127
127
|
self._path = path
|
128
128
|
self._is_tmp = is_tmp
|
129
129
|
self._extension = extension
|
130
|
-
assert extension is None or path.endswith(
|
131
|
-
extension
|
132
|
-
)
|
130
|
+
assert extension is None or path.endswith(extension), (
|
131
|
+
f'Media file extension "{extension}" must occur at the end of path "{path}".'
|
132
|
+
)
|
133
133
|
|
134
134
|
with open(self._path, "rb") as f:
|
135
135
|
self._sha256 = hashlib.sha256(f.read()).hexdigest()
|
@@ -247,11 +247,13 @@ class Media(WBValue):
|
|
247
247
|
json_obj["_latest_artifact_path"] = artifact_entry_latest_url
|
248
248
|
|
249
249
|
if artifact_entry_url is None or self.is_bound():
|
250
|
-
assert self.is_bound(),
|
250
|
+
assert self.is_bound(), (
|
251
|
+
f"Value of type {type(self).__name__} must be bound to a run with bind_to_run() before being serialized to JSON."
|
252
|
+
)
|
251
253
|
|
252
|
-
assert (
|
253
|
-
|
254
|
-
)
|
254
|
+
assert self._run is run, (
|
255
|
+
"We don't support referring to media files across runs."
|
256
|
+
)
|
255
257
|
|
256
258
|
# The following two assertions are guaranteed to pass
|
257
259
|
# by definition is_bound, but are needed for
|
@@ -218,17 +218,17 @@ class WBValue:
|
|
218
218
|
def _set_artifact_source(
|
219
219
|
self, artifact: "Artifact", name: Optional[str] = None
|
220
220
|
) -> None:
|
221
|
-
assert (
|
222
|
-
self._artifact_source
|
223
|
-
)
|
221
|
+
assert self._artifact_source is None, (
|
222
|
+
f"Cannot update artifact_source. Existing source: {self._artifact_source.artifact}/{self._artifact_source.name}"
|
223
|
+
)
|
224
224
|
self._artifact_source = _WBValueArtifactSource(artifact, name)
|
225
225
|
|
226
226
|
def _set_artifact_target(
|
227
227
|
self, artifact: "Artifact", name: Optional[str] = None
|
228
228
|
) -> None:
|
229
|
-
assert (
|
230
|
-
self._artifact_target
|
231
|
-
)
|
229
|
+
assert self._artifact_target is None, (
|
230
|
+
f"Cannot update artifact_target. Existing target: {self._artifact_target.artifact}/{self._artifact_target.name}"
|
231
|
+
)
|
232
232
|
self._artifact_target = _WBValueArtifactTarget(artifact, name)
|
233
233
|
|
234
234
|
def _get_artifact_entry_ref_url(self) -> Optional[str]:
|
@@ -257,9 +257,9 @@ class _SavedModel(WBValue, Generic[SavedModelObjType]):
|
|
257
257
|
self._model_obj = None
|
258
258
|
|
259
259
|
def _set_obj(self, model_obj: Any) -> None:
|
260
|
-
assert model_obj is not None and self._validate_obj(
|
261
|
-
model_obj
|
262
|
-
)
|
260
|
+
assert model_obj is not None and self._validate_obj(model_obj), (
|
261
|
+
f"Invalid model object {model_obj}"
|
262
|
+
)
|
263
263
|
self._model_obj = model_obj
|
264
264
|
|
265
265
|
def _dump(self, target_path: str) -> None:
|