wandb 0.16.5__py3-none-any.whl → 0.16.6__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
  from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
15
15
 
16
16
 
17
- 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\"\xc9\x44\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\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-\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.\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\x44\n\x1f_async_upload_concurrency_limit\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\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\x30\n\x0c_except_exit\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\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\x31\n\r_require_core\x18$ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\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\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\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\x07problem\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\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\x12\x33\n\rsystem_sample\x18\x88\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x15system_sample_seconds\x18\x89\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\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\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>\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\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,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueb\x06proto3')
17
+ 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\"\x85\x45\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\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-\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.\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\x44\n\x1f_async_upload_concurrency_limit\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\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\x30\n\x0c_except_exit\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\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\x31\n\r_require_core\x18$ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\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\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\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\x07problem\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\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\x12\x33\n\rsystem_sample\x18\x88\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x15system_sample_seconds\x18\x89\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\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\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>\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\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,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueb\x06proto3')
18
18
 
19
19
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
20
20
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'wandb.proto.wandb_settings_pb2', globals())
@@ -40,5 +40,5 @@ if _descriptor._USE_C_DESCRIPTORS == False:
40
40
  _RUNMOMENT._serialized_start=622
41
41
  _RUNMOMENT._serialized_end=677
42
42
  _SETTINGS._serialized_start=680
43
- _SETTINGS._serialized_end=9457
43
+ _SETTINGS._serialized_end=9517
44
44
  # @@protoc_insertion_point(module_scope)
@@ -225,10 +225,14 @@ class Artifact:
225
225
  attrs = response.get("artifact")
226
226
  if attrs is None:
227
227
  return None
228
- entity = attrs["artifactSequence"]["project"]["entityName"]
229
- project = attrs["artifactSequence"]["project"]["name"]
228
+ attr_project = attrs["artifactSequence"]["project"]
229
+ entity_name = ""
230
+ project_name = ""
231
+ if attr_project:
232
+ entity_name = attr_project["entityName"]
233
+ project_name = attr_project["name"]
230
234
  name = "{}:v{}".format(attrs["artifactSequence"]["name"], attrs["versionIndex"])
231
- return cls._from_attrs(entity, project, name, attrs, client)
235
+ return cls._from_attrs(entity_name, project_name, name, attrs, client)
232
236
 
233
237
  @classmethod
234
238
  def _from_name(
@@ -284,7 +288,9 @@ class Artifact:
284
288
  aliases = [
285
289
  alias["alias"]
286
290
  for alias in attrs["aliases"]
287
- if alias["artifactCollection"]["project"]["entityName"] == entity
291
+ if alias["artifactCollection"]
292
+ and alias["artifactCollection"]["project"]
293
+ and alias["artifactCollection"]["project"]["entityName"] == entity
288
294
  and alias["artifactCollection"]["project"]["name"] == project
289
295
  and alias["artifactCollection"]["name"] == name.split(":")[0]
290
296
  ]
@@ -293,8 +299,12 @@ class Artifact:
293
299
  ]
294
300
  assert len(version_aliases) == 1
295
301
  artifact._version = version_aliases[0]
296
- artifact._source_entity = attrs["artifactSequence"]["project"]["entityName"]
297
- artifact._source_project = attrs["artifactSequence"]["project"]["name"]
302
+ attr_project = attrs["artifactSequence"]["project"]
303
+ artifact._source_entity = ""
304
+ artifact._source_project = ""
305
+ if attr_project:
306
+ artifact._source_entity = attr_project["entityName"]
307
+ artifact._source_project = attr_project["name"]
298
308
  artifact._source_name = "{}:v{}".format(
299
309
  attrs["artifactSequence"]["name"], attrs["versionIndex"]
300
310
  )
@@ -861,8 +871,12 @@ class Artifact:
861
871
  if attrs is None:
862
872
  raise ValueError(f"Unable to fetch artifact with id {artifact_id}")
863
873
  self._id = artifact_id
864
- self._entity = attrs["artifactSequence"]["project"]["entityName"]
865
- self._project = attrs["artifactSequence"]["project"]["name"]
874
+ attr_project = attrs["artifactSequence"]["project"]
875
+ self._entity = ""
876
+ self._project = ""
877
+ if attr_project:
878
+ self._entity = attr_project["entityName"]
879
+ self._project = attr_project["name"]
866
880
  self._name = "{}:v{}".format(
867
881
  attrs["artifactSequence"]["name"], attrs["versionIndex"]
868
882
  )
@@ -881,7 +895,9 @@ class Artifact:
881
895
  self._aliases = [
882
896
  alias["alias"]
883
897
  for alias in attrs["aliases"]
884
- if alias["artifactCollection"]["project"]["entityName"] == self._entity
898
+ if alias["artifactCollection"]
899
+ and alias["artifactCollection"]["project"]
900
+ and alias["artifactCollection"]["project"]["entityName"] == self._entity
885
901
  and alias["artifactCollection"]["project"]["name"] == self._project
886
902
  and alias["artifactCollection"]["name"] == self._name.split(":")[0]
887
903
  and not util.alias_is_version_index(alias["alias"])
@@ -75,25 +75,22 @@ class ArtifactSaver:
75
75
  history_step: Optional[int] = None,
76
76
  base_id: Optional[str] = None,
77
77
  ) -> Optional[Dict]:
78
- try:
79
- return self._save_internal(
80
- type,
81
- name,
82
- client_id,
83
- sequence_client_id,
84
- distributed_id,
85
- finalize,
86
- metadata,
87
- ttl_duration_seconds,
88
- description,
89
- aliases,
90
- use_after_commit,
91
- incremental,
92
- history_step,
93
- base_id,
94
- )
95
- finally:
96
- pass
78
+ return self._save_internal(
79
+ type,
80
+ name,
81
+ client_id,
82
+ sequence_client_id,
83
+ distributed_id,
84
+ finalize,
85
+ metadata,
86
+ ttl_duration_seconds,
87
+ description,
88
+ aliases,
89
+ use_after_commit,
90
+ incremental,
91
+ history_step,
92
+ base_id,
93
+ )
97
94
 
98
95
  def _save_internal(
99
96
  self,
@@ -25,6 +25,7 @@ from typing import (
25
25
  Union,
26
26
  )
27
27
 
28
+ from wandb import termwarn
28
29
  from wandb.proto import wandb_internal_pb2 as pb
29
30
  from wandb.proto import wandb_telemetry_pb2 as tpb
30
31
  from wandb.sdk.artifacts.artifact import Artifact
@@ -447,16 +448,27 @@ class InterfaceBase:
447
448
  path = artifact.get_entry("wandb-job.json").download()
448
449
  with open(path) as f:
449
450
  job_info = json.load(f)
451
+
450
452
  except Exception as e:
451
453
  logger.warning(
452
454
  f"Failed to download partial job info from artifact {artifact}, : {e}"
453
455
  )
454
- use_artifact = self._make_proto_use_artifact(
455
- use_artifact=use_artifact,
456
- job_name=artifact.name,
457
- job_info=job_info,
458
- metadata=artifact.metadata,
459
- )
456
+ termwarn(
457
+ f"Failed to download partial job info from artifact {artifact}, : {e}"
458
+ )
459
+ return
460
+
461
+ try:
462
+ use_artifact = self._make_proto_use_artifact(
463
+ use_artifact=use_artifact,
464
+ job_name=artifact.name,
465
+ job_info=job_info,
466
+ metadata=artifact.metadata,
467
+ )
468
+ except Exception as e:
469
+ logger.warning(f"Failed to construct use artifact proto: {e}")
470
+ termwarn(f"Failed to construct use artifact proto: {e}")
471
+ return
460
472
 
461
473
  self._publish_use_artifact(use_artifact)
462
474
 
@@ -62,6 +62,7 @@ def resolve_agent_config( # noqa: C901
62
62
  max_jobs: Optional[int],
63
63
  queues: Optional[Tuple[str]],
64
64
  config: Optional[str],
65
+ verbosity: Optional[int],
65
66
  ) -> Tuple[Dict[str, Any], Api]:
66
67
  """Resolve the agent config.
67
68
 
@@ -72,6 +73,7 @@ def resolve_agent_config( # noqa: C901
72
73
  max_jobs (int): The max number of jobs.
73
74
  queues (Tuple[str]): The queues.
74
75
  config (str): The config.
76
+ verbosity (int): How verbose to print, 0 or None = default, 1 = print status every 20 seconds, 2 = also print debugging information
75
77
 
76
78
  Returns:
77
79
  Tuple[Dict[str, Any], Api]: The resolved config and api.
@@ -83,6 +85,7 @@ def resolve_agent_config( # noqa: C901
83
85
  "queues": [],
84
86
  "registry": {},
85
87
  "builder": {},
88
+ "verbosity": 0,
86
89
  }
87
90
  user_set_project = False
88
91
  resolved_config: Dict[str, Any] = defaults
@@ -123,6 +126,8 @@ def resolve_agent_config( # noqa: C901
123
126
  resolved_config.update({"max_jobs": int(max_jobs)})
124
127
  if queues:
125
128
  resolved_config.update({"queues": list(queues)})
129
+ if verbosity:
130
+ resolved_config.update({"verbosity": int(verbosity)})
126
131
  # queue -> queues
127
132
  if resolved_config.get("queue"):
128
133
  if isinstance(resolved_config.get("queue"), str):
@@ -14,6 +14,7 @@ import wandb.docker as docker
14
14
  from wandb.apis.internal import Api
15
15
  from wandb.errors import CommError
16
16
  from wandb.sdk.launch import utils
17
+ from wandb.sdk.launch.utils import get_entrypoint_file
17
18
  from wandb.sdk.lib.runid import generate_id
18
19
 
19
20
  from .errors import LaunchError
@@ -135,7 +136,7 @@ class LaunchProject:
135
136
  if override_entrypoint:
136
137
  _logger.info("Adding override entry point")
137
138
  self.override_entrypoint = EntryPoint(
138
- name=_get_entrypoint_file(override_entrypoint),
139
+ name=get_entrypoint_file(override_entrypoint),
139
140
  command=override_entrypoint,
140
141
  )
141
142
 
@@ -536,24 +537,6 @@ class LaunchProject:
536
537
  self.git_version = branch_name
537
538
 
538
539
 
539
- def _get_entrypoint_file(entrypoint: List[str]) -> Optional[str]:
540
- """Get the entrypoint file from the given command.
541
-
542
- Args:
543
- entrypoint (List[str]): List of command and arguments.
544
-
545
- Returns:
546
- Optional[str]: The entrypoint file if found, otherwise None.
547
- """
548
- if not entrypoint:
549
- return None
550
- if entrypoint[0].endswith(".py") or entrypoint[0].endswith(".sh"):
551
- return entrypoint[0]
552
- if len(entrypoint) < 2:
553
- return None
554
- return entrypoint[1]
555
-
556
-
557
540
  class EntryPoint:
558
541
  """An entry point into a wandb launch specification."""
559
542
 
@@ -570,7 +553,9 @@ class EntryPoint:
570
553
 
571
554
  def update_entrypoint_path(self, new_path: str) -> None:
572
555
  """Updates the entrypoint path to a new path."""
573
- if len(self.command) == 2 and self.command[0] in ["python", "bash"]:
556
+ if len(self.command) == 2 and (
557
+ self.command[0].startswith("python") or self.command[0] == "bash"
558
+ ):
574
559
  self.command[1] = new_path
575
560
 
576
561
 
@@ -45,7 +45,10 @@ MAX_RESUME_COUNT = 5
45
45
 
46
46
  RUN_INFO_GRACE_PERIOD = 60
47
47
 
48
- MAX_WAIT_RUN_STOPPED = 60
48
+ DEFAULT_STOPPED_RUN_TIMEOUT = 60
49
+
50
+ DEFAULT_PRINT_INTERVAL = 5 * 60
51
+ VERBOSE_PRINT_INTERVAL = 20
49
52
 
50
53
  _env_timeout = os.environ.get("WANDB_LAUNCH_START_TIMEOUT")
51
54
  if _env_timeout:
@@ -105,30 +108,29 @@ def _max_from_config(
105
108
  return max_from_config
106
109
 
107
110
 
108
- def _is_scheduler_job(run_spec: Dict[str, Any]) -> bool:
109
- """Determine whether a job/runSpec is a sweep scheduler."""
110
- if not run_spec:
111
- _logger.debug("Recieved runSpec in _is_scheduler_job that was empty")
111
+ class InternalAgentLogger:
112
+ def __init__(self, verbosity=0):
113
+ self._print_to_terminal = verbosity >= 2
112
114
 
113
- if run_spec.get("uri") != Scheduler.PLACEHOLDER_URI:
114
- return False
115
+ def error(self, message: str):
116
+ if self._print_to_terminal:
117
+ wandb.termerror(f"{LOG_PREFIX}{message}")
118
+ _logger.error(f"{LOG_PREFIX}{message}")
115
119
 
116
- if run_spec.get("resource") == "local-process":
117
- # Any job pushed to a run queue that has a scheduler uri is
118
- # allowed to use local-process
119
- if run_spec.get("job"):
120
- return True
120
+ def warn(self, message: str):
121
+ if self._print_to_terminal:
122
+ wandb.termwarn(f"{LOG_PREFIX}{message}")
123
+ _logger.warn(f"{LOG_PREFIX}{message}")
121
124
 
122
- # If a scheduler is local-process and run through CLI, also
123
- # confirm command is in format: [wandb scheduler <sweep>]
124
- cmd = run_spec.get("overrides", {}).get("entry_point", [])
125
- if len(cmd) < 3:
126
- return False
125
+ def info(self, message: str):
126
+ if self._print_to_terminal:
127
+ wandb.termlog(f"{LOG_PREFIX}{message}")
128
+ _logger.info(f"{LOG_PREFIX}{message}")
127
129
 
128
- if cmd[:2] != ["wandb", "scheduler"]:
129
- return False
130
-
131
- return True
130
+ def debug(self, message: str):
131
+ if self._print_to_terminal:
132
+ wandb.termlog(f"{LOG_PREFIX}{message}")
133
+ _logger.debug(f"{LOG_PREFIX}{message}")
132
134
 
133
135
 
134
136
  class LaunchAgent:
@@ -184,7 +186,13 @@ class LaunchAgent:
184
186
  self._max_jobs = _max_from_config(config, "max_jobs")
185
187
  self._max_schedulers = _max_from_config(config, "max_schedulers")
186
188
  self._secure_mode = config.get("secure_mode", False)
189
+ self._verbosity = config.get("verbosity", 0)
190
+ self._internal_logger = InternalAgentLogger(verbosity=self._verbosity)
191
+ self._last_status_print_time = 0.0
187
192
  self.default_config: Dict[str, Any] = config
193
+ self._stopped_run_timeout = config.get(
194
+ "stopped_run_timeout", DEFAULT_STOPPED_RUN_TIMEOUT
195
+ )
188
196
 
189
197
  # Get agent version from env var if present, otherwise wandb version
190
198
  self.version: str = "wandb@" + wandb.__version__
@@ -228,6 +236,33 @@ class LaunchAgent:
228
236
  self._name = agent_response["name"]
229
237
  self._init_agent_run()
230
238
 
239
+ def _is_scheduler_job(self, run_spec: Dict[str, Any]) -> bool:
240
+ """Determine whether a job/runSpec is a sweep scheduler."""
241
+ if not run_spec:
242
+ self._internal_logger.debug(
243
+ "Recieved runSpec in _is_scheduler_job that was empty"
244
+ )
245
+
246
+ if run_spec.get("uri") != Scheduler.PLACEHOLDER_URI:
247
+ return False
248
+
249
+ if run_spec.get("resource") == "local-process":
250
+ # Any job pushed to a run queue that has a scheduler uri is
251
+ # allowed to use local-process
252
+ if run_spec.get("job"):
253
+ return True
254
+
255
+ # If a scheduler is local-process and run through CLI, also
256
+ # confirm command is in format: [wandb scheduler <sweep>]
257
+ cmd = run_spec.get("overrides", {}).get("entry_point", [])
258
+ if len(cmd) < 3:
259
+ return False
260
+
261
+ if cmd[:2] != ["wandb", "scheduler"]:
262
+ return False
263
+
264
+ return True
265
+
231
266
  async def fail_run_queue_item(
232
267
  self,
233
268
  run_queue_item_id: str,
@@ -298,6 +333,7 @@ class LaunchAgent:
298
333
 
299
334
  def print_status(self) -> None:
300
335
  """Prints the current status of the agent."""
336
+ self._last_status_print_time = time.time()
301
337
  output_str = "agent "
302
338
  if self._name:
303
339
  output_str += f"{self._name} "
@@ -344,8 +380,8 @@ class LaunchAgent:
344
380
  if run_state.lower() != "pending":
345
381
  return True
346
382
  except CommError:
347
- _logger.info(
348
- f"Run {entity}/{project}/{run_id} with rqi id: {rqi_id} did not have associated run"
383
+ self._internal_logger.info(
384
+ f"Run {entity}/{project}/{run_id} with rqi id: {rqi_id} did not have associated run",
349
385
  )
350
386
  return False
351
387
 
@@ -361,8 +397,8 @@ class LaunchAgent:
361
397
  job_and_run_status.entity is not None
362
398
  and job_and_run_status.entity != self._entity
363
399
  ):
364
- _logger.info(
365
- "Skipping check for completed run status because run is on a different entity than agent"
400
+ self._internal_logger.info(
401
+ "Skipping check for completed run status because run is on a different entity than agent",
366
402
  )
367
403
  elif exception is not None:
368
404
  tb_str = traceback.format_exception(
@@ -378,8 +414,8 @@ class LaunchAgent:
378
414
  fnames,
379
415
  )
380
416
  elif job_and_run_status.project is None or job_and_run_status.run_id is None:
381
- _logger.error(
382
- f"called finish_thread_id on thread whose tracker has no project or run id. RunQueueItemID: {job_and_run_status.run_queue_item_id}"
417
+ self._internal_logger.info(
418
+ f"called finish_thread_id on thread whose tracker has no project or run id. RunQueueItemID: {job_and_run_status.run_queue_item_id}",
383
419
  )
384
420
  wandb.termerror(
385
421
  "Missing project or run id on thread called finish thread id"
@@ -430,7 +466,9 @@ class LaunchAgent:
430
466
  job_and_run_status.run_queue_item_id, _msg, "run", fnames
431
467
  )
432
468
  else:
433
- _logger.info(f"Finish thread id {thread_id} had no exception and no run")
469
+ self._internal_logger.info(
470
+ f"Finish thread id {thread_id} had no exception and no run"
471
+ )
434
472
  wandb._sentry.exception(
435
473
  "launch agent called finish thread id on thread without run or exception"
436
474
  )
@@ -458,7 +496,7 @@ class LaunchAgent:
458
496
  await self.update_status(AGENT_RUNNING)
459
497
 
460
498
  # parse job
461
- _logger.info("Parsing launch spec")
499
+ self._internal_logger.info("Parsing launch spec")
462
500
  launch_spec = job["runSpec"]
463
501
 
464
502
  # Abort if this job attempts to override secure mode
@@ -511,6 +549,10 @@ class LaunchAgent:
511
549
  KeyboardInterrupt: if the agent is requested to stop.
512
550
  """
513
551
  self.print_status()
552
+ if self._verbosity == 0:
553
+ print_interval = DEFAULT_PRINT_INTERVAL
554
+ else:
555
+ print_interval = VERBOSE_PRINT_INTERVAL
514
556
  try:
515
557
  while True:
516
558
  job = None
@@ -532,7 +574,7 @@ class LaunchAgent:
532
574
  file_saver = RunQueueItemFileSaver(
533
575
  self._wandb_run, job["runQueueItemId"]
534
576
  )
535
- if _is_scheduler_job(job.get("runSpec", {})):
577
+ if self._is_scheduler_job(job.get("runSpec", {})):
536
578
  # If job is a scheduler, and we are already at the cap, ignore,
537
579
  # don't ack, and it will be pushed back onto the queue in 1 min
538
580
  if self.num_running_schedulers >= self._max_schedulers:
@@ -567,6 +609,7 @@ class LaunchAgent:
567
609
  await self.update_status(AGENT_POLLING)
568
610
  else:
569
611
  await self.update_status(AGENT_RUNNING)
612
+ if time.time() - self._last_status_print_time > print_interval:
570
613
  self.print_status()
571
614
 
572
615
  if self.num_running_jobs == self._max_jobs or job is None:
@@ -634,14 +677,14 @@ class LaunchAgent:
634
677
  await self.check_sweep_state(launch_spec, api)
635
678
 
636
679
  job_tracker.update_run_info(project)
637
- _logger.info("Fetching and validating project...")
680
+ self._internal_logger.info("Fetching and validating project...")
638
681
  project.fetch_and_validate_project()
639
- _logger.info("Fetching resource...")
682
+ self._internal_logger.info("Fetching resource...")
640
683
  resource = launch_spec.get("resource") or "local-container"
641
684
  backend_config: Dict[str, Any] = {
642
685
  PROJECT_SYNCHRONOUS: False, # agent always runs async
643
686
  }
644
- _logger.info("Loading backend")
687
+ self._internal_logger.info("Loading backend")
645
688
  override_build_config = launch_spec.get("builder")
646
689
 
647
690
  _, build_config, registry_config = construct_agent_configs(
@@ -661,13 +704,13 @@ class LaunchAgent:
661
704
  assert entrypoint is not None
662
705
  image_uri = await builder.build_image(project, entrypoint, job_tracker)
663
706
 
664
- _logger.info("Backend loaded...")
707
+ self._internal_logger.info("Backend loaded...")
665
708
  if isinstance(backend, LocalProcessRunner):
666
709
  run = await backend.run(project, image_uri)
667
710
  else:
668
711
  assert image_uri
669
712
  run = await backend.run(project, image_uri)
670
- if _is_scheduler_job(launch_spec):
713
+ if self._is_scheduler_job(launch_spec):
671
714
  with self._jobs_lock:
672
715
  self._jobs[thread_id].is_scheduler = True
673
716
  wandb.termlog(
@@ -700,7 +743,7 @@ class LaunchAgent:
700
743
  if stopped_time is None:
701
744
  stopped_time = time.time()
702
745
  else:
703
- if time.time() - stopped_time > MAX_WAIT_RUN_STOPPED:
746
+ if time.time() - stopped_time > self._stopped_run_timeout:
704
747
  await run.cancel()
705
748
  await asyncio.sleep(AGENT_POLLING_INTERVAL)
706
749
 
@@ -720,7 +763,7 @@ class LaunchAgent:
720
763
  project=launch_spec["project"],
721
764
  )
722
765
  except Exception as e:
723
- _logger.debug(f"Fetch sweep state error: {e}")
766
+ self._internal_logger.debug(f"Fetch sweep state error: {e}")
724
767
  state = None
725
768
 
726
769
  if state != "RUNNING" and state != "PAUSED":
@@ -225,6 +225,14 @@ class AgentConfig(BaseModel):
225
225
  None,
226
226
  description="The builder to use.",
227
227
  )
228
+ verbosity: Optional[int] = Field(
229
+ 0,
230
+ description="How verbose to print, 0 = default, 1 = verbose, 2 = very verbose",
231
+ )
232
+ stopped_run_timeout: Optional[int] = Field(
233
+ 60,
234
+ description="How many seconds to wait after receiving the stop command before forcibly cancelling a run.",
235
+ )
228
236
 
229
237
  class Config:
230
238
  extra = "forbid"