wandb 0.19.6__py3-none-macosx_11_0_arm64.whl → 0.19.7__py3-none-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wandb/__init__.py +1 -1
- wandb/__init__.pyi +25 -5
- wandb/apis/public/_generated/__init__.py +21 -0
- wandb/apis/public/_generated/base.py +128 -0
- wandb/apis/public/_generated/enums.py +4 -0
- wandb/apis/public/_generated/input_types.py +4 -0
- wandb/apis/public/_generated/operations.py +15 -0
- wandb/apis/public/_generated/server_features_query.py +27 -0
- wandb/apis/public/_generated/typing_compat.py +14 -0
- wandb/apis/public/api.py +192 -6
- wandb/apis/public/artifacts.py +13 -45
- wandb/apis/public/registries.py +573 -0
- wandb/apis/public/utils.py +36 -0
- wandb/bin/gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/cli.py +11 -20
- wandb/env.py +10 -0
- wandb/proto/v3/wandb_internal_pb2.py +243 -222
- wandb/proto/v3/wandb_server_pb2.py +4 -4
- wandb/proto/v3/wandb_settings_pb2.py +1 -1
- wandb/proto/v4/wandb_internal_pb2.py +226 -222
- wandb/proto/v4/wandb_server_pb2.py +4 -4
- wandb/proto/v4/wandb_settings_pb2.py +1 -1
- wandb/proto/v5/wandb_internal_pb2.py +226 -222
- wandb/proto/v5/wandb_server_pb2.py +4 -4
- wandb/proto/v5/wandb_settings_pb2.py +1 -1
- wandb/sdk/artifacts/_graphql_fragments.py +126 -0
- wandb/sdk/artifacts/artifact.py +43 -88
- wandb/sdk/backend/backend.py +1 -1
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +14 -6
- wandb/sdk/data_types/helper_types/image_mask.py +12 -6
- wandb/sdk/data_types/saved_model.py +35 -46
- wandb/sdk/data_types/video.py +7 -16
- wandb/sdk/interface/interface.py +26 -10
- wandb/sdk/interface/interface_queue.py +5 -8
- wandb/sdk/interface/interface_relay.py +1 -6
- wandb/sdk/interface/interface_shared.py +21 -99
- wandb/sdk/interface/interface_sock.py +2 -13
- wandb/sdk/interface/router.py +21 -15
- wandb/sdk/interface/router_queue.py +2 -1
- wandb/sdk/interface/router_relay.py +2 -1
- wandb/sdk/interface/router_sock.py +5 -4
- wandb/sdk/internal/handler.py +4 -3
- wandb/sdk/internal/internal_api.py +12 -1
- wandb/sdk/internal/sender.py +0 -18
- wandb/sdk/lib/apikey.py +87 -26
- wandb/sdk/lib/asyncio_compat.py +210 -0
- wandb/sdk/lib/progress.py +78 -16
- wandb/sdk/lib/service_connection.py +1 -1
- wandb/sdk/lib/sock_client.py +7 -7
- wandb/sdk/mailbox/__init__.py +23 -0
- wandb/sdk/mailbox/handles.py +199 -0
- wandb/sdk/mailbox/mailbox.py +121 -0
- wandb/sdk/mailbox/wait_with_progress.py +134 -0
- wandb/sdk/service/server_sock.py +5 -1
- wandb/sdk/service/streams.py +66 -74
- wandb/sdk/verify/verify.py +54 -2
- wandb/sdk/wandb_init.py +61 -61
- wandb/sdk/wandb_login.py +7 -4
- wandb/sdk/wandb_metadata.py +65 -34
- wandb/sdk/wandb_require.py +14 -8
- wandb/sdk/wandb_run.py +82 -87
- wandb/sdk/wandb_settings.py +3 -3
- wandb/sdk/wandb_setup.py +19 -8
- wandb/sdk/wandb_sync.py +2 -4
- wandb/util.py +3 -1
- {wandb-0.19.6.dist-info → wandb-0.19.7.dist-info}/METADATA +2 -2
- {wandb-0.19.6.dist-info → wandb-0.19.7.dist-info}/RECORD +71 -58
- wandb/sdk/lib/mailbox.py +0 -442
- {wandb-0.19.6.dist-info → wandb-0.19.7.dist-info}/WHEEL +0 -0
- {wandb-0.19.6.dist-info → wandb-0.19.7.dist-info}/entry_points.txt +0 -0
- {wandb-0.19.6.dist-info → wandb-0.19.7.dist-info}/licenses/LICENSE +0 -0
| @@ -17,7 +17,7 @@ from wandb.proto import wandb_internal_pb2 as wandb_dot_proto_dot_wandb__interna | |
| 17 17 | 
             
            from wandb.proto import wandb_settings_pb2 as wandb_dot_proto_dot_wandb__settings__pb2
         | 
| 18 18 |  | 
| 19 19 |  | 
| 20 | 
            -
            DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ewandb/proto/wandb_server.proto\x12\x0ewandb_internal\x1a\x1cwandb/proto/wandb_base.proto\x1a wandb/proto/wandb_internal.proto\x1a wandb/proto/wandb_settings.proto\"k\n\x19ServerAuthenticateRequest\x12\x0f\n\x07\x61pi_key\x18\x01 \x01(\t\x12\x10\n\x08\x62\x61se_url\x18\x02 \x01(\t\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"w\n\x1aServerAuthenticateResponse\x12\x16\n\x0e\x64\x65\x66\x61ult_entity\x18\x01 \x01(\t\x12\x14\n\x0c\x65rror_status\x18\x02 \x01(\t\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"D\n\x15ServerShutdownRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x18\n\x16ServerShutdownResponse\"B\n\x13ServerStatusRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x16\n\x14ServerStatusResponse\"r\n\x17ServerInformInitRequest\x12*\n\x08settings\x18\x01 \x01(\x0b\x32\x18.wandb_internal.Settings\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1a\n\x18ServerInformInitResponse\"s\n\x18ServerInformStartRequest\x12*\n\x08settings\x18\x01 \x01(\x0b\x32\x18.wandb_internal.Settings\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1b\n\x19ServerInformStartResponse\"H\n\x19ServerInformFinishRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1c\n\x1aServerInformFinishResponse\"H\n\x19ServerInformAttachRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"u\n\x1aServerInformAttachResponse\x12*\n\x08settings\x18\x01 \x01(\x0b\x32\x18.wandb_internal.Settings\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"H\n\x19ServerInformDetachRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1c\n\x1aServerInformDetachResponse\"]\n\x1bServerInformTeardownRequest\x12\x11\n\texit_code\x18\x01 \x01(\x05\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1e\n\x1cServerInformTeardownResponse\"\ | 
| 20 | 
            +
            DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ewandb/proto/wandb_server.proto\x12\x0ewandb_internal\x1a\x1cwandb/proto/wandb_base.proto\x1a wandb/proto/wandb_internal.proto\x1a wandb/proto/wandb_settings.proto\"k\n\x19ServerAuthenticateRequest\x12\x0f\n\x07\x61pi_key\x18\x01 \x01(\t\x12\x10\n\x08\x62\x61se_url\x18\x02 \x01(\t\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"w\n\x1aServerAuthenticateResponse\x12\x16\n\x0e\x64\x65\x66\x61ult_entity\x18\x01 \x01(\t\x12\x14\n\x0c\x65rror_status\x18\x02 \x01(\t\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"D\n\x15ServerShutdownRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x18\n\x16ServerShutdownResponse\"B\n\x13ServerStatusRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x16\n\x14ServerStatusResponse\"r\n\x17ServerInformInitRequest\x12*\n\x08settings\x18\x01 \x01(\x0b\x32\x18.wandb_internal.Settings\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1a\n\x18ServerInformInitResponse\"s\n\x18ServerInformStartRequest\x12*\n\x08settings\x18\x01 \x01(\x0b\x32\x18.wandb_internal.Settings\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1b\n\x19ServerInformStartResponse\"H\n\x19ServerInformFinishRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1c\n\x1aServerInformFinishResponse\"H\n\x19ServerInformAttachRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"u\n\x1aServerInformAttachResponse\x12*\n\x08settings\x18\x01 \x01(\x0b\x32\x18.wandb_internal.Settings\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"H\n\x19ServerInformDetachRequest\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1c\n\x1aServerInformDetachResponse\"]\n\x1bServerInformTeardownRequest\x12\x11\n\texit_code\x18\x01 \x01(\x05\x12+\n\x05_info\x18\xc8\x01 \x01(\x0b\x32\x1b.wandb_internal._RecordInfo\"\x1e\n\x1cServerInformTeardownResponse\"\xfb\x04\n\rServerRequest\x12\x12\n\nrequest_id\x18\n \x01(\t\x12\x30\n\x0erecord_publish\x18\x01 \x01(\x0b\x32\x16.wandb_internal.RecordH\x00\x12\x34\n\x12record_communicate\x18\x02 \x01(\x0b\x32\x16.wandb_internal.RecordH\x00\x12>\n\x0binform_init\x18\x03 \x01(\x0b\x32\'.wandb_internal.ServerInformInitRequestH\x00\x12\x42\n\rinform_finish\x18\x04 \x01(\x0b\x32).wandb_internal.ServerInformFinishRequestH\x00\x12\x42\n\rinform_attach\x18\x05 \x01(\x0b\x32).wandb_internal.ServerInformAttachRequestH\x00\x12\x42\n\rinform_detach\x18\x06 \x01(\x0b\x32).wandb_internal.ServerInformDetachRequestH\x00\x12\x46\n\x0finform_teardown\x18\x07 \x01(\x0b\x32+.wandb_internal.ServerInformTeardownRequestH\x00\x12@\n\x0cinform_start\x18\x08 \x01(\x0b\x32(.wandb_internal.ServerInformStartRequestH\x00\x12\x41\n\x0c\x61uthenticate\x18\t \x01(\x0b\x32).wandb_internal.ServerAuthenticateRequestH\x00\x42\x15\n\x13server_request_type\"\x91\x05\n\x0eServerResponse\x12\x12\n\nrequest_id\x18\n \x01(\t\x12\x34\n\x12result_communicate\x18\x02 \x01(\x0b\x32\x16.wandb_internal.ResultH\x00\x12H\n\x14inform_init_response\x18\x03 \x01(\x0b\x32(.wandb_internal.ServerInformInitResponseH\x00\x12L\n\x16inform_finish_response\x18\x04 \x01(\x0b\x32*.wandb_internal.ServerInformFinishResponseH\x00\x12L\n\x16inform_attach_response\x18\x05 \x01(\x0b\x32*.wandb_internal.ServerInformAttachResponseH\x00\x12L\n\x16inform_detach_response\x18\x06 \x01(\x0b\x32*.wandb_internal.ServerInformDetachResponseH\x00\x12P\n\x18inform_teardown_response\x18\x07 \x01(\x0b\x32,.wandb_internal.ServerInformTeardownResponseH\x00\x12J\n\x15inform_start_response\x18\x08 \x01(\x0b\x32).wandb_internal.ServerInformStartResponseH\x00\x12K\n\x15\x61uthenticate_response\x18\t \x01(\x0b\x32*.wandb_internal.ServerAuthenticateResponseH\x00\x42\x16\n\x14server_response_typeB\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
         | 
| 21 21 |  | 
| 22 22 | 
             
            _globals = globals()
         | 
| 23 23 | 
             
            _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
         | 
| @@ -62,7 +62,7 @@ if not _descriptor._USE_C_DESCRIPTORS: | |
| 62 62 | 
             
              _globals['_SERVERINFORMTEARDOWNRESPONSE']._serialized_start=1352
         | 
| 63 63 | 
             
              _globals['_SERVERINFORMTEARDOWNRESPONSE']._serialized_end=1382
         | 
| 64 64 | 
             
              _globals['_SERVERREQUEST']._serialized_start=1385
         | 
| 65 | 
            -
              _globals['_SERVERREQUEST']._serialized_end= | 
| 66 | 
            -
              _globals['_SERVERRESPONSE']._serialized_start= | 
| 67 | 
            -
              _globals['_SERVERRESPONSE']._serialized_end= | 
| 65 | 
            +
              _globals['_SERVERREQUEST']._serialized_end=2020
         | 
| 66 | 
            +
              _globals['_SERVERRESPONSE']._serialized_start=2023
         | 
| 67 | 
            +
              _globals['_SERVERRESPONSE']._serialized_end=2680
         | 
| 68 68 | 
             
            # @@protoc_insertion_point(module_scope)
         | 
| @@ -15,7 +15,7 @@ _sym_db = _symbol_database.Default() | |
| 15 15 | 
             
            from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
         | 
| 16 16 |  | 
| 17 17 |  | 
| 18 | 
            -
            DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x1d\n\x0cListIntValue\x12\r\n\x05value\x18\x01 \x03(\x05\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\xcfJ\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x14insecure_disable_ssl\x18\xb9\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06x_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bx_files_dir\x18\xb4\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x17x_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1fx_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x14x_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x17x_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12K\n$x_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n$x_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x43\n\x1dx_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1cx_file_stream_max_line_bytes\x18\xb2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12M\n&x_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12M\n&x_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1fx_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13x_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12G\n x_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n x_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x19x_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\tx_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12)\n\x03_os\x18  \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16x_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0ex_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x19x_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bx_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x12x_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12H\n\"x_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x15x_stats_dcgm_exporter\x18\xbb\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12O\n\x1ex_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12H\n\x1cx_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12S\n!x_stats_open_metrics_http_headers\x18\xb8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x16x_stats_gpu_device_ids\x18\xba\x01 \x01(\x0b\x32\x1c.wandb_internal.ListIntValue\x12.\n\x07x_label\x18\xb5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x18x_require_legacy_service\x18\xad\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_show_operation_stats\x18\xb0\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\tx_primary\x18\xb6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15x_update_finish_state\x18\xb7\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17\x61llow_offline_artifacts\x18\xb1\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x10sync_tensorboard\x18\xb3\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x11x_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16x_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10x_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15x_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17x_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18x_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0ex_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x18x_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x17x_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x30\n\x0bx_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10x_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12x_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13x_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0ex_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueJ\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rJ\x04\x08\x13\x10\x14J\x04\x08$\x10%J\x04\x08+\x10,J\x04\x08,\x10-J\x04\x08-\x10.J\x04\x08\x32\x10\x33J\x04\x08\x33\x10\x34J\x04\x08[\x10\\J\x04\x08^\x10_J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
         | 
| 18 | 
            +
            DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n wandb/proto/wandb_settings.proto\x12\x0ewandb_internal\x1a\x1egoogle/protobuf/wrappers.proto\" \n\x0fListStringValue\x12\r\n\x05value\x18\x01 \x03(\t\"\x1d\n\x0cListIntValue\x12\r\n\x05value\x18\x01 \x03(\x05\"\x8a\x01\n\x17MapStringKeyStringValue\x12\x41\n\x05value\x18\x01 \x03(\x0b\x32\x32.wandb_internal.MapStringKeyStringValue.ValueEntry\x1a,\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x01\n#MapStringKeyMapStringKeyStringValue\x12M\n\x05value\x18\x01 \x03(\x0b\x32>.wandb_internal.MapStringKeyMapStringKeyStringValue.ValueEntry\x1aU\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue:\x02\x38\x01\"\x9a\x01\n\x12OpenMetricsFilters\x12\x33\n\x08sequence\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValueH\x00\x12\x46\n\x07mapping\x18\x02 \x01(\x0b\x32\x33.wandb_internal.MapStringKeyMapStringKeyStringValueH\x00\x42\x07\n\x05value\"7\n\tRunMoment\x12\x0b\n\x03run\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x0e\n\x06metric\x18\x03 \x01(\t\"\xcfJ\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x14insecure_disable_ssl\x18\xb9\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06x_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\x0corganization\x18\xbc\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bx_files_dir\x18\xb4\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x17x_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1fx_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x14x_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x17x_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12K\n$x_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n$x_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x43\n\x1dx_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1cx_file_stream_max_line_bytes\x18\xb2\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x19x_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12M\n&x_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12M\n&x_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1fx_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13x_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12G\n x_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n x_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x19x_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\tx_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12)\n\x03_os\x18  \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cx_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16x_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0ex_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x16x_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12@\n\x19x_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bx_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x12x_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12H\n\"x_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x15x_stats_dcgm_exporter\x18\xbb\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12O\n\x1ex_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12H\n\x1cx_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12S\n!x_stats_open_metrics_http_headers\x18\xb8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12=\n\x16x_stats_gpu_device_ids\x18\xba\x01 \x01(\x0b\x32\x1c.wandb_internal.ListIntValue\x12.\n\x07x_label\x18\xb5\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12=\n\x18x_require_legacy_service\x18\xad\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\tx_primary\x18\xb6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15x_update_finish_state\x18\xb7\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17\x61llow_offline_artifacts\x18\xb1\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x10sync_tensorboard\x18\xb3\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0fx_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x11x_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16x_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10x_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15x_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17x_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12>\n\x18x_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0ex_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x18x_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12<\n\x17x_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x30\n\x0bx_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10x_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12x_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13x_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x13x_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0ex_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0ex_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueJ\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rJ\x04\x08\x13\x10\x14J\x04\x08$\x10%J\x04\x08+\x10,J\x04\x08,\x10-J\x04\x08-\x10.J\x04\x08\x32\x10\x33J\x04\x08\x33\x10\x34J\x04\x08[\x10\\J\x04\x08^\x10_J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01J\x06\x08\xb0\x01\x10\xb1\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
         | 
| 19 19 |  | 
| 20 20 | 
             
            _globals = globals()
         | 
| 21 21 | 
             
            _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
         | 
| @@ -0,0 +1,126 @@ | |
| 1 | 
            +
            from wandb.sdk.internal.internal_api import Api as InternalApi
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ARTIFACTS_TYPES_FRAGMENT = """
         | 
| 4 | 
            +
            fragment ArtifactTypesFragment on ArtifactTypeConnection {
         | 
| 5 | 
            +
                edges {
         | 
| 6 | 
            +
                     node {
         | 
| 7 | 
            +
                         id
         | 
| 8 | 
            +
                         name
         | 
| 9 | 
            +
                         description
         | 
| 10 | 
            +
                         createdAt
         | 
| 11 | 
            +
                     }
         | 
| 12 | 
            +
                     cursor
         | 
| 13 | 
            +
                }
         | 
| 14 | 
            +
                pageInfo {
         | 
| 15 | 
            +
                    endCursor
         | 
| 16 | 
            +
                    hasNextPage
         | 
| 17 | 
            +
                }
         | 
| 18 | 
            +
            }
         | 
| 19 | 
            +
            """
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ARTIFACT_FILES_FRAGMENT = """fragment ArtifactFilesFragment on Artifact {
         | 
| 22 | 
            +
                files(names: $fileNames, after: $fileCursor, first: $fileLimit) {
         | 
| 23 | 
            +
                    edges {
         | 
| 24 | 
            +
                        node {
         | 
| 25 | 
            +
                            id
         | 
| 26 | 
            +
                            name: displayName
         | 
| 27 | 
            +
                            url
         | 
| 28 | 
            +
                            sizeBytes
         | 
| 29 | 
            +
                            storagePath
         | 
| 30 | 
            +
                            mimetype
         | 
| 31 | 
            +
                            updatedAt
         | 
| 32 | 
            +
                            digest
         | 
| 33 | 
            +
                            md5
         | 
| 34 | 
            +
                            directUrl
         | 
| 35 | 
            +
                        }
         | 
| 36 | 
            +
                        cursor
         | 
| 37 | 
            +
                    }
         | 
| 38 | 
            +
                    pageInfo {
         | 
| 39 | 
            +
                        endCursor
         | 
| 40 | 
            +
                        hasNextPage
         | 
| 41 | 
            +
                    }
         | 
| 42 | 
            +
                }
         | 
| 43 | 
            +
            }"""
         | 
| 44 | 
            +
             | 
| 45 | 
            +
             | 
| 46 | 
            +
            def _gql_artifact_fragment(include_aliases: bool = True) -> str:
         | 
| 47 | 
            +
                """Return a GraphQL query fragment with all parseable Artifact attributes."""
         | 
| 48 | 
            +
                allowed_fields = set(InternalApi().server_artifact_introspection())
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                supports_ttl = "ttlIsInherited" in allowed_fields
         | 
| 51 | 
            +
                supports_tags = "tags" in allowed_fields
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                ttl_duration_seconds = "ttlDurationSeconds" if supports_ttl else ""
         | 
| 54 | 
            +
                ttl_is_inherited = "ttlIsInherited" if supports_ttl else ""
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                tags = "tags {name}" if supports_tags else ""
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                # The goal is to move all artifact aliases fetches to the membership level in the future
         | 
| 59 | 
            +
                # but this is a quick fix to unblock the registry work
         | 
| 60 | 
            +
                aliases = (
         | 
| 61 | 
            +
                    """aliases {
         | 
| 62 | 
            +
                            artifactCollection {
         | 
| 63 | 
            +
                                project {
         | 
| 64 | 
            +
                                    entityName
         | 
| 65 | 
            +
                                    name
         | 
| 66 | 
            +
                                }
         | 
| 67 | 
            +
                                name
         | 
| 68 | 
            +
                            }
         | 
| 69 | 
            +
                            alias
         | 
| 70 | 
            +
                        }"""
         | 
| 71 | 
            +
                    if include_aliases
         | 
| 72 | 
            +
                    else ""
         | 
| 73 | 
            +
                )
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                return f"""
         | 
| 76 | 
            +
                    fragment ArtifactFragment on Artifact {{
         | 
| 77 | 
            +
                        id
         | 
| 78 | 
            +
                        artifactSequence {{
         | 
| 79 | 
            +
                            project {{
         | 
| 80 | 
            +
                                entityName
         | 
| 81 | 
            +
                                name
         | 
| 82 | 
            +
                            }}
         | 
| 83 | 
            +
                            name
         | 
| 84 | 
            +
                        }}
         | 
| 85 | 
            +
                        versionIndex
         | 
| 86 | 
            +
                        artifactType {{
         | 
| 87 | 
            +
                            name
         | 
| 88 | 
            +
                        }}
         | 
| 89 | 
            +
                        description
         | 
| 90 | 
            +
                        metadata
         | 
| 91 | 
            +
                        {ttl_duration_seconds}
         | 
| 92 | 
            +
                        {ttl_is_inherited}
         | 
| 93 | 
            +
                        {aliases}
         | 
| 94 | 
            +
                        {tags}
         | 
| 95 | 
            +
                        state
         | 
| 96 | 
            +
                        currentManifest {{
         | 
| 97 | 
            +
                            file {{
         | 
| 98 | 
            +
                                directUrl
         | 
| 99 | 
            +
                            }}
         | 
| 100 | 
            +
                        }}
         | 
| 101 | 
            +
                        commitHash
         | 
| 102 | 
            +
                        fileCount
         | 
| 103 | 
            +
                        createdAt
         | 
| 104 | 
            +
                        updatedAt
         | 
| 105 | 
            +
                    }}
         | 
| 106 | 
            +
                """
         | 
| 107 | 
            +
             | 
| 108 | 
            +
             | 
| 109 | 
            +
            def _gql_registry_fragment() -> str:
         | 
| 110 | 
            +
                return """
         | 
| 111 | 
            +
                    fragment RegistryFragment on Project {
         | 
| 112 | 
            +
                       id
         | 
| 113 | 
            +
                        allowAllArtifactTypesInRegistry
         | 
| 114 | 
            +
                        artifactTypes(includeAll: true) {
         | 
| 115 | 
            +
                            edges {
         | 
| 116 | 
            +
                                node {
         | 
| 117 | 
            +
                                    name
         | 
| 118 | 
            +
                                }
         | 
| 119 | 
            +
                            }
         | 
| 120 | 
            +
                        }
         | 
| 121 | 
            +
                        name
         | 
| 122 | 
            +
                        description
         | 
| 123 | 
            +
                        createdAt
         | 
| 124 | 
            +
                        updatedAt
         | 
| 125 | 
            +
                    }
         | 
| 126 | 
            +
                """
         | 
    
        wandb/sdk/artifacts/artifact.py
    CHANGED
    
    | @@ -21,11 +21,11 @@ from functools import partial | |
| 21 21 | 
             
            from pathlib import PurePosixPath
         | 
| 22 22 | 
             
            from typing import (
         | 
| 23 23 | 
             
                IO,
         | 
| 24 | 
            -
                TYPE_CHECKING,
         | 
| 25 24 | 
             
                Any,
         | 
| 26 25 | 
             
                Dict,
         | 
| 27 26 | 
             
                Iterator,
         | 
| 28 27 | 
             
                Literal,
         | 
| 28 | 
            +
                Optional,
         | 
| 29 29 | 
             
                Sequence,
         | 
| 30 30 | 
             
                Type,
         | 
| 31 31 | 
             
                cast,
         | 
| @@ -41,6 +41,7 @@ from wandb.apis.normalize import normalize_exceptions | |
| 41 41 | 
             
            from wandb.apis.public import ArtifactCollection, ArtifactFiles, RetryingClient, Run
         | 
| 42 42 | 
             
            from wandb.data_types import WBValue
         | 
| 43 43 | 
             
            from wandb.errors.term import termerror, termlog, termwarn
         | 
| 44 | 
            +
            from wandb.sdk.artifacts._graphql_fragments import _gql_artifact_fragment
         | 
| 44 45 | 
             
            from wandb.sdk.artifacts._validators import (
         | 
| 45 46 | 
             
                ensure_logged,
         | 
| 46 47 | 
             
                ensure_not_finalized,
         | 
| @@ -70,9 +71,9 @@ from wandb.sdk.internal.thread_local_settings import _thread_local_api_settings | |
| 70 71 | 
             
            from wandb.sdk.lib import filesystem, retry, runid, telemetry
         | 
| 71 72 | 
             
            from wandb.sdk.lib.deprecate import Deprecated, deprecate
         | 
| 72 73 | 
             
            from wandb.sdk.lib.hashutil import B64MD5, b64_to_hex_id, md5_file_b64
         | 
| 73 | 
            -
            from wandb.sdk.lib.mailbox import Mailbox
         | 
| 74 74 | 
             
            from wandb.sdk.lib.paths import FilePathStr, LogicalPath, StrPath, URIStr
         | 
| 75 75 | 
             
            from wandb.sdk.lib.runid import generate_id
         | 
| 76 | 
            +
            from wandb.sdk.mailbox import Mailbox, MailboxHandle
         | 
| 76 77 |  | 
| 77 78 | 
             
            reset_path = util.vendor_setup()
         | 
| 78 79 |  | 
| @@ -82,9 +83,6 @@ reset_path() | |
| 82 83 |  | 
| 83 84 | 
             
            logger = logging.getLogger(__name__)
         | 
| 84 85 |  | 
| 85 | 
            -
            if TYPE_CHECKING:
         | 
| 86 | 
            -
                from wandb.sdk.interface.message_future import MessageFuture
         | 
| 87 | 
            -
             | 
| 88 86 |  | 
| 89 87 | 
             
            @final
         | 
| 90 88 | 
             
            @dataclass
         | 
| @@ -160,7 +158,7 @@ class Artifact: | |
| 160 158 | 
             
                    self._tmp_dir: tempfile.TemporaryDirectory | None = None
         | 
| 161 159 | 
             
                    self._added_objs: dict[int, tuple[WBValue, ArtifactManifestEntry]] = {}
         | 
| 162 160 | 
             
                    self._added_local_paths: dict[str, ArtifactManifestEntry] = {}
         | 
| 163 | 
            -
                    self. | 
| 161 | 
            +
                    self._save_handle: MailboxHandle | None = None
         | 
| 164 162 | 
             
                    self._download_roots: set[str] = set()
         | 
| 165 163 | 
             
                    # Set by new_draft(), otherwise the latest artifact will be used as the base.
         | 
| 166 164 | 
             
                    self._base_id: str | None = None
         | 
| @@ -300,6 +298,7 @@ class Artifact: | |
| 300 298 | 
             
                    name: str,
         | 
| 301 299 | 
             
                    attrs: dict[str, Any],
         | 
| 302 300 | 
             
                    client: RetryingClient,
         | 
| 301 | 
            +
                    aliases: Optional[list[str]] = None,
         | 
| 303 302 | 
             
                ) -> Artifact:
         | 
| 304 303 | 
             
                    # Placeholder is required to skip validation.
         | 
| 305 304 | 
             
                    artifact = cls("placeholder", type="placeholder")
         | 
| @@ -307,7 +306,7 @@ class Artifact: | |
| 307 306 | 
             
                    artifact._entity = entity
         | 
| 308 307 | 
             
                    artifact._project = project
         | 
| 309 308 | 
             
                    artifact._name = name
         | 
| 310 | 
            -
                    artifact._assign_attrs(attrs)
         | 
| 309 | 
            +
                    artifact._assign_attrs(attrs, aliases)
         | 
| 311 310 |  | 
| 312 311 | 
             
                    artifact.finalize()
         | 
| 313 312 |  | 
| @@ -316,7 +315,9 @@ class Artifact: | |
| 316 315 | 
             
                    artifact_instance_cache[artifact.id] = artifact
         | 
| 317 316 | 
             
                    return artifact
         | 
| 318 317 |  | 
| 319 | 
            -
                def _assign_attrs( | 
| 318 | 
            +
                def _assign_attrs(
         | 
| 319 | 
            +
                    self, attrs: dict[str, Any], aliases: Optional[list[str]] = None
         | 
| 320 | 
            +
                ) -> None:
         | 
| 320 321 | 
             
                    """Update this Artifact's attributes using the server response."""
         | 
| 321 322 | 
             
                    self._id = attrs["id"]
         | 
| 322 323 |  | 
| @@ -343,21 +344,30 @@ class Artifact: | |
| 343 344 | 
             
                    entity = self._entity
         | 
| 344 345 | 
             
                    project = self._project
         | 
| 345 346 | 
             
                    collection, *_ = self._name.split(":")
         | 
| 346 | 
            -
             | 
| 347 | 
            -
             | 
| 348 | 
            -
             | 
| 349 | 
            -
             | 
| 350 | 
            -
             | 
| 351 | 
            -
                         | 
| 352 | 
            -
             | 
| 353 | 
            -
                         | 
| 354 | 
            -
             | 
| 347 | 
            +
             | 
| 348 | 
            +
                    processed_aliases = []
         | 
| 349 | 
            +
                    # The future of aliases is to move all alias fetches to the membership level
         | 
| 350 | 
            +
                    # so we don't have to do the collection fetches below
         | 
| 351 | 
            +
                    if aliases:
         | 
| 352 | 
            +
                        processed_aliases = aliases
         | 
| 353 | 
            +
                    else:
         | 
| 354 | 
            +
                        processed_aliases = [
         | 
| 355 | 
            +
                            obj["alias"]
         | 
| 356 | 
            +
                            for obj in attrs["aliases"]
         | 
| 357 | 
            +
                            if obj["artifactCollection"]
         | 
| 358 | 
            +
                            and obj["artifactCollection"]["project"]
         | 
| 359 | 
            +
                            and obj["artifactCollection"]["project"]["entityName"] == entity
         | 
| 360 | 
            +
                            and obj["artifactCollection"]["project"]["name"] == project
         | 
| 361 | 
            +
                            and obj["artifactCollection"]["name"] == collection
         | 
| 362 | 
            +
                        ]
         | 
| 355 363 |  | 
| 356 364 | 
             
                    version_aliases = [
         | 
| 357 | 
            -
                        alias for alias in  | 
| 365 | 
            +
                        alias for alias in processed_aliases if util.alias_is_version_index(alias)
         | 
| 358 366 | 
             
                    ]
         | 
| 359 367 | 
             
                    other_aliases = [
         | 
| 360 | 
            -
                        alias | 
| 368 | 
            +
                        alias
         | 
| 369 | 
            +
                        for alias in processed_aliases
         | 
| 370 | 
            +
                        if not util.alias_is_version_index(alias)
         | 
| 361 371 | 
             
                    ]
         | 
| 362 372 | 
             
                    if version_aliases:
         | 
| 363 373 | 
             
                        try:
         | 
| @@ -901,7 +911,7 @@ class Artifact: | |
| 901 911 | 
             
                    return self._state == ArtifactState.PENDING
         | 
| 902 912 |  | 
| 903 913 | 
             
                def _is_draft_save_started(self) -> bool:
         | 
| 904 | 
            -
                    return self. | 
| 914 | 
            +
                    return self._save_handle is not None
         | 
| 905 915 |  | 
| 906 916 | 
             
                def save(
         | 
| 907 917 | 
             
                    self,
         | 
| @@ -944,10 +954,12 @@ class Artifact: | |
| 944 954 | 
             
                    else:
         | 
| 945 955 | 
             
                        wandb.run.log_artifact(self)
         | 
| 946 956 |  | 
| 947 | 
            -
                def  | 
| 948 | 
            -
                    self, | 
| 957 | 
            +
                def _set_save_handle(
         | 
| 958 | 
            +
                    self,
         | 
| 959 | 
            +
                    save_handle: MailboxHandle,
         | 
| 960 | 
            +
                    client: RetryingClient,
         | 
| 949 961 | 
             
                ) -> None:
         | 
| 950 | 
            -
                    self. | 
| 962 | 
            +
                    self._save_handle = save_handle
         | 
| 951 963 | 
             
                    self._client = client
         | 
| 952 964 |  | 
| 953 965 | 
             
                def wait(self, timeout: int | None = None) -> Artifact:
         | 
| @@ -960,13 +972,16 @@ class Artifact: | |
| 960 972 | 
             
                        An `Artifact` object.
         | 
| 961 973 | 
             
                    """
         | 
| 962 974 | 
             
                    if self.is_draft():
         | 
| 963 | 
            -
                        if self. | 
| 975 | 
            +
                        if self._save_handle is None:
         | 
| 964 976 | 
             
                            raise ArtifactNotLoggedError(type(self).wait.__qualname__, self)
         | 
| 965 | 
            -
             | 
| 966 | 
            -
                         | 
| 977 | 
            +
             | 
| 978 | 
            +
                        try:
         | 
| 979 | 
            +
                            result = self._save_handle.wait_or(timeout=timeout)
         | 
| 980 | 
            +
                        except TimeoutError as e:
         | 
| 967 981 | 
             
                            raise WaitTimeoutError(
         | 
| 968 982 | 
             
                                "Artifact upload wait timed out, failed to fetch Artifact response"
         | 
| 969 | 
            -
                            )
         | 
| 983 | 
            +
                            ) from e
         | 
| 984 | 
            +
             | 
| 970 985 | 
             
                        response = result.response.log_artifact_response
         | 
| 971 986 | 
             
                        if response.error_message:
         | 
| 972 987 | 
             
                            raise ValueError(response.error_message)
         | 
| @@ -1823,8 +1838,6 @@ class Artifact: | |
| 1823 1838 |  | 
| 1824 1839 | 
             
                        assert backend.interface
         | 
| 1825 1840 | 
             
                        backend.interface._stream_id = stream_id  # type: ignore
         | 
| 1826 | 
            -
             | 
| 1827 | 
            -
                        mailbox.enable_keepalive()
         | 
| 1828 1841 | 
             
                    else:
         | 
| 1829 1842 | 
             
                        assert wandb.run._backend
         | 
| 1830 1843 | 
             
                        backend = wandb.run._backend
         | 
| @@ -1844,11 +1857,8 @@ class Artifact: | |
| 1844 1857 | 
             
                        skip_cache=skip_cache,
         | 
| 1845 1858 | 
             
                        path_prefix=path_prefix,
         | 
| 1846 1859 | 
             
                    )
         | 
| 1847 | 
            -
                    result = handle. | 
| 1860 | 
            +
                    result = handle.wait_or(timeout=None)
         | 
| 1848 1861 |  | 
| 1849 | 
            -
                    if result is None:
         | 
| 1850 | 
            -
                        handle.abandon()
         | 
| 1851 | 
            -
                    assert result is not None
         | 
| 1852 1862 | 
             
                    response = result.response.download_artifact_response
         | 
| 1853 1863 | 
             
                    if response.error_message:
         | 
| 1854 1864 | 
             
                        raise ValueError(f"Error downloading artifact: {response.error_message}")
         | 
| @@ -2407,61 +2417,6 @@ def _ttl_duration_seconds_from_gql(gql_ttl_duration_seconds: int | None) -> int | |
| 2407 2417 | 
             
                return None
         | 
| 2408 2418 |  | 
| 2409 2419 |  | 
| 2410 | 
            -
            def _gql_artifact_fragment() -> str:
         | 
| 2411 | 
            -
                """Return a GraphQL query fragment with all parseable Artifact attributes."""
         | 
| 2412 | 
            -
                allowed_fields = set(InternalApi().server_artifact_introspection())
         | 
| 2413 | 
            -
             | 
| 2414 | 
            -
                supports_ttl = "ttlIsInherited" in allowed_fields
         | 
| 2415 | 
            -
                supports_tags = "tags" in allowed_fields
         | 
| 2416 | 
            -
             | 
| 2417 | 
            -
                ttl_duration_seconds = "ttlDurationSeconds" if supports_ttl else ""
         | 
| 2418 | 
            -
                ttl_is_inherited = "ttlIsInherited" if supports_ttl else ""
         | 
| 2419 | 
            -
             | 
| 2420 | 
            -
                tags = "tags {name}" if supports_tags else ""
         | 
| 2421 | 
            -
             | 
| 2422 | 
            -
                return f"""
         | 
| 2423 | 
            -
                    fragment ArtifactFragment on Artifact {{
         | 
| 2424 | 
            -
                        id
         | 
| 2425 | 
            -
                        artifactSequence {{
         | 
| 2426 | 
            -
                            project {{
         | 
| 2427 | 
            -
                                entityName
         | 
| 2428 | 
            -
                                name
         | 
| 2429 | 
            -
                            }}
         | 
| 2430 | 
            -
                            name
         | 
| 2431 | 
            -
                        }}
         | 
| 2432 | 
            -
                        versionIndex
         | 
| 2433 | 
            -
                        artifactType {{
         | 
| 2434 | 
            -
                            name
         | 
| 2435 | 
            -
                        }}
         | 
| 2436 | 
            -
                        description
         | 
| 2437 | 
            -
                        metadata
         | 
| 2438 | 
            -
                        {ttl_duration_seconds}
         | 
| 2439 | 
            -
                        {ttl_is_inherited}
         | 
| 2440 | 
            -
                        aliases {{
         | 
| 2441 | 
            -
                            artifactCollection {{
         | 
| 2442 | 
            -
                                project {{
         | 
| 2443 | 
            -
                                    entityName
         | 
| 2444 | 
            -
                                    name
         | 
| 2445 | 
            -
                                }}
         | 
| 2446 | 
            -
                                name
         | 
| 2447 | 
            -
                            }}
         | 
| 2448 | 
            -
                            alias
         | 
| 2449 | 
            -
                        }}
         | 
| 2450 | 
            -
                        {tags}
         | 
| 2451 | 
            -
                        state
         | 
| 2452 | 
            -
                        currentManifest {{
         | 
| 2453 | 
            -
                            file {{
         | 
| 2454 | 
            -
                                directUrl
         | 
| 2455 | 
            -
                            }}
         | 
| 2456 | 
            -
                        }}
         | 
| 2457 | 
            -
                        commitHash
         | 
| 2458 | 
            -
                        fileCount
         | 
| 2459 | 
            -
                        createdAt
         | 
| 2460 | 
            -
                        updatedAt
         | 
| 2461 | 
            -
                    }}
         | 
| 2462 | 
            -
                """
         | 
| 2463 | 
            -
             | 
| 2464 | 
            -
             | 
| 2465 2420 | 
             
            class _ArtifactVersionType(WBType):
         | 
| 2466 2421 | 
             
                name = "artifactVersion"
         | 
| 2467 2422 | 
             
                types = [Artifact]
         | 
    
        wandb/sdk/backend/backend.py
    CHANGED
    
    | @@ -18,7 +18,7 @@ from wandb.sdk.interface.interface import InterfaceBase | |
| 18 18 | 
             
            from wandb.sdk.interface.interface_queue import InterfaceQueue
         | 
| 19 19 | 
             
            from wandb.sdk.internal.internal import wandb_internal
         | 
| 20 20 | 
             
            from wandb.sdk.internal.settings_static import SettingsStatic
         | 
| 21 | 
            -
            from wandb.sdk. | 
| 21 | 
            +
            from wandb.sdk.mailbox import Mailbox
         | 
| 22 22 | 
             
            from wandb.sdk.wandb_settings import Settings
         | 
| 23 23 |  | 
| 24 24 | 
             
            if TYPE_CHECKING:
         | 
| @@ -53,7 +53,7 @@ class BoundingBoxes2D(JSONMetadata): | |
| 53 53 | 
             
                    import numpy as np
         | 
| 54 54 | 
             
                    import wandb
         | 
| 55 55 |  | 
| 56 | 
            -
                    wandb.init()
         | 
| 56 | 
            +
                    run = wandb.init()
         | 
| 57 57 | 
             
                    image = np.random.randint(low=0, high=256, size=(200, 300, 3))
         | 
| 58 58 |  | 
| 59 59 | 
             
                    class_labels = {0: "person", 1: "car", 2: "road", 3: "building"}
         | 
| @@ -77,7 +77,11 @@ class BoundingBoxes2D(JSONMetadata): | |
| 77 77 | 
             
                                    },
         | 
| 78 78 | 
             
                                    {
         | 
| 79 79 | 
             
                                        # another box expressed in the pixel domain
         | 
| 80 | 
            -
                                        "position": { | 
| 80 | 
            +
                                        "position": {
         | 
| 81 | 
            +
                                            "middle": [150, 20],
         | 
| 82 | 
            +
                                            "width": 68,
         | 
| 83 | 
            +
                                            "height": 112,
         | 
| 84 | 
            +
                                        },
         | 
| 81 85 | 
             
                                        "domain": "pixel",
         | 
| 82 86 | 
             
                                        "class_id": 3,
         | 
| 83 87 | 
             
                                        "box_caption": "a building",
         | 
| @@ -90,7 +94,7 @@ class BoundingBoxes2D(JSONMetadata): | |
| 90 94 | 
             
                        },
         | 
| 91 95 | 
             
                    )
         | 
| 92 96 |  | 
| 93 | 
            -
                     | 
| 97 | 
            +
                    run.log({"driving_scene": img})
         | 
| 94 98 | 
             
                    ```
         | 
| 95 99 |  | 
| 96 100 | 
             
                    ### Log a bounding box overlay to a Table
         | 
| @@ -99,7 +103,7 @@ class BoundingBoxes2D(JSONMetadata): | |
| 99 103 | 
             
                    import numpy as np
         | 
| 100 104 | 
             
                    import wandb
         | 
| 101 105 |  | 
| 102 | 
            -
                    wandb.init()
         | 
| 106 | 
            +
                    run = wandb.init()
         | 
| 103 107 | 
             
                    image = np.random.randint(low=0, high=256, size=(200, 300, 3))
         | 
| 104 108 |  | 
| 105 109 | 
             
                    class_labels = {0: "person", 1: "car", 2: "road", 3: "building"}
         | 
| @@ -132,7 +136,11 @@ class BoundingBoxes2D(JSONMetadata): | |
| 132 136 | 
             
                                    },
         | 
| 133 137 | 
             
                                    {
         | 
| 134 138 | 
             
                                        # another box expressed in the pixel domain
         | 
| 135 | 
            -
                                        "position": { | 
| 139 | 
            +
                                        "position": {
         | 
| 140 | 
            +
                                            "middle": [150, 20],
         | 
| 141 | 
            +
                                            "width": 68,
         | 
| 142 | 
            +
                                            "height": 112,
         | 
| 143 | 
            +
                                        },
         | 
| 136 144 | 
             
                                        "domain": "pixel",
         | 
| 137 145 | 
             
                                        "class_id": 3,
         | 
| 138 146 | 
             
                                        "box_caption": "a building",
         | 
| @@ -148,7 +156,7 @@ class BoundingBoxes2D(JSONMetadata): | |
| 148 156 |  | 
| 149 157 | 
             
                    table = wandb.Table(columns=["image"])
         | 
| 150 158 | 
             
                    table.add_data(img)
         | 
| 151 | 
            -
                     | 
| 159 | 
            +
                    run.log({"driving_scene": table})
         | 
| 152 160 | 
             
                    ```
         | 
| 153 161 | 
             
                """
         | 
| 154 162 |  | 
| @@ -38,7 +38,7 @@ class ImageMask(Media): | |
| 38 38 | 
             
                    import numpy as np
         | 
| 39 39 | 
             
                    import wandb
         | 
| 40 40 |  | 
| 41 | 
            -
                    wandb.init()
         | 
| 41 | 
            +
                    run = wandb.init()
         | 
| 42 42 | 
             
                    image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8)
         | 
| 43 43 | 
             
                    predicted_mask = np.empty((100, 100), dtype=np.uint8)
         | 
| 44 44 | 
             
                    ground_truth_mask = np.empty((100, 100), dtype=np.uint8)
         | 
| @@ -58,14 +58,17 @@ class ImageMask(Media): | |
| 58 58 | 
             
                    masked_image = wandb.Image(
         | 
| 59 59 | 
             
                        image,
         | 
| 60 60 | 
             
                        masks={
         | 
| 61 | 
            -
                            "predictions": { | 
| 61 | 
            +
                            "predictions": {
         | 
| 62 | 
            +
                                "mask_data": predicted_mask,
         | 
| 63 | 
            +
                                "class_labels": class_labels,
         | 
| 64 | 
            +
                            },
         | 
| 62 65 | 
             
                            "ground_truth": {
         | 
| 63 66 | 
             
                                "mask_data": ground_truth_mask,
         | 
| 64 67 | 
             
                                "class_labels": class_labels,
         | 
| 65 68 | 
             
                            },
         | 
| 66 69 | 
             
                        },
         | 
| 67 70 | 
             
                    )
         | 
| 68 | 
            -
                     | 
| 71 | 
            +
                    run.log({"img_with_masks": masked_image})
         | 
| 69 72 | 
             
                    ```
         | 
| 70 73 |  | 
| 71 74 | 
             
                    ### Log a masked image inside a Table
         | 
| @@ -74,7 +77,7 @@ class ImageMask(Media): | |
| 74 77 | 
             
                    import numpy as np
         | 
| 75 78 | 
             
                    import wandb
         | 
| 76 79 |  | 
| 77 | 
            -
                    wandb.init()
         | 
| 80 | 
            +
                    run = wandb.init()
         | 
| 78 81 | 
             
                    image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8)
         | 
| 79 82 | 
             
                    predicted_mask = np.empty((100, 100), dtype=np.uint8)
         | 
| 80 83 | 
             
                    ground_truth_mask = np.empty((100, 100), dtype=np.uint8)
         | 
| @@ -103,7 +106,10 @@ class ImageMask(Media): | |
| 103 106 | 
             
                    masked_image = wandb.Image(
         | 
| 104 107 | 
             
                        image,
         | 
| 105 108 | 
             
                        masks={
         | 
| 106 | 
            -
                            "predictions": { | 
| 109 | 
            +
                            "predictions": {
         | 
| 110 | 
            +
                                "mask_data": predicted_mask,
         | 
| 111 | 
            +
                                "class_labels": class_labels,
         | 
| 112 | 
            +
                            },
         | 
| 107 113 | 
             
                            "ground_truth": {
         | 
| 108 114 | 
             
                                "mask_data": ground_truth_mask,
         | 
| 109 115 | 
             
                                "class_labels": class_labels,
         | 
| @@ -114,7 +120,7 @@ class ImageMask(Media): | |
| 114 120 |  | 
| 115 121 | 
             
                    table = wandb.Table(columns=["image"])
         | 
| 116 122 | 
             
                    table.add_data(masked_image)
         | 
| 117 | 
            -
                     | 
| 123 | 
            +
                    run.log({"random_field": table})
         | 
| 118 124 | 
             
                    ```
         | 
| 119 125 | 
             
                """
         | 
| 120 126 |  |