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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. wandb/__init__.py +1 -1
  2. wandb/__init__.pyi +2 -2
  3. wandb/apis/public/api.py +5 -1
  4. wandb/proto/v3/wandb_settings_pb2.py +2 -2
  5. wandb/proto/v3/wandb_telemetry_pb2.py +4 -4
  6. wandb/proto/v4/wandb_settings_pb2.py +2 -2
  7. wandb/proto/v4/wandb_telemetry_pb2.py +4 -4
  8. wandb/proto/v5/wandb_settings_pb2.py +2 -2
  9. wandb/proto/v5/wandb_telemetry_pb2.py +4 -4
  10. wandb/proto/wandb_deprecated.py +2 -0
  11. wandb/sdk/artifacts/artifact.py +1 -1
  12. wandb/sdk/data_types/base_types/wb_value.py +20 -10
  13. wandb/sdk/interface/interface_queue.py +0 -6
  14. wandb/sdk/interface/router.py +1 -2
  15. wandb/sdk/interface/router_queue.py +0 -3
  16. wandb/sdk/interface/router_relay.py +0 -2
  17. wandb/sdk/internal/handler.py +1 -3
  18. wandb/sdk/internal/internal.py +0 -14
  19. wandb/sdk/internal/internal_util.py +0 -3
  20. wandb/sdk/internal/sender.py +0 -2
  21. wandb/sdk/internal/writer.py +1 -3
  22. wandb/sdk/launch/__init__.py +2 -1
  23. wandb/sdk/lib/_settings_toposort_generated.py +1 -0
  24. wandb/sdk/lib/sock_client.py +0 -5
  25. wandb/sdk/service/server.py +2 -11
  26. wandb/sdk/service/server_sock.py +0 -2
  27. wandb/sdk/wandb_run.py +44 -50
  28. wandb/sdk/wandb_settings.py +20 -2
  29. wandb/sdk/wandb_setup.py +1 -5
  30. wandb/util.py +3 -3
  31. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/METADATA +1 -2
  32. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/RECORD +35 -36
  33. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/WHEEL +1 -1
  34. wandb/sdk/lib/tracelog.py +0 -255
  35. {wandb-0.18.6.dist-info → wandb-0.18.7.dist-info}/entry_points.txt +0 -0
  36. {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
@@ -27,7 +27,6 @@ License: MIT License
27
27
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
28
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
29
  SOFTWARE.
30
- License-File: LICENSE
31
30
  Classifier: Development Status :: 5 - Production/Stable
32
31
  Classifier: Intended Audience :: Developers
33
32
  Classifier: Intended Audience :: Science/Research