wandb 0.18.6__py3-none-macosx_11_0_arm64.whl → 0.18.7__py3-none-macosx_11_0_arm64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. wandb/__init__.py +1 -1
  2. wandb/__init__.pyi +2 -2
  3. wandb/apis/public/api.py +5 -1
  4. wandb/bin/wandb-core +0 -0
  5. wandb/proto/v3/wandb_settings_pb2.py +2 -2
  6. wandb/proto/v3/wandb_telemetry_pb2.py +4 -4
  7. wandb/proto/v4/wandb_settings_pb2.py +2 -2
  8. wandb/proto/v4/wandb_telemetry_pb2.py +4 -4
  9. wandb/proto/v5/wandb_settings_pb2.py +2 -2
  10. wandb/proto/v5/wandb_telemetry_pb2.py +4 -4
  11. wandb/proto/wandb_deprecated.py +2 -0
  12. wandb/sdk/artifacts/artifact.py +1 -1
  13. wandb/sdk/data_types/base_types/wb_value.py +20 -10
  14. wandb/sdk/interface/interface_queue.py +0 -6
  15. wandb/sdk/interface/router.py +1 -2
  16. wandb/sdk/interface/router_queue.py +0 -3
  17. wandb/sdk/interface/router_relay.py +0 -2
  18. wandb/sdk/internal/handler.py +1 -3
  19. wandb/sdk/internal/internal.py +0 -14
  20. wandb/sdk/internal/internal_util.py +0 -3
  21. wandb/sdk/internal/sender.py +0 -2
  22. wandb/sdk/internal/writer.py +1 -3
  23. wandb/sdk/launch/__init__.py +2 -1
  24. wandb/sdk/lib/_settings_toposort_generated.py +1 -0
  25. wandb/sdk/lib/sock_client.py +0 -5
  26. wandb/sdk/service/server.py +2 -11
  27. wandb/sdk/service/server_sock.py +0 -2
  28. wandb/sdk/wandb_run.py +44 -50
  29. wandb/sdk/wandb_settings.py +20 -2
  30. wandb/sdk/wandb_setup.py +1 -5
  31. wandb/util.py +3 -3
  32. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/METADATA +1 -1
  33. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/RECORD +36 -37
  34. wandb/sdk/lib/tracelog.py +0 -255
  35. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/WHEEL +0 -0
  36. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/entry_points.txt +0 -0
  37. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/licenses/LICENSE +0 -0
@@ -7,7 +7,6 @@ Router to manage responses from a queue.
7
7
  import queue
8
8
  from typing import TYPE_CHECKING, Optional
9
9
 
10
- from ..lib import tracelog
11
10
  from ..lib.mailbox import Mailbox
12
11
  from .router import MessageRouter
13
12
 
@@ -36,9 +35,7 @@ class MessageQueueRouter(MessageRouter):
36
35
  msg = self._response_queue.get(timeout=1)
37
36
  except queue.Empty:
38
37
  return None
39
- tracelog.log_message_dequeue(msg, self._response_queue)
40
38
  return msg
41
39
 
42
40
  def _send_message(self, record: "pb.Record") -> None:
43
- tracelog.log_message_queue(record, self._request_queue)
44
41
  self._request_queue.put(record)
@@ -6,7 +6,6 @@ Router to manage responses from a queue with relay.
6
6
 
7
7
  from typing import TYPE_CHECKING
8
8
 
9
- from ..lib import tracelog
10
9
  from ..lib.mailbox import Mailbox
11
10
  from .router_queue import MessageQueueRouter
12
11
 
@@ -33,7 +32,6 @@ class MessageRelayRouter(MessageQueueRouter):
33
32
 
34
33
  def _handle_msg_rcv(self, msg: "pb.Result") -> None:
35
34
  if msg.control.relay_id:
36
- tracelog.log_message_queue(msg, self._relay_queue)
37
35
  self._relay_queue.put(msg)
38
36
  return
39
37
  super()._handle_msg_rcv(msg)
@@ -38,7 +38,7 @@ from wandb.proto.wandb_internal_pb2 import (
38
38
  )
39
39
 
40
40
  from ..interface.interface_queue import InterfaceQueue
41
- from ..lib import handler_util, proto_util, tracelog
41
+ from ..lib import handler_util, proto_util
42
42
  from . import context, sample, tb_watcher
43
43
  from .settings_static import SettingsStatic
44
44
  from .system.system_monitor import SystemMonitor
@@ -163,11 +163,9 @@ class HandleManager:
163
163
  def _dispatch_record(self, record: Record, always_send: bool = False) -> None:
164
164
  if always_send:
165
165
  record.control.always_send = True
166
- tracelog.log_message_queue(record, self._writer_q)
167
166
  self._writer_q.put(record)
168
167
 
169
168
  def _respond_result(self, result: Result) -> None:
170
- tracelog.log_message_queue(result, self._result_q)
171
169
  context_id = context.context_id_from_result(result)
172
170
  self._context_keeper.release(context_id)
173
171
  self._result_q.put(result)
@@ -28,7 +28,6 @@ import psutil
28
28
  import wandb
29
29
 
30
30
  from ..interface.interface_queue import InterfaceQueue
31
- from ..lib import tracelog
32
31
  from . import context, handler, internal_util, sender, writer
33
32
 
34
33
  if TYPE_CHECKING:
@@ -63,7 +62,6 @@ def wandb_internal(
63
62
  """
64
63
  # mark this process as internal
65
64
  wandb._set_internal_process() # type: ignore
66
- _setup_tracelog()
67
65
  started = time.time()
68
66
 
69
67
  # any sentry events in the internal process will be tagged as such
@@ -88,8 +86,6 @@ def wandb_internal(
88
86
  datetime.fromtimestamp(started),
89
87
  )
90
88
 
91
- tracelog.annotate_queue(record_q, "record_q")
92
- tracelog.annotate_queue(result_q, "result_q")
93
89
  publish_interface = InterfaceQueue(record_q=record_q)
94
90
 
95
91
  stopped = threading.Event()
@@ -98,10 +94,8 @@ def wandb_internal(
98
94
  context_keeper = context.ContextKeeper()
99
95
 
100
96
  send_record_q: Queue[Record] = queue.Queue()
101
- tracelog.annotate_queue(send_record_q, "send_q")
102
97
 
103
98
  write_record_q: Queue[Record] = queue.Queue()
104
- tracelog.annotate_queue(write_record_q, "write_q")
105
99
 
106
100
  record_sender_thread = SenderThread(
107
101
  settings=_settings,
@@ -184,14 +178,6 @@ def wandb_internal(
184
178
  close_internal_log()
185
179
 
186
180
 
187
- def _setup_tracelog() -> None:
188
- # TODO: remove this temporary hack, need to find a better way to pass settings
189
- # to the server. for now lets just look at the environment variable we need
190
- tracelog_mode = os.environ.get("WANDB_TRACELOG")
191
- if tracelog_mode:
192
- tracelog.enable(tracelog_mode)
193
-
194
-
195
181
  def configure_logging(
196
182
  log_fname: str, log_level: int, run_id: Optional[str] = None
197
183
  ) -> None:
@@ -11,8 +11,6 @@ import threading
11
11
  import time
12
12
  from typing import TYPE_CHECKING, Optional, Tuple, Type, Union
13
13
 
14
- from ..lib import tracelog
15
-
16
14
  if TYPE_CHECKING:
17
15
  from queue import Queue
18
16
  from threading import Event
@@ -95,6 +93,5 @@ class RecordLoopThread(ExceptionThread):
95
93
  record = self._input_record_q.get(timeout=1)
96
94
  except queue.Empty:
97
95
  continue
98
- tracelog.log_message_dequeue(record, self._input_record_q)
99
96
  self._process(record)
100
97
  self._finish()
@@ -53,7 +53,6 @@ from wandb.sdk.lib import (
53
53
  proto_util,
54
54
  redirect,
55
55
  telemetry,
56
- tracelog,
57
56
  )
58
57
  from wandb.sdk.lib.mailbox import ContextCancelledError
59
58
  from wandb.sdk.lib.proto_util import message_to_dict
@@ -418,7 +417,6 @@ class SendManager:
418
417
  send_handler(record)
419
418
 
420
419
  def _respond_result(self, result: "Result") -> None:
421
- tracelog.log_message_queue(result, self._result_q)
422
420
  context_id = context.context_id_from_result(result)
423
421
  self._context_keeper.release(context_id)
424
422
  self._result_q.put(result)
@@ -7,7 +7,7 @@ from wandb.proto import wandb_internal_pb2 as pb
7
7
  from wandb.proto import wandb_telemetry_pb2 as tpb
8
8
 
9
9
  from ..interface.interface_queue import InterfaceQueue
10
- from ..lib import proto_util, telemetry, tracelog
10
+ from ..lib import proto_util, telemetry
11
11
  from . import context, datastore, flow_control
12
12
  from .settings_static import SettingsStatic
13
13
 
@@ -79,7 +79,6 @@ class WriteManager:
79
79
 
80
80
  def _forward_record(self, record: "pb.Record") -> None:
81
81
  self._context_keeper.add_from_record(record)
82
- tracelog.log_message_queue(record, self._sender_q)
83
82
  self._sender_q.put(record)
84
83
 
85
84
  def _send_mark(self) -> None:
@@ -191,7 +190,6 @@ class WriteManager:
191
190
  # self._sender_cancel_set.add(cancel_id)
192
191
 
193
192
  def _respond_result(self, result: "pb.Result") -> None:
194
- tracelog.log_message_queue(result, self._result_q)
195
193
  self._result_q.put(result)
196
194
 
197
195
  def finish(self) -> None:
@@ -1,10 +1,11 @@
1
- from ._launch import launch
1
+ from ._launch import create_and_run_agent, launch
2
2
  from ._launch_add import launch_add
3
3
  from .agent.agent import LaunchAgent
4
4
  from .inputs.manage import manage_config_file, manage_wandb_config
5
5
  from .utils import load_wandb_config
6
6
 
7
7
  __all__ = [
8
+ "create_and_run_agent",
8
9
  "LaunchAgent",
9
10
  "launch",
10
11
  "launch_add",
@@ -84,6 +84,7 @@ _Setting = Literal[
84
84
  "_tracelog",
85
85
  "_unsaved_keys",
86
86
  "_windows",
87
+ "allow_offline_artifacts",
87
88
  "allow_val_change",
88
89
  "anonymous",
89
90
  "api_key",
@@ -7,8 +7,6 @@ from typing import TYPE_CHECKING, Any, List, Optional
7
7
 
8
8
  from wandb.proto import wandb_server_pb2 as spb
9
9
 
10
- from . import tracelog
11
-
12
10
  if TYPE_CHECKING:
13
11
  from wandb.proto import wandb_internal_pb2 as pb
14
12
 
@@ -145,7 +143,6 @@ class SockClient:
145
143
  time.sleep(self._retry_delay - delta_time)
146
144
 
147
145
  def _send_message(self, msg: Any) -> None:
148
- tracelog.log_message_send(msg, self._sockid)
149
146
  raw_size = msg.ByteSize()
150
147
  data = msg.SerializeToString()
151
148
  assert len(data) == raw_size, "invalid serialization"
@@ -280,7 +277,6 @@ class SockClient:
280
277
  return None
281
278
  rec = spb.ServerRequest()
282
279
  rec.ParseFromString(data)
283
- tracelog.log_message_recv(rec, self._sockid)
284
280
  return rec
285
281
 
286
282
  def read_server_response(
@@ -291,5 +287,4 @@ class SockClient:
291
287
  return None
292
288
  rec = spb.ServerResponse()
293
289
  rec.ParseFromString(data)
294
- tracelog.log_message_recv(rec, self._sockid)
295
290
  return rec
@@ -10,7 +10,6 @@ from typing import Optional
10
10
 
11
11
  import wandb
12
12
 
13
- from ..lib import tracelog
14
13
  from . import _startup_debug, port_file
15
14
  from .server_sock import SocketServer
16
15
  from .streams import StreamMux
@@ -69,21 +68,14 @@ class WandbServer:
69
68
  if self._sock_server:
70
69
  self._sock_server.stop()
71
70
 
72
- def _setup_tracelog(self) -> None:
73
- # TODO: remove this temporary hack, need to find a better way to pass settings
74
- # to the server. for now lets just look at the environment variable we need
75
- tracelog_mode = os.environ.get("WANDB_TRACELOG")
76
- if tracelog_mode:
77
- tracelog.enable(tracelog_mode)
78
-
79
71
  def _startup_debug_print(self, message: str) -> None:
80
72
  if not self._startup_debug_enabled:
81
73
  return
82
74
  _startup_debug.print_message(message)
83
75
 
84
76
  def _setup_proctitle(self, sock_port: Optional[int]) -> None:
85
- # TODO: similar to _setup_tracelog, the internal_process should have
86
- # a better way to have access to settings.
77
+ # TODO: the internal_process should have a better way to have access to
78
+ # settings.
87
79
  disable_setproctitle = os.environ.get("WANDB__DISABLE_SETPROCTITLE")
88
80
  if disable_setproctitle:
89
81
  return
@@ -103,7 +95,6 @@ class WandbServer:
103
95
  self._startup_debug_print("after_setproctitle")
104
96
 
105
97
  def serve(self) -> None:
106
- self._setup_tracelog()
107
98
  mux = StreamMux()
108
99
  self._startup_debug_print("before_network")
109
100
  sock_port = self._start_sock(mux=mux)
@@ -7,7 +7,6 @@ from typing import TYPE_CHECKING, Any, Callable, Dict, Optional
7
7
  from wandb.proto import wandb_server_pb2 as spb
8
8
  from wandb.sdk.internal.settings_static import SettingsStatic
9
9
 
10
- from ..lib import tracelog
11
10
  from ..lib.sock_client import SockClient, SockClientClosedError
12
11
  from .streams import StreamMux
13
12
 
@@ -65,7 +64,6 @@ class SockServerInterfaceReaderThread(threading.Thread):
65
64
  except ValueError:
66
65
  # queue is closed
67
66
  break
68
- tracelog.log_message_dequeue(result, self._iface.relay_q)
69
67
  sockid = result.control.relay_id
70
68
  assert sockid
71
69
  sock_client = self._clients.get_client(sockid)
wandb/sdk/wandb_run.py CHANGED
@@ -549,7 +549,6 @@ class Run:
549
549
  _redirect_cb: Callable[[str, str], None] | None
550
550
  _redirect_raw_cb: Callable[[str, str], None] | None
551
551
  _output_writer: filesystem.CRDedupedFile | None
552
- _quiet: bool | None
553
552
 
554
553
  _atexit_cleanup_called: bool
555
554
  _hooks: ExitHooks | None
@@ -657,7 +656,6 @@ class Run:
657
656
  self._stderr_slave_fd = None
658
657
  self._exit_code = None
659
658
  self._exit_result = None
660
- self._quiet = self._settings.quiet
661
659
 
662
660
  self._output_writer = None
663
661
  self._used_artifact_slots: dict[str, str] = {}
@@ -1469,12 +1467,14 @@ class Run:
1469
1467
  files: FilesDict = dict(files=[(GlobStr(glob.escape(fname)), "now")])
1470
1468
  self._backend.interface.publish_files(files)
1471
1469
 
1472
- def _visualization_hack(self, row: dict[str, Any]) -> dict[str, Any]:
1473
- # TODO(jhr): move visualize hack somewhere else
1470
+ def _serialize_custom_charts(self, data: dict[str, Any]) -> dict[str, Any]:
1471
+ if not data:
1472
+ return data
1473
+
1474
1474
  chart_keys = set()
1475
- for k, v in row.items():
1475
+ for k, v in data.items():
1476
1476
  if isinstance(v, Visualize):
1477
- row[k] = v.table
1477
+ data[k] = v.table
1478
1478
  v.set_key(k)
1479
1479
  self._config_callback(
1480
1480
  val=v.spec.config_value,
@@ -1490,31 +1490,33 @@ class Run:
1490
1490
 
1491
1491
  for k in chart_keys:
1492
1492
  # remove the chart key from the row
1493
- v = row.pop(k)
1493
+ v = data.pop(k)
1494
1494
  if isinstance(v, CustomChart):
1495
- row[v.spec.table_key] = v.table
1496
- return row
1495
+ data[v.spec.table_key] = v.table
1496
+ return data
1497
1497
 
1498
1498
  def _partial_history_callback(
1499
1499
  self,
1500
- row: dict[str, Any],
1500
+ data: dict[str, Any],
1501
1501
  step: int | None = None,
1502
1502
  commit: bool | None = None,
1503
1503
  ) -> None:
1504
- row = row.copy()
1505
- if row:
1506
- row = self._visualization_hack(row)
1504
+ if not (self._backend and self._backend.interface):
1505
+ return
1507
1506
 
1508
- if self._backend and self._backend.interface:
1509
- not_using_tensorboard = len(wandb.patched["tensorboard"]) == 0
1510
-
1511
- self._backend.interface.publish_partial_history(
1512
- row,
1513
- user_step=self._step,
1514
- step=step,
1515
- flush=commit,
1516
- publish_step=not_using_tensorboard,
1517
- )
1507
+ data = data.copy() # avoid modifying the original data
1508
+
1509
+ # Serialize custom charts before publishing
1510
+ data = self._serialize_custom_charts(data)
1511
+
1512
+ not_using_tensorboard = len(wandb.patched["tensorboard"]) == 0
1513
+ self._backend.interface.publish_partial_history(
1514
+ data,
1515
+ user_step=self._step,
1516
+ step=step,
1517
+ flush=commit,
1518
+ publish_step=not_using_tensorboard,
1519
+ )
1518
1520
 
1519
1521
  def _console_callback(self, name: str, data: str) -> None:
1520
1522
  # logger.info("console callback: %s, %s", name, data)
@@ -2134,22 +2136,26 @@ class Run:
2134
2136
 
2135
2137
  Args:
2136
2138
  exit_code: Set to something other than 0 to mark a run as failed
2137
- quiet: Set to true to minimize log output
2139
+ quiet: Deprecated, use `wandb.Settings(quiet=...)` to set this instead.
2138
2140
  """
2139
- return self._finish(exit_code, quiet)
2141
+ if quiet is not None:
2142
+ deprecate.deprecate(
2143
+ field_name=deprecate.Deprecated.run__finish_quiet,
2144
+ warning_message=(
2145
+ "The `quiet` argument to `wandb.run.finish()` is deprecated, "
2146
+ "use `wandb.Settings(quiet=...)` to set this instead."
2147
+ ),
2148
+ )
2149
+ return self._finish(exit_code)
2140
2150
 
2141
2151
  def _finish(
2142
2152
  self,
2143
2153
  exit_code: int | None = None,
2144
- quiet: bool | None = None,
2145
2154
  ) -> None:
2146
2155
  logger.info(f"finishing run {self._get_path()}")
2147
2156
  with telemetry.context(run=self) as tel:
2148
2157
  tel.feature.finish = True
2149
2158
 
2150
- if quiet is not None:
2151
- self._quiet = quiet
2152
-
2153
2159
  # Pop this run (hopefully) from the run stack, to support the "reinit"
2154
2160
  # functionality of wandb.init().
2155
2161
  #
@@ -2442,7 +2448,6 @@ class Run:
2442
2448
  poll_exit_response=self._poll_exit_response,
2443
2449
  internal_messages_response=self._internal_messages_response,
2444
2450
  reporter=self._reporter,
2445
- quiet=self._quiet,
2446
2451
  settings=self._settings,
2447
2452
  printer=self._printer,
2448
2453
  )
@@ -3853,7 +3858,6 @@ class Run:
3853
3858
  poll_exit_response: PollExitResponse | None = None,
3854
3859
  internal_messages_response: InternalMessagesResponse | None = None,
3855
3860
  reporter: Reporter | None = None,
3856
- quiet: bool | None = None,
3857
3861
  *,
3858
3862
  settings: Settings,
3859
3863
  printer: printer.Printer,
@@ -3861,37 +3865,32 @@ class Run:
3861
3865
  Run._footer_history_summary_info(
3862
3866
  history=sampled_history,
3863
3867
  summary=final_summary,
3864
- quiet=quiet,
3865
3868
  settings=settings,
3866
3869
  printer=printer,
3867
3870
  )
3868
3871
 
3869
3872
  Run._footer_sync_info(
3870
3873
  poll_exit_response=poll_exit_response,
3871
- quiet=quiet,
3872
3874
  settings=settings,
3873
3875
  printer=printer,
3874
3876
  )
3875
- Run._footer_log_dir_info(quiet=quiet, settings=settings, printer=printer)
3877
+ Run._footer_log_dir_info(settings=settings, printer=printer)
3876
3878
  Run._footer_notify_wandb_core(
3877
- quiet=quiet,
3878
3879
  settings=settings,
3879
3880
  printer=printer,
3880
3881
  )
3881
3882
  Run._footer_internal_messages(
3882
3883
  internal_messages_response=internal_messages_response,
3883
- quiet=quiet,
3884
3884
  settings=settings,
3885
3885
  printer=printer,
3886
3886
  )
3887
3887
  Run._footer_reporter_warn_err(
3888
- reporter=reporter, quiet=quiet, settings=settings, printer=printer
3888
+ reporter=reporter, settings=settings, printer=printer
3889
3889
  )
3890
3890
 
3891
3891
  @staticmethod
3892
3892
  def _footer_sync_info(
3893
3893
  poll_exit_response: PollExitResponse | None = None,
3894
- quiet: bool | None = None,
3895
3894
  *,
3896
3895
  settings: Settings,
3897
3896
  printer: printer.Printer,
@@ -3900,7 +3899,7 @@ class Run:
3900
3899
  return
3901
3900
 
3902
3901
  if settings._offline:
3903
- if not quiet and not settings.quiet:
3902
+ if not settings.quiet:
3904
3903
  printer.display(
3905
3904
  [
3906
3905
  "You can sync this run to the cloud by running:",
@@ -3929,12 +3928,11 @@ class Run:
3929
3928
 
3930
3929
  @staticmethod
3931
3930
  def _footer_log_dir_info(
3932
- quiet: bool | None = None,
3933
3931
  *,
3934
3932
  settings: Settings,
3935
3933
  printer: printer.Printer,
3936
3934
  ) -> None:
3937
- if (quiet or settings.quiet) or settings.silent:
3935
+ if settings.quiet or settings.silent:
3938
3936
  return
3939
3937
 
3940
3938
  log_dir = settings.log_user or settings.log_internal
@@ -3948,12 +3946,11 @@ class Run:
3948
3946
  def _footer_history_summary_info(
3949
3947
  history: SampledHistoryResponse | None = None,
3950
3948
  summary: GetSummaryResponse | None = None,
3951
- quiet: bool | None = None,
3952
3949
  *,
3953
3950
  settings: Settings,
3954
3951
  printer: printer.Printer,
3955
3952
  ) -> None:
3956
- if (quiet or settings.quiet) or settings.silent:
3953
+ if settings.quiet or settings.silent:
3957
3954
  return
3958
3955
 
3959
3956
  panel = []
@@ -4018,12 +4015,11 @@ class Run:
4018
4015
  @staticmethod
4019
4016
  def _footer_internal_messages(
4020
4017
  internal_messages_response: InternalMessagesResponse | None = None,
4021
- quiet: bool | None = None,
4022
4018
  *,
4023
4019
  settings: Settings,
4024
4020
  printer: printer.Printer,
4025
4021
  ) -> None:
4026
- if (quiet or settings.quiet) or settings.silent:
4022
+ if settings.quiet or settings.silent:
4027
4023
  return
4028
4024
 
4029
4025
  if not internal_messages_response:
@@ -4035,12 +4031,11 @@ class Run:
4035
4031
  @staticmethod
4036
4032
  def _footer_notify_wandb_core(
4037
4033
  *,
4038
- quiet: bool | None = None,
4039
4034
  settings: Settings,
4040
4035
  printer: printer.Printer,
4041
4036
  ) -> None:
4042
4037
  """Prints a message advertising the upcoming core release."""
4043
- if quiet or not settings._require_legacy_service:
4038
+ if settings.quiet or not settings._require_legacy_service:
4044
4039
  return
4045
4040
 
4046
4041
  printer.display(
@@ -4053,12 +4048,11 @@ class Run:
4053
4048
  @staticmethod
4054
4049
  def _footer_reporter_warn_err(
4055
4050
  reporter: Reporter | None = None,
4056
- quiet: bool | None = None,
4057
4051
  *,
4058
4052
  settings: Settings,
4059
4053
  printer: printer.Printer,
4060
4054
  ) -> None:
4061
- if (quiet or settings.quiet) or settings.silent:
4055
+ if settings.quiet or settings.silent:
4062
4056
  return
4063
4057
 
4064
4058
  if not reporter:
@@ -4151,7 +4145,7 @@ def finish(exit_code: int | None = None, quiet: bool | None = None) -> None:
4151
4145
 
4152
4146
  Args:
4153
4147
  exit_code: Set to something other than 0 to mark a run as failed
4154
- quiet: Set to true to minimize log output
4148
+ quiet: Deprecated, use `wandb.Settings(quiet=...)` to set this instead.
4155
4149
  """
4156
4150
  if wandb.run:
4157
4151
  wandb.run.finish(exit_code=exit_code, quiet=quiet)
@@ -160,6 +160,20 @@ def _get_program() -> Optional[str]:
160
160
  return None
161
161
 
162
162
 
163
+ def _preprocess_file_stream_max_line_bytes(val: Any) -> Optional[int]:
164
+ """Preprocess the file_stream_max_line_bytes setting.
165
+
166
+ For now treat negative values as 0, which means use the default.
167
+ """
168
+ try:
169
+ value = int(val)
170
+ if value < 0:
171
+ return None
172
+ return value
173
+ except ValueError:
174
+ return None
175
+
176
+
163
177
  def _runmoment_preprocessor(val: Any) -> Optional[RunMoment]:
164
178
  if isinstance(val, RunMoment) or val is None:
165
179
  return val
@@ -320,6 +334,7 @@ class SettingsData:
320
334
  _file_stream_retry_wait_min_seconds: float # min wait time between retries
321
335
  _file_stream_retry_wait_max_seconds: float # max wait time between retries
322
336
  _file_stream_timeout_seconds: float # timeout for individual HTTP requests
337
+ _file_stream_max_line_bytes: int # max line length for filestream jsonl files
323
338
  # file transfer retry client configuration
324
339
  _file_transfer_retry_max: int
325
340
  _file_transfer_retry_wait_min_seconds: float
@@ -382,10 +397,10 @@ class SettingsData:
382
397
  _stats_disk_paths: Sequence[str] # paths to monitor disk usage
383
398
  _stats_buffer_size: int # number of consolidated samples to buffer before flushing, available in run obj
384
399
  _tmp_code_dir: str
385
- _tracelog: str
386
400
  _unsaved_keys: Sequence[str]
387
401
  _windows: bool
388
402
  _show_operation_stats: bool
403
+ allow_offline_artifacts: bool
389
404
  allow_val_change: bool
390
405
  anonymous: str
391
406
  api_key: str
@@ -670,6 +685,9 @@ class Settings(SettingsData):
670
685
  _file_stream_retry_wait_min_seconds={"preprocessor": float},
671
686
  _file_stream_retry_wait_max_seconds={"preprocessor": float},
672
687
  _file_stream_timeout_seconds={"preprocessor": float},
688
+ _file_stream_max_line_bytes={
689
+ "preprocessor": _preprocess_file_stream_max_line_bytes,
690
+ },
673
691
  _file_transfer_retry_max={"preprocessor": int},
674
692
  _file_transfer_retry_wait_min_seconds={"preprocessor": float},
675
693
  _file_transfer_retry_wait_max_seconds={"preprocessor": float},
@@ -777,6 +795,7 @@ class Settings(SettingsData):
777
795
  "auto_hook": True,
778
796
  },
779
797
  _show_operation_stats={"preprocessor": _str_as_bool},
798
+ allow_offline_artifacts={"value": "True", "preprocessor": _str_as_bool},
780
799
  anonymous={"validator": self._validate_anonymous},
781
800
  api_key={"validator": self._validate_api_key},
782
801
  base_url={
@@ -1677,7 +1696,6 @@ class Settings(SettingsData):
1677
1696
  ) -> None:
1678
1697
  env_prefix: str = "WANDB_"
1679
1698
  special_env_var_names = {
1680
- "WANDB_TRACELOG": "_tracelog",
1681
1699
  "WANDB_DISABLE_SERVICE": "_disable_service",
1682
1700
  "WANDB_SERVICE_TRANSPORT": "_service_transport",
1683
1701
  "WANDB_DIR": "root_dir",
wandb/sdk/wandb_setup.py CHANGED
@@ -21,7 +21,7 @@ import wandb
21
21
  from wandb.sdk.lib import import_hooks
22
22
 
23
23
  from . import wandb_settings
24
- from .lib import config_util, server, tracelog
24
+ from .lib import config_util, server
25
25
 
26
26
  Settings = Union["wandb.sdk.wandb_settings.Settings", Dict[str, Any]]
27
27
 
@@ -114,10 +114,6 @@ class _WandbSetup__WandbSetup: # noqa: N801
114
114
  self._check()
115
115
  self._setup()
116
116
 
117
- tracelog_mode = self._settings._tracelog
118
- if tracelog_mode:
119
- tracelog.enable(tracelog_mode)
120
-
121
117
  def _settings_setup(
122
118
  self,
123
119
  settings: Optional[Settings] = None,
wandb/util.py CHANGED
@@ -1971,9 +1971,9 @@ def get_core_path() -> str:
1971
1971
  bin_path = pathlib.Path(__file__).parent / "bin" / "wandb-core"
1972
1972
  if not bin_path.exists():
1973
1973
  raise WandbCoreNotAvailableError(
1974
- f"Looks like wandb-core is not compiled for your system ({platform.platform()}):"
1975
- " Please contact support at support@wandb.com to request `wandb-core`"
1976
- " support for your system."
1974
+ f"File not found: {bin_path}."
1975
+ "Please contact support at support@wandb.com."
1976
+ f"Your platform is: {platform.platform()}."
1977
1977
  )
1978
1978
 
1979
1979
  return str(bin_path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: wandb
3
- Version: 0.18.6
3
+ Version: 0.18.7
4
4
  Summary: A CLI and library for interacting with the Weights & Biases API.
5
5
  Project-URL: Source, https://github.com/wandb/wandb
6
6
  Project-URL: Bug Reports, https://github.com/wandb/wandb/issues