wandb 0.16.6__py3-none-any.whl → 0.17.0rc1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. package_readme.md +95 -0
  2. wandb/__init__.py +2 -2
  3. wandb/agents/pyagent.py +0 -1
  4. wandb/analytics/sentry.py +2 -1
  5. wandb/apis/importers/internals/protocols.py +30 -56
  6. wandb/apis/importers/mlflow.py +13 -26
  7. wandb/apis/importers/wandb.py +8 -14
  8. wandb/apis/public/api.py +1 -0
  9. wandb/apis/public/artifacts.py +1 -0
  10. wandb/apis/public/files.py +1 -0
  11. wandb/apis/public/history.py +1 -0
  12. wandb/apis/public/jobs.py +1 -0
  13. wandb/apis/public/projects.py +1 -0
  14. wandb/apis/public/reports.py +1 -0
  15. wandb/apis/public/runs.py +1 -0
  16. wandb/apis/public/sweeps.py +1 -0
  17. wandb/apis/public/teams.py +1 -0
  18. wandb/apis/public/users.py +1 -0
  19. wandb/apis/reports/v1/_blocks.py +2 -6
  20. wandb/apis/reports/v2/gql.py +1 -0
  21. wandb/apis/reports/v2/interface.py +3 -4
  22. wandb/apis/reports/v2/internal.py +5 -8
  23. wandb/cli/cli.py +2 -2
  24. wandb/data_types.py +3 -3
  25. wandb/env.py +35 -5
  26. wandb/errors/__init__.py +5 -0
  27. wandb/integration/catboost/catboost.py +1 -1
  28. wandb/integration/fastai/__init__.py +1 -0
  29. wandb/integration/keras/__init__.py +1 -0
  30. wandb/integration/keras/keras.py +6 -6
  31. wandb/integration/langchain/wandb_tracer.py +1 -0
  32. wandb/integration/lightning/fabric/logger.py +1 -3
  33. wandb/integration/metaflow/metaflow.py +41 -6
  34. wandb/integration/openai/fine_tuning.py +3 -3
  35. wandb/keras/__init__.py +1 -0
  36. wandb/proto/v3/wandb_internal_pb2.py +364 -332
  37. wandb/proto/v3/wandb_settings_pb2.py +1 -1
  38. wandb/proto/v4/wandb_internal_pb2.py +322 -316
  39. wandb/proto/v4/wandb_settings_pb2.py +1 -1
  40. wandb/proto/wandb_internal_codegen.py +0 -25
  41. wandb/sdk/artifacts/artifact.py +16 -4
  42. wandb/sdk/artifacts/artifact_download_logger.py +1 -0
  43. wandb/sdk/artifacts/artifact_file_cache.py +18 -4
  44. wandb/sdk/artifacts/artifact_instance_cache.py +1 -0
  45. wandb/sdk/artifacts/artifact_manifest.py +1 -0
  46. wandb/sdk/artifacts/artifact_manifest_entry.py +1 -0
  47. wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +1 -0
  48. wandb/sdk/artifacts/artifact_saver.py +5 -2
  49. wandb/sdk/artifacts/artifact_state.py +1 -0
  50. wandb/sdk/artifacts/artifact_ttl.py +1 -0
  51. wandb/sdk/artifacts/exceptions.py +1 -0
  52. wandb/sdk/artifacts/storage_handlers/azure_handler.py +1 -0
  53. wandb/sdk/artifacts/storage_handlers/gcs_handler.py +13 -18
  54. wandb/sdk/artifacts/storage_handlers/http_handler.py +1 -0
  55. wandb/sdk/artifacts/storage_handlers/local_file_handler.py +1 -0
  56. wandb/sdk/artifacts/storage_handlers/multi_handler.py +1 -0
  57. wandb/sdk/artifacts/storage_handlers/s3_handler.py +5 -3
  58. wandb/sdk/artifacts/storage_handlers/tracking_handler.py +1 -0
  59. wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +1 -0
  60. wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +1 -0
  61. wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +1 -0
  62. wandb/sdk/artifacts/storage_policy.py +1 -0
  63. wandb/sdk/data_types/base_types/media.py +3 -6
  64. wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +3 -1
  65. wandb/sdk/integration_utils/auto_logging.py +5 -6
  66. wandb/sdk/integration_utils/data_logging.py +5 -1
  67. wandb/sdk/interface/interface.py +54 -31
  68. wandb/sdk/interface/interface_shared.py +7 -13
  69. wandb/sdk/internal/datastore.py +1 -1
  70. wandb/sdk/internal/handler.py +18 -2
  71. wandb/sdk/internal/internal.py +0 -1
  72. wandb/sdk/internal/internal_util.py +0 -1
  73. wandb/sdk/internal/job_builder.py +4 -3
  74. wandb/sdk/internal/profiler.py +1 -0
  75. wandb/sdk/internal/run.py +1 -0
  76. wandb/sdk/internal/sender.py +1 -1
  77. wandb/sdk/internal/system/assets/gpu_amd.py +44 -44
  78. wandb/sdk/internal/system/assets/gpu_apple.py +56 -11
  79. wandb/sdk/internal/system/assets/interfaces.py +6 -8
  80. wandb/sdk/internal/system/assets/open_metrics.py +2 -2
  81. wandb/sdk/internal/system/assets/trainium.py +1 -3
  82. wandb/sdk/launch/_project_spec.py +5 -3
  83. wandb/sdk/launch/agent/agent.py +1 -0
  84. wandb/sdk/launch/agent/config.py +72 -11
  85. wandb/sdk/launch/builder/abstract.py +1 -0
  86. wandb/sdk/launch/builder/build.py +28 -1
  87. wandb/sdk/launch/builder/docker_builder.py +1 -0
  88. wandb/sdk/launch/builder/noop.py +1 -0
  89. wandb/sdk/launch/create_job.py +18 -0
  90. wandb/sdk/launch/environment/abstract.py +1 -0
  91. wandb/sdk/launch/environment/gcp_environment.py +1 -0
  92. wandb/sdk/launch/environment/local_environment.py +1 -0
  93. wandb/sdk/launch/loader.py +1 -0
  94. wandb/sdk/launch/registry/abstract.py +1 -0
  95. wandb/sdk/launch/registry/azure_container_registry.py +1 -0
  96. wandb/sdk/launch/registry/elastic_container_registry.py +1 -0
  97. wandb/sdk/launch/registry/google_artifact_registry.py +1 -0
  98. wandb/sdk/launch/registry/local_registry.py +1 -0
  99. wandb/sdk/launch/runner/abstract.py +1 -0
  100. wandb/sdk/launch/runner/kubernetes_monitor.py +1 -0
  101. wandb/sdk/launch/runner/kubernetes_runner.py +4 -3
  102. wandb/sdk/launch/runner/sagemaker_runner.py +11 -10
  103. wandb/sdk/launch/sweeps/scheduler.py +1 -0
  104. wandb/sdk/launch/sweeps/scheduler_sweep.py +1 -0
  105. wandb/sdk/launch/sweeps/utils.py +1 -1
  106. wandb/sdk/launch/utils.py +3 -3
  107. wandb/sdk/lib/fsm.py +8 -12
  108. wandb/sdk/lib/gitlib.py +4 -4
  109. wandb/sdk/lib/lazyloader.py +0 -1
  110. wandb/sdk/lib/proto_util.py +1 -1
  111. wandb/sdk/lib/retry.py +3 -2
  112. wandb/sdk/service/service.py +17 -15
  113. wandb/sdk/verify/verify.py +2 -1
  114. wandb/sdk/wandb_manager.py +2 -2
  115. wandb/sdk/wandb_require.py +5 -0
  116. wandb/sdk/wandb_run.py +14 -12
  117. wandb/sdk/wandb_settings.py +0 -1
  118. wandb/sklearn/__init__.py +1 -0
  119. wandb/sklearn/plot/__init__.py +1 -0
  120. wandb/sklearn/plot/classifier.py +1 -0
  121. wandb/sklearn/plot/clusterer.py +1 -0
  122. wandb/sklearn/plot/regressor.py +1 -0
  123. wandb/sklearn/plot/shared.py +1 -0
  124. wandb/sklearn/utils.py +1 -0
  125. wandb/testing/relay.py +4 -4
  126. wandb/trigger.py +1 -0
  127. wandb/util.py +40 -17
  128. wandb/wandb_controller.py +0 -1
  129. wandb/wandb_torch.py +1 -2
  130. {wandb-0.16.6.dist-info → wandb-0.17.0rc1.dist-info}/METADATA +68 -69
  131. {wandb-0.16.6.dist-info → wandb-0.17.0rc1.dist-info}/RECORD +134 -135
  132. {wandb-0.16.6.dist-info → wandb-0.17.0rc1.dist-info}/WHEEL +1 -2
  133. wandb/bin/apple_gpu_stats +0 -0
  134. wandb-0.16.6.dist-info/top_level.txt +0 -1
  135. {wandb-0.16.6.dist-info → wandb-0.17.0rc1.dist-info}/entry_points.txt +0 -0
  136. {wandb-0.16.6.dist-info → wandb-0.17.0rc1.dist-info/licenses}/LICENSE +0 -0
@@ -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\"\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')
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\x31\n\r_require_core\x18$ \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\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())
@@ -47,31 +47,6 @@ def get_pip_package_version(package_name: str) -> str:
47
47
  except importlib.metadata.PackageNotFoundError:
48
48
  raise ValueError(f"Package `{package_name}` not found")
49
49
 
50
-
51
- def get_min_required_version(requirements_file_name: str, package_name: str) -> str:
52
- with open(requirements_file_name) as f:
53
- lines = f.readlines()
54
- for line in lines:
55
- tokens = line.strip().split(">=")
56
- if tokens[0] == package_name:
57
- if len(tokens) == 2:
58
- return tokens[1]
59
- else:
60
- raise ValueError(
61
- f"Minimum version not specified for package `{package_name}`"
62
- )
63
- raise ValueError(f"Package `{package_name}` not found in requirements file")
64
-
65
-
66
- package: str = "grpcio-tools"
67
- package_version = get_pip_package_version(package)
68
- requirements_file: str = "../../requirements_build.txt"
69
- requirements_min_version = get_min_required_version(requirements_file, package)
70
- # check that the installed version of the package is at least the required version
71
- assert version.Version(package_version) >= version.Version(
72
- requirements_min_version
73
- ), f"Package {package} found={package_version} required>={requirements_min_version}"
74
-
75
50
  protobuf_version = version.Version(get_pip_package_version("protobuf"))
76
51
 
77
52
  proto_root = os.path.join(os.path.dirname(grpc_tools.__file__), "_proto")
@@ -1616,7 +1616,7 @@ class Artifact:
1616
1616
 
1617
1617
  def download(
1618
1618
  self,
1619
- root: Optional[str] = None,
1619
+ root: Optional[StrPath] = None,
1620
1620
  allow_missing_references: bool = False,
1621
1621
  skip_cache: Optional[bool] = None,
1622
1622
  path_prefix: Optional[StrPath] = None,
@@ -1642,10 +1642,10 @@ class Artifact:
1642
1642
  """
1643
1643
  self._ensure_logged("download")
1644
1644
 
1645
- root = root or self._default_root()
1645
+ root = FilePathStr(str(root or self._default_root()))
1646
1646
  self._add_download_root(root)
1647
1647
 
1648
- if get_core_path() != "":
1648
+ if is_require_core():
1649
1649
  return self._download_using_core(
1650
1650
  root=root,
1651
1651
  allow_missing_references=allow_missing_references,
@@ -1678,6 +1678,8 @@ class Artifact:
1678
1678
  self,
1679
1679
  root: str,
1680
1680
  allow_missing_references: bool = False,
1681
+ skip_cache: bool = False,
1682
+ path_prefix: Optional[StrPath] = None,
1681
1683
  ) -> FilePathStr:
1682
1684
  import pathlib
1683
1685
 
@@ -1718,11 +1720,15 @@ class Artifact:
1718
1720
  self.id, # type: ignore
1719
1721
  root,
1720
1722
  allow_missing_references,
1723
+ skip_cache,
1724
+ path_prefix, # type: ignore
1721
1725
  )
1722
1726
  # TODO: Start the download process in the user process too, to handle reference downloads
1723
1727
  self._download(
1724
1728
  root=root,
1725
1729
  allow_missing_references=allow_missing_references,
1730
+ skip_cache=skip_cache,
1731
+ path_prefix=path_prefix,
1726
1732
  )
1727
1733
  result = handle.wait(timeout=-1)
1728
1734
 
@@ -1748,7 +1754,7 @@ class Artifact:
1748
1754
  path_prefix: Optional[StrPath] = None,
1749
1755
  ) -> FilePathStr:
1750
1756
  # todo: remove once artifact reference downloads are supported in core
1751
- require_core = get_core_path() != ""
1757
+ require_core = is_require_core()
1752
1758
 
1753
1759
  nfiles = len(self.manifest.entries)
1754
1760
  size = sum(e.size or 0 for e in self.manifest.entries.values())
@@ -2297,6 +2303,12 @@ class Artifact:
2297
2303
  return None
2298
2304
 
2299
2305
 
2306
+ def is_require_core() -> bool:
2307
+ if env.is_require_core():
2308
+ return bool(get_core_path())
2309
+ return False
2310
+
2311
+
2300
2312
  class _ArtifactVersionType(WBType):
2301
2313
  name = "artifactVersion"
2302
2314
  types = [Artifact]
@@ -1,4 +1,5 @@
1
1
  """Artifact download logger."""
2
+
2
3
  import multiprocessing.dummy
3
4
  import time
4
5
  from typing import Callable
@@ -1,4 +1,5 @@
1
1
  """Artifact cache."""
2
+
2
3
  import contextlib
3
4
  import errno
4
5
  import hashlib
@@ -33,7 +34,7 @@ class ArtifactFileCache:
33
34
  self._cache_dir = Path(cache_dir)
34
35
  self._obj_dir = self._cache_dir / "obj"
35
36
  self._temp_dir = self._cache_dir / "tmp"
36
- self._temp_dir.mkdir(parents=True, exist_ok=True)
37
+ self._ensure_write_permissions()
37
38
 
38
39
  # NamedTemporaryFile sets the file mode to 600 [1], we reset to the default.
39
40
  # [1] https://stackoverflow.com/questions/10541760/can-i-set-the-umask-for-tempfile-namedtemporaryfile-in-python
@@ -204,12 +205,25 @@ class ArtifactFileCache:
204
205
 
205
206
  return helper
206
207
 
208
+ def _ensure_write_permissions(self) -> None:
209
+ """Raise an error if we cannot write to the cache directory."""
210
+ try:
211
+ self._temp_dir.mkdir(parents=True, exist_ok=True)
212
+ with NamedTemporaryFile(dir=self._temp_dir) as f:
213
+ f.write(b"wandb")
214
+ except PermissionError as e:
215
+ raise PermissionError(
216
+ f"Unable to write to {self._cache_dir}. "
217
+ "Ensure that the current user has write permissions."
218
+ ) from e
219
+
207
220
 
208
- _artifact_file_cache = None
221
+ _artifact_file_cache: Optional[ArtifactFileCache] = None
209
222
 
210
223
 
211
224
  def get_artifact_file_cache() -> ArtifactFileCache:
212
225
  global _artifact_file_cache
213
- if _artifact_file_cache is None:
214
- _artifact_file_cache = ArtifactFileCache(env.get_cache_dir() / "artifacts")
226
+ cache_dir = env.get_cache_dir() / "artifacts"
227
+ if _artifact_file_cache is None or _artifact_file_cache._cache_dir != cache_dir:
228
+ _artifact_file_cache = ArtifactFileCache(cache_dir)
215
229
  return _artifact_file_cache
@@ -3,6 +3,7 @@
3
3
  Artifacts are registered in the cache to ensure they won't be immediately garbage
4
4
  collected and can be retrieved by their ID.
5
5
  """
6
+
6
7
  from typing import TYPE_CHECKING, Dict
7
8
 
8
9
  from wandb.sdk.lib.capped_dict import CappedDict
@@ -1,4 +1,5 @@
1
1
  """Artifact manifest."""
2
+
2
3
  from typing import TYPE_CHECKING, Dict, List, Mapping, Optional
3
4
 
4
5
  from wandb.sdk.internal.internal_api import Api as InternalApi
@@ -1,4 +1,5 @@
1
1
  """Artifact manifest entry."""
2
+
2
3
  import json
3
4
  import os
4
5
  from pathlib import Path
@@ -1,4 +1,5 @@
1
1
  """Artifact manifest v1."""
2
+
2
3
  from typing import Any, Dict, Mapping, Optional
3
4
 
4
5
  from wandb.sdk.artifacts.artifact_manifest import ArtifactManifest
@@ -1,4 +1,5 @@
1
1
  """Artifact saver."""
2
+
2
3
  import concurrent.futures
3
4
  import json
4
5
  import os
@@ -172,14 +173,16 @@ class ArtifactSaver:
172
173
  self._file_pusher.store_manifest_files(
173
174
  self._manifest,
174
175
  artifact_id,
175
- lambda entry, progress_callback: self._manifest.storage_policy.store_file_sync(
176
+ lambda entry,
177
+ progress_callback: self._manifest.storage_policy.store_file_sync(
176
178
  artifact_id,
177
179
  artifact_manifest_id,
178
180
  entry,
179
181
  step_prepare,
180
182
  progress_callback=progress_callback,
181
183
  ),
182
- lambda entry, progress_callback: self._manifest.storage_policy.store_file_async(
184
+ lambda entry,
185
+ progress_callback: self._manifest.storage_policy.store_file_async(
183
186
  artifact_id,
184
187
  artifact_manifest_id,
185
188
  entry,
@@ -1,4 +1,5 @@
1
1
  """Artifact state."""
2
+
2
3
  from enum import Enum
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Artifact TTL."""
2
+
2
3
  from enum import Enum
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Artifact exceptions."""
2
+
2
3
  from typing import TYPE_CHECKING, Optional
3
4
 
4
5
  from wandb import errors
@@ -1,4 +1,5 @@
1
1
  """Azure storage handler."""
2
+
2
3
  from pathlib import PurePosixPath
3
4
  from types import ModuleType
4
5
  from typing import TYPE_CHECKING, Dict, Optional, Sequence, Tuple, Union
@@ -1,7 +1,8 @@
1
1
  """GCS storage handler."""
2
+
2
3
  import time
3
4
  from pathlib import PurePosixPath
4
- from typing import TYPE_CHECKING, Dict, Optional, Sequence, Tuple, Union
5
+ from typing import TYPE_CHECKING, Optional, Sequence, Tuple, Union
5
6
  from urllib.parse import ParseResult, urlparse
6
7
 
7
8
  from wandb import util
@@ -9,7 +10,7 @@ from wandb.errors.term import termlog
9
10
  from wandb.sdk.artifacts.artifact_file_cache import get_artifact_file_cache
10
11
  from wandb.sdk.artifacts.artifact_manifest_entry import ArtifactManifestEntry
11
12
  from wandb.sdk.artifacts.storage_handler import DEFAULT_MAX_OBJECTS, StorageHandler
12
- from wandb.sdk.lib.hashutil import B64MD5
13
+ from wandb.sdk.lib.hashutil import ETag
13
14
  from wandb.sdk.lib.paths import FilePathStr, StrPath, URIStr
14
15
 
15
16
  if TYPE_CHECKING:
@@ -51,13 +52,14 @@ class GCSHandler(StorageHandler):
51
52
  manifest_entry: ArtifactManifestEntry,
52
53
  local: bool = False,
53
54
  ) -> Union[URIStr, FilePathStr]:
55
+ assert manifest_entry.ref is not None
54
56
  if not local:
55
- assert manifest_entry.ref is not None
56
57
  return manifest_entry.ref
57
58
 
58
- path, hit, cache_open = self._cache.check_md5_obj_path(
59
- B64MD5(manifest_entry.digest), # TODO(spencerpearson): unsafe cast
60
- manifest_entry.size if manifest_entry.size is not None else 0,
59
+ path, hit, cache_open = self._cache.check_etag_obj_path(
60
+ url=URIStr(manifest_entry.ref),
61
+ etag=ETag(manifest_entry.digest),
62
+ size=manifest_entry.size if manifest_entry.size is not None else 0,
61
63
  )
62
64
  if hit:
63
65
  return path
@@ -81,10 +83,10 @@ class GCSHandler(StorageHandler):
81
83
  raise ValueError(
82
84
  f"Unable to download object {manifest_entry.ref} with generation {version}"
83
85
  )
84
- md5 = obj.md5_hash
85
- if md5 != manifest_entry.digest:
86
+ if obj.etag != manifest_entry.digest:
86
87
  raise ValueError(
87
- f"Digest mismatch for object {manifest_entry.ref}: expected {manifest_entry.digest} but found {md5}"
88
+ f"Digest mismatch for object {manifest_entry.ref}: "
89
+ f"expected {manifest_entry.digest} but found {obj.etag}"
88
90
  )
89
91
 
90
92
  with cache_open(mode="wb") as f:
@@ -187,14 +189,7 @@ class GCSHandler(StorageHandler):
187
189
  return ArtifactManifestEntry(
188
190
  path=posix_name,
189
191
  ref=URIStr(f"{self._scheme}://{str(posix_ref)}"),
190
- digest=obj.md5_hash,
192
+ digest=obj.etag,
191
193
  size=obj.size,
192
- extra=self._extra_from_obj(obj),
194
+ extra={"versionID": obj.generation},
193
195
  )
194
-
195
- @staticmethod
196
- def _extra_from_obj(obj: "gcs_module.blob.Blob") -> Dict[str, str]:
197
- return {
198
- "etag": obj.etag,
199
- "versionID": obj.generation,
200
- }
@@ -1,4 +1,5 @@
1
1
  """HTTP storage handler."""
2
+
2
3
  import os
3
4
  from typing import TYPE_CHECKING, Dict, Optional, Sequence, Tuple, Union
4
5
  from urllib.parse import ParseResult
@@ -1,4 +1,5 @@
1
1
  """Local file storage handler."""
2
+
2
3
  import os
3
4
  import shutil
4
5
  import time
@@ -1,4 +1,5 @@
1
1
  """Multi storage handler."""
2
+
2
3
  from typing import TYPE_CHECKING, List, Optional, Sequence, Union
3
4
  from urllib.parse import urlparse
4
5
 
@@ -1,4 +1,5 @@
1
1
  """S3 storage handler."""
2
+
2
3
  import os
3
4
  import time
4
5
  from pathlib import PurePosixPath
@@ -182,9 +183,10 @@ class S3Handler(StorageHandler):
182
183
  multi = True
183
184
  else:
184
185
  raise CommError(
185
- "Unable to connect to S3 ({}): {}".format(
186
- e.response["Error"]["Code"], e.response["Error"]["Message"]
187
- )
186
+ f"Unable to connect to S3 ({e.response['Error']['Code']}): "
187
+ f"{e.response['Error']['Message']}. Check that your "
188
+ "authentication credentials are valid and that your region is "
189
+ "set correctly."
188
190
  )
189
191
  else:
190
192
  multi = True
@@ -1,4 +1,5 @@
1
1
  """Tracking storage handler."""
2
+
2
3
  from typing import TYPE_CHECKING, Optional, Sequence, Union
3
4
  from urllib.parse import urlparse
4
5
 
@@ -1,4 +1,5 @@
1
1
  """WB artifact storage handler."""
2
+
2
3
  import os
3
4
  from typing import TYPE_CHECKING, Optional, Sequence, Union
4
5
  from urllib.parse import urlparse
@@ -1,4 +1,5 @@
1
1
  """WB local artifact storage handler."""
2
+
2
3
  import os
3
4
  from typing import TYPE_CHECKING, Optional, Sequence, Union
4
5
 
@@ -1,4 +1,5 @@
1
1
  """WandB storage policy."""
2
+
2
3
  import hashlib
3
4
  import math
4
5
  import os
@@ -1,4 +1,5 @@
1
1
  """Storage policy."""
2
+
2
3
  from typing import TYPE_CHECKING, Dict, Optional, Sequence, Type, Union
3
4
 
4
5
  from wandb.sdk.internal.internal_api import Api as InternalApi
@@ -177,9 +177,7 @@ class Media(WBValue):
177
177
  json_obj["_latest_artifact_path"] = artifact_entry_latest_url
178
178
 
179
179
  if artifact_entry_url is None or self.is_bound():
180
- assert (
181
- self.is_bound()
182
- ), "Value of type {} must be bound to a run with bind_to_run() before being serialized to JSON.".format(
180
+ assert self.is_bound(), "Value of type {} must be bound to a run with bind_to_run() before being serialized to JSON.".format(
183
181
  type(self).__name__
184
182
  )
185
183
 
@@ -221,8 +219,7 @@ class Media(WBValue):
221
219
 
222
220
  # if not, check to see if there is a source artifact for this object
223
221
  if (
224
- self._artifact_source
225
- is not None
222
+ self._artifact_source is not None
226
223
  # and self._artifact_source.artifact != artifact
227
224
  ):
228
225
  default_root = self._artifact_source.artifact._default_root()
@@ -292,7 +289,7 @@ class BatchableMedia(Media):
292
289
 
293
290
 
294
291
  def _numpy_arrays_to_lists(
295
- payload: Union[dict, Sequence, "np.ndarray"]
292
+ payload: Union[dict, Sequence, "np.ndarray"],
296
293
  ) -> Union[Sequence, dict, str, int, float, bool]:
297
294
  # Casts all numpy arrays to lists so we don't convert them to histograms, primarily for Plotly
298
295
 
@@ -231,8 +231,10 @@ class BoundingBoxes2D(JSONMetadata):
231
231
 
232
232
  for box in boxes:
233
233
  # Required arguments
234
- error_str = "Each box must contain a position with: middle, width, and height or \
234
+ error_str = (
235
+ "Each box must contain a position with: middle, width, and height or \
235
236
  \nminX, maxX, minY, maxY."
237
+ )
236
238
  if "position" not in box:
237
239
  raise TypeError(error_str)
238
240
  else:
@@ -27,11 +27,11 @@ V = TypeVar("V")
27
27
 
28
28
 
29
29
  class Response(Protocol[K, V]):
30
- def __getitem__(self, key: K) -> V:
31
- ... # pragma: no cover
30
+ def __getitem__(self, key: K) -> V: ... # pragma: no cover
32
31
 
33
- def get(self, key: K, default: Optional[V] = None) -> Optional[V]:
34
- ... # pragma: no cover
32
+ def get(
33
+ self, key: K, default: Optional[V] = None
34
+ ) -> Optional[V]: ... # pragma: no cover
35
35
 
36
36
 
37
37
  class ArgumentResponseResolver(Protocol):
@@ -42,8 +42,7 @@ class ArgumentResponseResolver(Protocol):
42
42
  response: Response,
43
43
  start_time: float,
44
44
  time_elapsed: float,
45
- ) -> Optional[Dict[str, Any]]:
46
- ... # pragma: no cover
45
+ ) -> Optional[Dict[str, Any]]: ... # pragma: no cover
47
46
 
48
47
 
49
48
  class PatchAPI:
@@ -291,7 +291,11 @@ def _infer_single_example_keyed_processor(
291
291
  ):
292
292
  # assume this is a class
293
293
  if class_labels_table is not None:
294
- processors["class"] = lambda n, d, p: class_labels_table.index_ref(d[0]) if d[0] < len(class_labels_table.data) else d[0] # type: ignore
294
+ processors["class"] = (
295
+ lambda n, d, p: class_labels_table.index_ref(d[0])
296
+ if d[0] < len(class_labels_table.data)
297
+ else d[0]
298
+ ) # type: ignore
295
299
  else:
296
300
  processors["val"] = lambda n, d, p: d[0]
297
301
  elif len(shape) == 1: