wandb 0.18.3__py3-none-win32.whl → 0.18.4__py3-none-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wandb/__init__.py +16 -7
- wandb/__init__.pyi +96 -63
- wandb/analytics/sentry.py +91 -88
- wandb/apis/public/api.py +18 -4
- wandb/apis/public/runs.py +53 -2
- wandb/bin/gpu_stats.exe +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/beta.py +178 -0
- wandb/cli/cli.py +5 -171
- wandb/data_types.py +3 -0
- wandb/env.py +74 -73
- wandb/errors/term.py +300 -43
- wandb/proto/v3/wandb_internal_pb2.py +263 -223
- wandb/proto/v3/wandb_server_pb2.py +57 -37
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_internal_pb2.py +226 -218
- wandb/proto/v4/wandb_server_pb2.py +41 -37
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/proto/v5/wandb_internal_pb2.py +226 -218
- wandb/proto/v5/wandb_server_pb2.py +41 -37
- wandb/proto/v5/wandb_settings_pb2.py +2 -2
- wandb/sdk/__init__.py +3 -3
- wandb/sdk/artifacts/_validators.py +41 -8
- wandb/sdk/artifacts/artifact.py +32 -1
- wandb/sdk/artifacts/artifact_file_cache.py +1 -2
- wandb/sdk/data_types/_dtypes.py +7 -3
- wandb/sdk/data_types/video.py +15 -6
- wandb/sdk/interface/interface.py +2 -0
- wandb/sdk/internal/internal_api.py +122 -5
- wandb/sdk/internal/sender.py +16 -3
- wandb/sdk/launch/inputs/internal.py +1 -1
- wandb/sdk/lib/module.py +12 -0
- wandb/sdk/lib/printer.py +291 -105
- wandb/sdk/lib/progress.py +274 -0
- wandb/sdk/service/streams.py +21 -11
- wandb/sdk/wandb_init.py +58 -54
- wandb/sdk/wandb_run.py +380 -454
- wandb/sdk/wandb_settings.py +2 -0
- wandb/sdk/wandb_watch.py +17 -11
- wandb/util.py +6 -2
- {wandb-0.18.3.dist-info → wandb-0.18.4.dist-info}/METADATA +4 -3
- {wandb-0.18.3.dist-info → wandb-0.18.4.dist-info}/RECORD +45 -43
- wandb/bin/nvidia_gpu_stats.exe +0 -0
- {wandb-0.18.3.dist-info → wandb-0.18.4.dist-info}/WHEEL +0 -0
- {wandb-0.18.3.dist-info → wandb-0.18.4.dist-info}/entry_points.txt +0 -0
- {wandb-0.18.3.dist-info → wandb-0.18.4.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\"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\"\xe7\x04\n\rServerRequest\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\"\xfd\x04\n\x0eServerResponse\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)
         | 
| @@ -25,40 +25,44 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'wandb.proto.wandb_server_pb | |
| 25 25 | 
             
            if not _descriptor._USE_C_DESCRIPTORS:
         | 
| 26 26 | 
             
              _globals['DESCRIPTOR']._loaded_options = None
         | 
| 27 27 | 
             
              _globals['DESCRIPTOR']._serialized_options = b'Z\031core/pkg/service_go_proto'
         | 
| 28 | 
            -
              _globals[' | 
| 29 | 
            -
              _globals[' | 
| 30 | 
            -
              _globals[' | 
| 31 | 
            -
              _globals[' | 
| 32 | 
            -
              _globals[' | 
| 33 | 
            -
              _globals[' | 
| 34 | 
            -
              _globals[' | 
| 35 | 
            -
              _globals[' | 
| 36 | 
            -
              _globals[' | 
| 37 | 
            -
              _globals[' | 
| 38 | 
            -
              _globals[' | 
| 39 | 
            -
              _globals[' | 
| 40 | 
            -
              _globals[' | 
| 41 | 
            -
              _globals[' | 
| 42 | 
            -
              _globals[' | 
| 43 | 
            -
              _globals[' | 
| 44 | 
            -
              _globals[' | 
| 45 | 
            -
              _globals[' | 
| 46 | 
            -
              _globals[' | 
| 47 | 
            -
              _globals[' | 
| 48 | 
            -
              _globals[' | 
| 49 | 
            -
              _globals[' | 
| 50 | 
            -
              _globals[' | 
| 51 | 
            -
              _globals[' | 
| 52 | 
            -
              _globals[' | 
| 53 | 
            -
              _globals[' | 
| 54 | 
            -
              _globals[' | 
| 55 | 
            -
              _globals[' | 
| 56 | 
            -
              _globals[' | 
| 57 | 
            -
              _globals[' | 
| 58 | 
            -
              _globals[' | 
| 59 | 
            -
              _globals[' | 
| 60 | 
            -
              _globals[' | 
| 61 | 
            -
              _globals[' | 
| 62 | 
            -
              _globals[' | 
| 63 | 
            -
              _globals[' | 
| 28 | 
            +
              _globals['_SERVERAUTHENTICATEREQUEST']._serialized_start=148
         | 
| 29 | 
            +
              _globals['_SERVERAUTHENTICATEREQUEST']._serialized_end=255
         | 
| 30 | 
            +
              _globals['_SERVERAUTHENTICATERESPONSE']._serialized_start=257
         | 
| 31 | 
            +
              _globals['_SERVERAUTHENTICATERESPONSE']._serialized_end=376
         | 
| 32 | 
            +
              _globals['_SERVERSHUTDOWNREQUEST']._serialized_start=378
         | 
| 33 | 
            +
              _globals['_SERVERSHUTDOWNREQUEST']._serialized_end=446
         | 
| 34 | 
            +
              _globals['_SERVERSHUTDOWNRESPONSE']._serialized_start=448
         | 
| 35 | 
            +
              _globals['_SERVERSHUTDOWNRESPONSE']._serialized_end=472
         | 
| 36 | 
            +
              _globals['_SERVERSTATUSREQUEST']._serialized_start=474
         | 
| 37 | 
            +
              _globals['_SERVERSTATUSREQUEST']._serialized_end=540
         | 
| 38 | 
            +
              _globals['_SERVERSTATUSRESPONSE']._serialized_start=542
         | 
| 39 | 
            +
              _globals['_SERVERSTATUSRESPONSE']._serialized_end=564
         | 
| 40 | 
            +
              _globals['_SERVERINFORMINITREQUEST']._serialized_start=566
         | 
| 41 | 
            +
              _globals['_SERVERINFORMINITREQUEST']._serialized_end=680
         | 
| 42 | 
            +
              _globals['_SERVERINFORMINITRESPONSE']._serialized_start=682
         | 
| 43 | 
            +
              _globals['_SERVERINFORMINITRESPONSE']._serialized_end=708
         | 
| 44 | 
            +
              _globals['_SERVERINFORMSTARTREQUEST']._serialized_start=710
         | 
| 45 | 
            +
              _globals['_SERVERINFORMSTARTREQUEST']._serialized_end=825
         | 
| 46 | 
            +
              _globals['_SERVERINFORMSTARTRESPONSE']._serialized_start=827
         | 
| 47 | 
            +
              _globals['_SERVERINFORMSTARTRESPONSE']._serialized_end=854
         | 
| 48 | 
            +
              _globals['_SERVERINFORMFINISHREQUEST']._serialized_start=856
         | 
| 49 | 
            +
              _globals['_SERVERINFORMFINISHREQUEST']._serialized_end=928
         | 
| 50 | 
            +
              _globals['_SERVERINFORMFINISHRESPONSE']._serialized_start=930
         | 
| 51 | 
            +
              _globals['_SERVERINFORMFINISHRESPONSE']._serialized_end=958
         | 
| 52 | 
            +
              _globals['_SERVERINFORMATTACHREQUEST']._serialized_start=960
         | 
| 53 | 
            +
              _globals['_SERVERINFORMATTACHREQUEST']._serialized_end=1032
         | 
| 54 | 
            +
              _globals['_SERVERINFORMATTACHRESPONSE']._serialized_start=1034
         | 
| 55 | 
            +
              _globals['_SERVERINFORMATTACHRESPONSE']._serialized_end=1151
         | 
| 56 | 
            +
              _globals['_SERVERINFORMDETACHREQUEST']._serialized_start=1153
         | 
| 57 | 
            +
              _globals['_SERVERINFORMDETACHREQUEST']._serialized_end=1225
         | 
| 58 | 
            +
              _globals['_SERVERINFORMDETACHRESPONSE']._serialized_start=1227
         | 
| 59 | 
            +
              _globals['_SERVERINFORMDETACHRESPONSE']._serialized_end=1255
         | 
| 60 | 
            +
              _globals['_SERVERINFORMTEARDOWNREQUEST']._serialized_start=1257
         | 
| 61 | 
            +
              _globals['_SERVERINFORMTEARDOWNREQUEST']._serialized_end=1350
         | 
| 62 | 
            +
              _globals['_SERVERINFORMTEARDOWNRESPONSE']._serialized_start=1352
         | 
| 63 | 
            +
              _globals['_SERVERINFORMTEARDOWNRESPONSE']._serialized_end=1382
         | 
| 64 | 
            +
              _globals['_SERVERREQUEST']._serialized_start=1385
         | 
| 65 | 
            +
              _globals['_SERVERREQUEST']._serialized_end=2000
         | 
| 66 | 
            +
              _globals['_SERVERRESPONSE']._serialized_start=2003
         | 
| 67 | 
            +
              _globals['_SERVERRESPONSE']._serialized_end=2640
         | 
| 64 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\"\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\"\xa4G\n\x08Settings\x12-\n\x07\x61pi_key\x18\x37 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x07_shared\x18\xa2\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06run_id\x18k \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07run_url\x18q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07project\x18\x61 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x06\x65ntity\x18\x45 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_require_legacy_service\x18\xad\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x13identity_token_file\x18\xaa\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10\x63redentials_file\x18\xab\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x16_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x45\n\x1e_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12<\n\x16_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n#_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n#_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12L\n%_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12L\n%_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x1e_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x12_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1f_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1f_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x18_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12.\n\x05_args\x18\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12/\n\x0b_aws_lambda\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x05_cuda\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x14_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x17_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17_internal_queue_timeout\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\r_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x16_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\n_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0f_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05_sync\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x03_os\x18  \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x12_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x18_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x1a_stats_sample_rate_seconds\x18+ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x19_stats_samples_to_average\x18, \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x12_stats_join_assets\x18- \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12G\n!_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x1d_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12G\n\x1b_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_tracelog\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\r_unsaved_keys\x18\x33 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x14\x64isable_job_creation\x18\x41 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08\x64isabled\x18\x42 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06\x64ocker\x18\x43 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05\x65mail\x18\x44 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05\x66orce\x18G \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\ngit_commit\x18H \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\ngit_remote\x18I \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0egit_remote_url\x18J \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08git_root\x18K \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11heartbeat_seconds\x18L \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12*\n\x04host\x18M \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cinit_timeout\x18O \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08is_local\x18P \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\njob_source\x18Q \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\rlabel_disable\x18R \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06launch\x18S \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12launch_config_path\x18T \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x14log_symlink_internal\x18W \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x10log_symlink_user\x18X \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08log_user\x18Y \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlogin_timeout\x18Z \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12*\n\x04mode\x18\\ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rnotebook_name\x18] \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07program\x18_ \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0fprogram_relpath\x18` \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0bproject_url\x18\x62 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x05quiet\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06reinit\x18\x64 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07relogin\x18\x65 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x06resume\x18\x66 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cresume_fname\x18g \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07resumed\x18h \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tfork_from\x18\xa4\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12/\n\x0bresume_from\x18\xa7\x01 \x01(\x0b\x32\x19.wandb_internal.RunMoment\x12.\n\x08root_dir\x18i \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_group\x18j \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0crun_job_type\x18l \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_mode\x18m \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08run_name\x18n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\trun_notes\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x08run_tags\x18p \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x35\n\x11sagemaker_disable\x18r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tsave_code\x18s \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fsettings_system\x18t \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12settings_workspace\x18u \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bshow_colors\x18v \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nshow_emoji\x18w \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0bshow_errors\x18x \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tshow_info\x18y \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rshow_warnings\x18z \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06silent\x18{ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0cstart_method\x18| \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12*\n\x06strict\x18} \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0esummary_errors\x18~ \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0fsummary_timeout\x18\x7f \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x10summary_warnings\x18\x80\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\x08sweep_id\x18\x81\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x10sweep_param_path\x18\x82\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tsweep_url\x18\x83\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12,\n\x07symlink\x18\x84\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08sync_dir\x18\x85\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tsync_file\x18\x86\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x13sync_symlink_latest\x18\x87\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12J\n%table_raise_on_max_row_limit_exceeded\x18\x8a\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x08timespec\x18\x8b\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x07tmp_dir\x18\x8c\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08username\x18\x8d\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\twandb_dir\x18\x8e\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x11_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValueJ\x04\x08\x0c\x10\rJ\x04\x08$\x10%J\x04\x08^\x10_J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01\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\"\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\"\xe0G\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,\n\x08_offline\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x05_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\x31\n\x0b_start_time\x18) \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12-\n\x07log_dir\x18U \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0clog_internal\x18V \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07\x63onsole\x18< \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tfiles_dir\x18\x46 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0cignore_globs\x18N \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12.\n\x08\x62\x61se_url\x18\x39 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12<\n\x16_file_stream_max_bytes\x18\xac\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x45\n\x1e_file_stream_transmit_interval\x18\xaf\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x44\n\x13_extra_http_headers\x18\x0e \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12<\n\x16_file_stream_retry_max\x18\x93\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12J\n#_file_stream_retry_wait_min_seconds\x18\x94\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n#_file_stream_retry_wait_max_seconds\x18\x95\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x42\n\x1c_file_stream_timeout_seconds\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18_file_transfer_retry_max\x18\x96\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12L\n%_file_transfer_retry_wait_min_seconds\x18\x97\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12L\n%_file_transfer_retry_wait_max_seconds\x18\x98\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x45\n\x1e_file_transfer_timeout_seconds\x18\x99\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x38\n\x12_graphql_retry_max\x18\x9a\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x46\n\x1f_graphql_retry_wait_min_seconds\x18\x9b\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n\x1f_graphql_retry_wait_max_seconds\x18\x9c\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x18_graphql_timeout_seconds\x18\x9d\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\nhttp_proxy\x18\xa8\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0bhttps_proxy\x18\xa9\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x08_proxies\x18\xc8\x01 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12-\n\x07program\x18_ \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\x15_disable_update_check\x18\xa5\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_require_legacy_service\x18\xad\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x15_show_operation_stats\x18\xb0\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\x32\n\x0e_cli_only_mode\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06_colab\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x05_cuda\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\r_disable_meta\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10_disable_service\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15_disable_setproctitle\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x32\n\x0e_disable_stats\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f_disable_viewer\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\x0b_executable\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x14_flow_control_custom\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16_flow_control_disabled\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x17_internal_check_process\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17_internal_queue_timeout\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12,\n\x08_ipython\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08_jupyter\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\r_jupyter_root\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x07_kaggle\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x17_live_policy_rate_limit\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x16_live_policy_wait_time\x18\x19 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12/\n\n_log_level\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0f_network_buffer\x18\x1b \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x05_noop\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\t_notebook\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n\x03_os\x18  \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_platform\x18! \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07_python\x18\" \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11_runqueue_item_id\x18# \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x12_save_requirements\x18% \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x38\n\x12_service_transport\x18& \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\r_service_wait\x18\' \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f_start_datetime\x18( \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\n_stats_pid\x18* \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12?\n\x18_stats_sampling_interval\x18\xae\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x1a_stats_sample_rate_seconds\x18+ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x19_stats_samples_to_average\x18, \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x36\n\x12_stats_join_assets\x18- \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12G\n!_stats_neuron_monitor_config_path\x18. \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x1d_stats_open_metrics_endpoints\x18/ \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12G\n\x1b_stats_open_metrics_filters\x18\x30 \x01(\x0b\x32\".wandb_internal.OpenMetricsFilters\x12\x33\n\r_tmp_code_dir\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\t_tracelog\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\r_unsaved_keys\x18\x33 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12,\n\x08_windows\x18\x34 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x10\x61llow_val_change\x18\x35 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\tanonymous\x18\x36 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x1f\x61zure_account_url_to_access_key\x18\x38 \x01(\x0b\x32\'.wandb_internal.MapStringKeyStringValue\x12.\n\x08\x63ode_dir\x18: \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x35\n\x0c\x63onfig_paths\x18; \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12\x30\n\ndeployment\x18= \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x64isable_code\x18> \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x64isable_git\x18? \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x31\n\rdisable_hints\x18@ \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\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\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\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\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\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,\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\x34\n\r_jupyter_name\x18\x8f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\r_jupyter_path\x18\x90\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08job_name\x18\x91\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x11_stats_disk_paths\x18\x92\x01 \x01(\x0b\x32\x1f.wandb_internal.ListStringValue\x12:\n\x15_disable_machine_info\x18\x9e\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x0fprogram_abspath\x18\x9f\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\tcolab_url\x18\xa0\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x12_stats_buffer_size\x18\xa1\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x10_code_path_local\x18\xa3\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x36\n\x11\x63onsole_multipart\x18\xa6\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueJ\x04\x08\x0c\x10\rJ\x04\x08$\x10%J\x04\x08^\x10_J\x06\x08\x88\x01\x10\x89\x01J\x06\x08\x89\x01\x10\x8a\x01\x42\x1bZ\x19\x63ore/pkg/service_go_protob\x06proto3')
         | 
| 19 19 |  | 
| 20 20 | 
             
            _globals = globals()
         | 
| 21 21 | 
             
            _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
         | 
| @@ -42,5 +42,5 @@ if not _descriptor._USE_C_DESCRIPTORS: | |
| 42 42 | 
             
              _globals['_RUNMOMENT']._serialized_start=622
         | 
| 43 43 | 
             
              _globals['_RUNMOMENT']._serialized_end=677
         | 
| 44 44 | 
             
              _globals['_SETTINGS']._serialized_start=680
         | 
| 45 | 
            -
              _globals['_SETTINGS']._serialized_end= | 
| 45 | 
            +
              _globals['_SETTINGS']._serialized_end=9864
         | 
| 46 46 | 
             
            # @@protoc_insertion_point(module_scope)
         | 
    
        wandb/sdk/__init__.py
    CHANGED
    
    | @@ -14,8 +14,8 @@ __all__ = ( | |
| 14 14 | 
             
                "require",
         | 
| 15 15 | 
             
                "finish",
         | 
| 16 16 | 
             
                "teardown",
         | 
| 17 | 
            -
                " | 
| 18 | 
            -
                " | 
| 17 | 
            +
                "_watch",
         | 
| 18 | 
            +
                "_unwatch",
         | 
| 19 19 | 
             
                "sweep",
         | 
| 20 20 | 
             
                "controller",
         | 
| 21 21 | 
             
                "helper",
         | 
| @@ -34,4 +34,4 @@ from .wandb_setup import setup, teardown | |
| 34 34 | 
             
            from .wandb_summary import Summary
         | 
| 35 35 | 
             
            from .wandb_sweep import controller, sweep
         | 
| 36 36 | 
             
            from .wandb_sync import _sync
         | 
| 37 | 
            -
            from .wandb_watch import  | 
| 37 | 
            +
            from .wandb_watch import _unwatch, _watch
         | 
| @@ -4,7 +4,7 @@ from __future__ import annotations | |
| 4 4 |  | 
| 5 5 | 
             
            import re
         | 
| 6 6 | 
             
            from functools import wraps
         | 
| 7 | 
            -
            from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
         | 
| 7 | 
            +
            from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast, overload
         | 
| 8 8 |  | 
| 9 9 | 
             
            from wandb.sdk.artifacts.exceptions import (
         | 
| 10 10 | 
             
                ArtifactFinalizedError,
         | 
| @@ -12,31 +12,58 @@ from wandb.sdk.artifacts.exceptions import ( | |
| 12 12 | 
             
            )
         | 
| 13 13 |  | 
| 14 14 | 
             
            if TYPE_CHECKING:
         | 
| 15 | 
            -
                from typing import Collection
         | 
| 15 | 
            +
                from typing import Collection, Iterable, Union
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                from typing_extensions import Final
         | 
| 16 18 |  | 
| 17 19 | 
             
                from wandb.sdk.artifacts.artifact import Artifact
         | 
| 18 20 |  | 
| 19 21 | 
             
                ArtifactT = TypeVar("ArtifactT", bound=Artifact)
         | 
| 22 | 
            +
                T = TypeVar("T")
         | 
| 23 | 
            +
                ClassInfo = Union[type[T], tuple[type[T], ...]]
         | 
| 24 | 
            +
             | 
| 25 | 
            +
             | 
| 26 | 
            +
            REGISTRY_PREFIX: Final[str] = "wandb-registry-"
         | 
| 27 | 
            +
             | 
| 28 | 
            +
             | 
| 29 | 
            +
            # For mypy checks
         | 
| 30 | 
            +
            @overload
         | 
| 31 | 
            +
            def always_list(obj: Iterable[T], base_type: ClassInfo = ...) -> list[T]: ...
         | 
| 32 | 
            +
            @overload
         | 
| 33 | 
            +
            def always_list(obj: T, base_type: ClassInfo = ...) -> list[T]: ...
         | 
| 34 | 
            +
             | 
| 35 | 
            +
             | 
| 36 | 
            +
            def always_list(obj: Any, base_type: Any = (str, bytes)) -> list[T]:
         | 
| 37 | 
            +
                """Return a guaranteed list of objects from a single instance OR iterable of such objects.
         | 
| 20 38 |  | 
| 39 | 
            +
                By default, assume the returned list should have string-like elements (i.e. `str`/`bytes`).
         | 
| 21 40 |  | 
| 22 | 
            -
             | 
| 41 | 
            +
                Adapted from `more_itertools.always_iterable`, but simplified for internal use.  See:
         | 
| 42 | 
            +
                https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.always_iterable
         | 
| 43 | 
            +
                """
         | 
| 44 | 
            +
                return [obj] if isinstance(obj, base_type) else list(obj)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
             | 
| 47 | 
            +
            def validate_aliases(aliases: Collection[str] | str) -> list[str]:
         | 
| 23 48 | 
             
                """Validate the artifact aliases and return them as a list.
         | 
| 24 49 |  | 
| 25 50 | 
             
                Raises:
         | 
| 26 51 | 
             
                    ValueError: If any of the aliases contain invalid characters.
         | 
| 27 52 | 
             
                """
         | 
| 53 | 
            +
                aliases_list = always_list(aliases)
         | 
| 54 | 
            +
             | 
| 28 55 | 
             
                invalid_chars = ("/", ":")
         | 
| 29 | 
            -
                if any(char in alias for alias in  | 
| 56 | 
            +
                if any(char in alias for alias in aliases_list for char in invalid_chars):
         | 
| 30 57 | 
             
                    raise ValueError(
         | 
| 31 58 | 
             
                        f"Aliases must not contain any of the following characters: {', '.join(invalid_chars)}"
         | 
| 32 59 | 
             
                    )
         | 
| 33 | 
            -
                return  | 
| 60 | 
            +
                return aliases_list
         | 
| 34 61 |  | 
| 35 62 |  | 
| 36 63 | 
             
            _VALID_TAG_PATTERN: re.Pattern[str] = re.compile(r"^[-\w]+( +[-\w]+)*$")
         | 
| 37 64 |  | 
| 38 65 |  | 
| 39 | 
            -
            def validate_tags(tags: Collection[str]) -> list[str]:
         | 
| 66 | 
            +
            def validate_tags(tags: Collection[str] | str) -> list[str]:
         | 
| 40 67 | 
             
                """Validate the artifact tag names and return them as a deduped list.
         | 
| 41 68 |  | 
| 42 69 | 
             
                In the case of duplicates, only keep the first tag, and otherwise maintain the order of appearance.
         | 
| @@ -44,12 +71,14 @@ def validate_tags(tags: Collection[str]) -> list[str]: | |
| 44 71 | 
             
                Raises:
         | 
| 45 72 | 
             
                    ValueError: If any of the tags contain invalid characters.
         | 
| 46 73 | 
             
                """
         | 
| 47 | 
            -
                 | 
| 74 | 
            +
                tags_list = always_list(tags)
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                if any(not _VALID_TAG_PATTERN.match(tag) for tag in tags_list):
         | 
| 48 77 | 
             
                    raise ValueError(
         | 
| 49 78 | 
             
                        "Invalid tag(s).  "
         | 
| 50 79 | 
             
                        "Tags must only contain alphanumeric characters separated by hyphens, underscores, and/or spaces."
         | 
| 51 80 | 
             
                    )
         | 
| 52 | 
            -
                return list(dict.fromkeys( | 
| 81 | 
            +
                return list(dict.fromkeys(tags_list))
         | 
| 53 82 |  | 
| 54 83 |  | 
| 55 84 | 
             
            DecoratedF = TypeVar("DecoratedF", bound=Callable[..., Any])
         | 
| @@ -88,3 +117,7 @@ def ensure_not_finalized(method: DecoratedF) -> DecoratedF: | |
| 88 117 | 
             
                    return method(self, *args, **kwargs)
         | 
| 89 118 |  | 
| 90 119 | 
             
                return cast(DecoratedF, wrapper)
         | 
| 120 | 
            +
             | 
| 121 | 
            +
             | 
| 122 | 
            +
            def is_artifact_registry_project(project: str) -> bool:
         | 
| 123 | 
            +
                return project.startswith(REGISTRY_PREFIX)
         | 
    
        wandb/sdk/artifacts/artifact.py
    CHANGED
    
    | @@ -41,6 +41,7 @@ from wandb.errors.term import termerror, termlog, termwarn | |
| 41 41 | 
             
            from wandb.sdk.artifacts._validators import (
         | 
| 42 42 | 
             
                ensure_logged,
         | 
| 43 43 | 
             
                ensure_not_finalized,
         | 
| 44 | 
            +
                is_artifact_registry_project,
         | 
| 44 45 | 
             
                validate_aliases,
         | 
| 45 46 | 
             
                validate_tags,
         | 
| 46 47 | 
             
            )
         | 
| @@ -231,7 +232,12 @@ class Artifact: | |
| 231 232 |  | 
| 232 233 | 
             
                @classmethod
         | 
| 233 234 | 
             
                def _from_name(
         | 
| 234 | 
            -
                    cls, | 
| 235 | 
            +
                    cls,
         | 
| 236 | 
            +
                    entity: str,
         | 
| 237 | 
            +
                    project: str,
         | 
| 238 | 
            +
                    name: str,
         | 
| 239 | 
            +
                    client: RetryingClient,
         | 
| 240 | 
            +
                    organization: str = "",
         | 
| 235 241 | 
             
                ) -> Artifact:
         | 
| 236 242 | 
             
                    query = gql(
         | 
| 237 243 | 
             
                        """
         | 
| @@ -249,6 +255,31 @@ class Artifact: | |
| 249 255 | 
             
                        """
         | 
| 250 256 | 
             
                        + cls._get_gql_artifact_fragment()
         | 
| 251 257 | 
             
                    )
         | 
| 258 | 
            +
             | 
| 259 | 
            +
                    # Registry artifacts are under the org entity. Because we offer a shorthand and alias for this path,
         | 
| 260 | 
            +
                    # we need to fetch the org entity to for the user behind the scenes.
         | 
| 261 | 
            +
                    if is_artifact_registry_project(project):
         | 
| 262 | 
            +
                        try:
         | 
| 263 | 
            +
                            entity = InternalApi()._resolve_org_entity_name(entity, organization)
         | 
| 264 | 
            +
                        except ValueError as entity_error:
         | 
| 265 | 
            +
                            if not organization or organization == entity:
         | 
| 266 | 
            +
                                wandb.termerror(str(entity_error))
         | 
| 267 | 
            +
                                raise
         | 
| 268 | 
            +
             | 
| 269 | 
            +
                            # Try to resolve the organization using an org entity.
         | 
| 270 | 
            +
                            try:
         | 
| 271 | 
            +
                                entity = InternalApi()._resolve_org_entity_name(
         | 
| 272 | 
            +
                                    organization, organization
         | 
| 273 | 
            +
                                )
         | 
| 274 | 
            +
                            except ValueError as org_error:
         | 
| 275 | 
            +
                                wandb.termerror(
         | 
| 276 | 
            +
                                    f"Error resolving organization of entity: {entity!r}. Failed with error: {entity_error!r}."
         | 
| 277 | 
            +
                                )
         | 
| 278 | 
            +
                                wandb.termerror(
         | 
| 279 | 
            +
                                    f"Defaulted to use {organization!r} as an org entity to resolve organization. Failed with error: {org_error!r}."
         | 
| 280 | 
            +
                                )
         | 
| 281 | 
            +
                                raise
         | 
| 282 | 
            +
             | 
| 252 283 | 
             
                    response = client.execute(
         | 
| 253 284 | 
             
                        query,
         | 
| 254 285 | 
             
                        variable_values={
         | 
| @@ -15,7 +15,6 @@ from typing import IO, TYPE_CHECKING, ContextManager, Iterator | |
| 15 15 |  | 
| 16 16 | 
             
            import wandb
         | 
| 17 17 | 
             
            from wandb import env, util
         | 
| 18 | 
            -
            from wandb.errors import term
         | 
| 19 18 | 
             
            from wandb.sdk.lib.filesystem import files_in
         | 
| 20 19 | 
             
            from wandb.sdk.lib.hashutil import B64MD5, ETag, b64_to_hex_id
         | 
| 21 20 | 
             
            from wandb.sdk.lib.paths import FilePathStr, StrPath, URIStr
         | 
| @@ -191,7 +190,7 @@ class ArtifactFileCache: | |
| 191 190 | 
             
                    if size <= self._free_space():
         | 
| 192 191 | 
             
                        return
         | 
| 193 192 |  | 
| 194 | 
            -
                     | 
| 193 | 
            +
                    wandb.termwarn("Cache size exceeded. Attempting to reclaim space...")
         | 
| 195 194 | 
             
                    self.cleanup(target_fraction=0.5)
         | 
| 196 195 | 
             
                    if size <= self._free_space():
         | 
| 197 196 | 
             
                        return
         | 
    
        wandb/sdk/data_types/_dtypes.py
    CHANGED
    
    | @@ -620,9 +620,13 @@ class ListType(Type): | |
| 620 620 | 
             
                            py_list = py_obj.tolist()
         | 
| 621 621 | 
             
                        else:
         | 
| 622 622 | 
             
                            py_list = list(py_obj)
         | 
| 623 | 
            -
             | 
| 624 | 
            -
             | 
| 625 | 
            -
                         | 
| 623 | 
            +
             | 
| 624 | 
            +
                        elm_type: Type
         | 
| 625 | 
            +
                        if None not in py_list:
         | 
| 626 | 
            +
                            elm_type = UnknownType()
         | 
| 627 | 
            +
                        else:
         | 
| 628 | 
            +
                            elm_type = OptionalType(UnknownType())
         | 
| 629 | 
            +
             | 
| 626 630 | 
             
                        for item in py_list:
         | 
| 627 631 | 
             
                            _elm_type = elm_type.assign(item)
         | 
| 628 632 | 
             
                            # Commenting this out since we don't want to crash user code at this point, but rather
         | 
    
        wandb/sdk/data_types/video.py
    CHANGED
    
    | @@ -3,6 +3,7 @@ import os | |
| 3 3 | 
             
            from io import BytesIO
         | 
| 4 4 | 
             
            from typing import TYPE_CHECKING, Any, Dict, Optional, Sequence, Type, Union
         | 
| 5 5 |  | 
| 6 | 
            +
            import wandb
         | 
| 6 7 | 
             
            from wandb import util
         | 
| 7 8 | 
             
            from wandb.sdk.lib import filesystem, runid
         | 
| 8 9 |  | 
| @@ -58,7 +59,9 @@ class Video(BatchableMedia): | |
| 58 59 | 
             
                        Channels should be (time, channel, height, width) or
         | 
| 59 60 | 
             
                        (batch, time, channel, height width)
         | 
| 60 61 | 
             
                    caption: (string) caption associated with the video for display
         | 
| 61 | 
            -
                    fps: (int) | 
| 62 | 
            +
                    fps: (int)
         | 
| 63 | 
            +
                        The frame rate to use when encoding raw video frames. Default value is 4.
         | 
| 64 | 
            +
                        This parameter has no effect when data_or_path is a string, or bytes.
         | 
| 62 65 | 
             
                    format: (string) format of video, necessary if initializing with path or io object.
         | 
| 63 66 |  | 
| 64 67 | 
             
                Examples:
         | 
| @@ -84,12 +87,11 @@ class Video(BatchableMedia): | |
| 84 87 | 
             
                    self,
         | 
| 85 88 | 
             
                    data_or_path: Union["np.ndarray", str, "TextIO", "BytesIO"],
         | 
| 86 89 | 
             
                    caption: Optional[str] = None,
         | 
| 87 | 
            -
                    fps: int =  | 
| 90 | 
            +
                    fps: Optional[int] = None,
         | 
| 88 91 | 
             
                    format: Optional[str] = None,
         | 
| 89 92 | 
             
                ):
         | 
| 90 93 | 
             
                    super().__init__()
         | 
| 91 94 |  | 
| 92 | 
            -
                    self._fps = fps
         | 
| 93 95 | 
             
                    self._format = format or "gif"
         | 
| 94 96 | 
             
                    self._width = None
         | 
| 95 97 | 
             
                    self._height = None
         | 
| @@ -100,6 +102,12 @@ class Video(BatchableMedia): | |
| 100 102 | 
             
                            "wandb.Video accepts {} formats".format(", ".join(Video.EXTS))
         | 
| 101 103 | 
             
                        )
         | 
| 102 104 |  | 
| 105 | 
            +
                    if isinstance(data_or_path, (BytesIO, str)) and fps:
         | 
| 106 | 
            +
                        wandb.termwarn(
         | 
| 107 | 
            +
                            "`fps` argument does not affect the frame rate of the video "
         | 
| 108 | 
            +
                            + "when providing a file path or raw bytes."
         | 
| 109 | 
            +
                        )
         | 
| 110 | 
            +
             | 
| 103 111 | 
             
                    if isinstance(data_or_path, BytesIO):
         | 
| 104 112 | 
             
                        filename = os.path.join(
         | 
| 105 113 | 
             
                            MEDIA_TMP.name, runid.generate_id() + "." + self._format
         | 
| @@ -125,9 +133,10 @@ class Video(BatchableMedia): | |
| 125 133 | 
             
                            raise ValueError(
         | 
| 126 134 | 
             
                                "wandb.Video accepts a file path or numpy like data as input"
         | 
| 127 135 | 
             
                            )
         | 
| 128 | 
            -
                         | 
| 136 | 
            +
                        fps = fps or 4
         | 
| 137 | 
            +
                        self.encode(fps=fps)
         | 
| 129 138 |  | 
| 130 | 
            -
                def encode(self) -> None:
         | 
| 139 | 
            +
                def encode(self, fps: int = 4) -> None:
         | 
| 131 140 | 
             
                    mpy = util.get_module(
         | 
| 132 141 | 
             
                        "moviepy.editor",
         | 
| 133 142 | 
             
                        required='wandb.Video requires moviepy when passing raw data.  Install with "pip install wandb[media]"',
         | 
| @@ -136,7 +145,7 @@ class Video(BatchableMedia): | |
| 136 145 | 
             
                    _, self._height, self._width, self._channels = tensor.shape  # type: ignore
         | 
| 137 146 |  | 
| 138 147 | 
             
                    # encode sequence of images into gif string
         | 
| 139 | 
            -
                    clip = mpy.ImageSequenceClip(list(tensor), fps= | 
| 148 | 
            +
                    clip = mpy.ImageSequenceClip(list(tensor), fps=fps)
         | 
| 140 149 |  | 
| 141 150 | 
             
                    filename = os.path.join(
         | 
| 142 151 | 
             
                        MEDIA_TMP.name, runid.generate_id() + "." + self._format
         | 
    
        wandb/sdk/interface/interface.py
    CHANGED
    
    | @@ -390,6 +390,7 @@ class InterfaceBase: | |
| 390 390 | 
             
                    aliases: Iterable[str],
         | 
| 391 391 | 
             
                    entity: Optional[str] = None,
         | 
| 392 392 | 
             
                    project: Optional[str] = None,
         | 
| 393 | 
            +
                    organization: Optional[str] = None,
         | 
| 393 394 | 
             
                ) -> MailboxHandle:
         | 
| 394 395 | 
             
                    link_artifact = pb.LinkArtifactRequest()
         | 
| 395 396 | 
             
                    if artifact.is_draft():
         | 
| @@ -398,6 +399,7 @@ class InterfaceBase: | |
| 398 399 | 
             
                        link_artifact.server_id = artifact.id if artifact.id else ""
         | 
| 399 400 | 
             
                    link_artifact.portfolio_name = portfolio_name
         | 
| 400 401 | 
             
                    link_artifact.portfolio_entity = entity or run.entity
         | 
| 402 | 
            +
                    link_artifact.portfolio_organization = organization or ""
         | 
| 401 403 | 
             
                    link_artifact.portfolio_project = project or run.project
         | 
| 402 404 | 
             
                    link_artifact.portfolio_aliases.extend(aliases)
         | 
| 403 405 |  |