wandb 0.22.2__py3-none-musllinux_1_2_aarch64.whl → 0.22.3__py3-none-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wandb/__init__.py +1 -1
 - wandb/__init__.pyi +2 -2
 - wandb/_pydantic/__init__.py +8 -1
 - wandb/_pydantic/base.py +54 -18
 - wandb/_pydantic/field_types.py +8 -3
 - wandb/_pydantic/pagination.py +46 -0
 - wandb/_pydantic/utils.py +2 -2
 - wandb/apis/public/api.py +24 -19
 - wandb/apis/public/artifacts.py +259 -270
 - wandb/apis/public/registries/_utils.py +40 -54
 - wandb/apis/public/registries/registries_search.py +70 -85
 - wandb/apis/public/registries/registry.py +173 -156
 - wandb/apis/public/runs.py +27 -6
 - wandb/apis/public/utils.py +43 -20
 - wandb/automations/_generated/create_automation.py +2 -2
 - wandb/automations/_generated/create_generic_webhook_integration.py +4 -4
 - wandb/automations/_generated/delete_automation.py +2 -2
 - wandb/automations/_generated/fragments.py +31 -52
 - wandb/automations/_generated/generic_webhook_integrations_by_entity.py +3 -3
 - wandb/automations/_generated/get_automations.py +3 -3
 - wandb/automations/_generated/get_automations_by_entity.py +3 -3
 - wandb/automations/_generated/input_types.py +9 -9
 - wandb/automations/_generated/integrations_by_entity.py +3 -3
 - wandb/automations/_generated/operations.py +6 -6
 - wandb/automations/_generated/slack_integrations_by_entity.py +3 -3
 - wandb/automations/_generated/update_automation.py +2 -2
 - wandb/automations/_utils.py +3 -3
 - wandb/automations/actions.py +3 -3
 - wandb/automations/automations.py +6 -5
 - wandb/bin/gpu_stats +0 -0
 - wandb/bin/wandb-core +0 -0
 - wandb/cli/beta.py +8 -2
 - wandb/cli/beta_leet.py +2 -1
 - wandb/cli/beta_sync.py +1 -1
 - wandb/errors/term.py +8 -8
 - wandb/jupyter.py +0 -51
 - wandb/old/settings.py +6 -6
 - wandb/proto/v3/wandb_internal_pb2.py +351 -352
 - wandb/proto/v3/wandb_server_pb2.py +38 -37
 - wandb/proto/v3/wandb_settings_pb2.py +2 -2
 - wandb/proto/v3/wandb_sync_pb2.py +19 -6
 - wandb/proto/v4/wandb_internal_pb2.py +351 -352
 - wandb/proto/v4/wandb_server_pb2.py +38 -37
 - wandb/proto/v4/wandb_settings_pb2.py +2 -2
 - wandb/proto/v4/wandb_sync_pb2.py +10 -6
 - wandb/proto/v5/wandb_internal_pb2.py +351 -352
 - wandb/proto/v5/wandb_server_pb2.py +38 -37
 - wandb/proto/v5/wandb_settings_pb2.py +2 -2
 - wandb/proto/v5/wandb_sync_pb2.py +10 -6
 - wandb/proto/v6/wandb_internal_pb2.py +351 -352
 - wandb/proto/v6/wandb_server_pb2.py +38 -37
 - wandb/proto/v6/wandb_settings_pb2.py +2 -2
 - wandb/proto/v6/wandb_sync_pb2.py +10 -6
 - wandb/sdk/artifacts/_generated/__init__.py +96 -40
 - wandb/sdk/artifacts/_generated/add_aliases.py +3 -3
 - wandb/sdk/artifacts/_generated/add_artifact_collection_tags.py +26 -0
 - wandb/sdk/artifacts/_generated/artifact_by_id.py +2 -2
 - wandb/sdk/artifacts/_generated/artifact_by_name.py +3 -3
 - wandb/sdk/artifacts/_generated/artifact_collection_membership_file_urls.py +27 -8
 - wandb/sdk/artifacts/_generated/artifact_collection_membership_files.py +27 -8
 - wandb/sdk/artifacts/_generated/artifact_created_by.py +7 -20
 - wandb/sdk/artifacts/_generated/artifact_file_urls.py +19 -6
 - wandb/sdk/artifacts/_generated/artifact_membership_by_name.py +26 -0
 - wandb/sdk/artifacts/_generated/artifact_type.py +5 -5
 - wandb/sdk/artifacts/_generated/artifact_used_by.py +8 -17
 - wandb/sdk/artifacts/_generated/artifact_version_files.py +19 -8
 - wandb/sdk/artifacts/_generated/delete_aliases.py +3 -3
 - wandb/sdk/artifacts/_generated/delete_artifact.py +4 -4
 - wandb/sdk/artifacts/_generated/delete_artifact_collection_tags.py +23 -0
 - wandb/sdk/artifacts/_generated/delete_artifact_portfolio.py +4 -4
 - wandb/sdk/artifacts/_generated/delete_artifact_sequence.py +4 -4
 - wandb/sdk/artifacts/_generated/delete_registry.py +21 -0
 - wandb/sdk/artifacts/_generated/fetch_artifact_manifest.py +8 -20
 - wandb/sdk/artifacts/_generated/fetch_linked_artifacts.py +13 -35
 - wandb/sdk/artifacts/_generated/fetch_org_info_from_entity.py +28 -0
 - wandb/sdk/artifacts/_generated/fetch_registries.py +18 -8
 - wandb/sdk/{projects → artifacts}/_generated/fetch_registry.py +4 -4
 - wandb/sdk/artifacts/_generated/fragments.py +183 -333
 - wandb/sdk/artifacts/_generated/input_types.py +133 -7
 - wandb/sdk/artifacts/_generated/link_artifact.py +5 -5
 - wandb/sdk/artifacts/_generated/operations.py +1053 -548
 - wandb/sdk/artifacts/_generated/project_artifact_collection.py +9 -77
 - wandb/sdk/artifacts/_generated/project_artifact_collections.py +21 -9
 - wandb/sdk/artifacts/_generated/project_artifact_type.py +3 -3
 - wandb/sdk/artifacts/_generated/project_artifact_types.py +19 -6
 - wandb/sdk/artifacts/_generated/project_artifacts.py +7 -8
 - wandb/sdk/artifacts/_generated/registry_collections.py +21 -9
 - wandb/sdk/artifacts/_generated/registry_versions.py +20 -9
 - wandb/sdk/artifacts/_generated/rename_registry.py +25 -0
 - wandb/sdk/artifacts/_generated/run_input_artifacts.py +5 -9
 - wandb/sdk/artifacts/_generated/run_output_artifacts.py +5 -9
 - wandb/sdk/artifacts/_generated/type_info.py +2 -2
 - wandb/sdk/artifacts/_generated/unlink_artifact.py +3 -5
 - wandb/sdk/artifacts/_generated/update_artifact.py +3 -3
 - wandb/sdk/artifacts/_generated/update_artifact_collection_type.py +28 -0
 - wandb/sdk/artifacts/_generated/update_artifact_portfolio.py +7 -16
 - wandb/sdk/artifacts/_generated/update_artifact_sequence.py +7 -16
 - wandb/sdk/artifacts/_generated/upsert_registry.py +25 -0
 - wandb/sdk/artifacts/_gqlutils.py +170 -6
 - wandb/sdk/artifacts/_models/__init__.py +9 -0
 - wandb/sdk/artifacts/_models/artifact_collection.py +109 -0
 - wandb/sdk/artifacts/_models/manifest.py +26 -0
 - wandb/sdk/artifacts/_models/pagination.py +26 -0
 - wandb/sdk/artifacts/_models/registry.py +100 -0
 - wandb/sdk/artifacts/_validators.py +45 -27
 - wandb/sdk/artifacts/artifact.py +220 -215
 - wandb/sdk/artifacts/artifact_file_cache.py +1 -1
 - wandb/sdk/artifacts/artifact_manifest.py +37 -32
 - wandb/sdk/artifacts/artifact_manifest_entry.py +80 -125
 - wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +43 -61
 - wandb/sdk/artifacts/storage_handlers/gcs_handler.py +8 -6
 - wandb/sdk/data_types/image.py +2 -2
 - wandb/sdk/interface/interface.py +72 -64
 - wandb/sdk/interface/interface_queue.py +27 -18
 - wandb/sdk/interface/interface_shared.py +61 -23
 - wandb/sdk/interface/interface_sock.py +9 -5
 - wandb/sdk/internal/_generated/server_features_query.py +4 -4
 - wandb/sdk/launch/inputs/schema.py +13 -10
 - wandb/sdk/lib/apikey.py +8 -12
 - wandb/sdk/lib/asyncio_compat.py +1 -1
 - wandb/sdk/lib/asyncio_manager.py +5 -5
 - wandb/sdk/lib/console_capture.py +38 -30
 - wandb/sdk/lib/progress.py +159 -64
 - wandb/sdk/lib/retry.py +3 -2
 - wandb/sdk/lib/service/service_connection.py +2 -2
 - wandb/sdk/lib/wb_logging.py +2 -1
 - wandb/sdk/mailbox/mailbox.py +1 -1
 - wandb/sdk/wandb_init.py +10 -13
 - wandb/sdk/wandb_run.py +9 -46
 - wandb/sdk/wandb_settings.py +102 -19
 - {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/METADATA +2 -1
 - {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/RECORD +135 -134
 - wandb/sdk/artifacts/_generated/artifact_via_membership_by_name.py +0 -26
 - wandb/sdk/artifacts/_generated/create_artifact_collection_tag_assignments.py +0 -36
 - wandb/sdk/artifacts/_generated/delete_artifact_collection_tag_assignments.py +0 -25
 - wandb/sdk/artifacts/_generated/move_artifact_collection.py +0 -35
 - wandb/sdk/projects/_generated/__init__.py +0 -26
 - wandb/sdk/projects/_generated/delete_project.py +0 -22
 - wandb/sdk/projects/_generated/enums.py +0 -4
 - wandb/sdk/projects/_generated/fragments.py +0 -41
 - wandb/sdk/projects/_generated/input_types.py +0 -13
 - wandb/sdk/projects/_generated/operations.py +0 -88
 - wandb/sdk/projects/_generated/rename_project.py +0 -27
 - wandb/sdk/projects/_generated/upsert_registry_project.py +0 -27
 - {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/WHEEL +0 -0
 - {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/entry_points.txt +0 -0
 - {wandb-0.22.2.dist-info → wandb-0.22.3.dist-info}/licenses/LICENSE +0 -0
 
    
        wandb/sdk/wandb_run.py
    CHANGED
    
    | 
         @@ -1,6 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            from __future__ import annotations
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            import asyncio
         
     | 
| 
       4 
3 
     | 
    
         
             
            import functools
         
     | 
| 
       5 
4 
     | 
    
         
             
            import glob
         
     | 
| 
       6 
5 
     | 
    
         
             
            import json
         
     | 
| 
         @@ -33,7 +32,6 @@ from wandb.errors import CommError, UsageError 
     | 
|
| 
       33 
32 
     | 
    
         
             
            from wandb.errors.links import url_registry
         
     | 
| 
       34 
33 
     | 
    
         
             
            from wandb.integration.torch import wandb_torch
         
     | 
| 
       35 
34 
     | 
    
         
             
            from wandb.plot import CustomChart, Visualize
         
     | 
| 
       36 
     | 
    
         
            -
            from wandb.proto import wandb_internal_pb2 as pb
         
     | 
| 
       37 
35 
     | 
    
         
             
            from wandb.proto.wandb_deprecated import Deprecated
         
     | 
| 
       38 
36 
     | 
    
         
             
            from wandb.proto.wandb_internal_pb2 import (
         
     | 
| 
       39 
37 
     | 
    
         
             
                MetricRecord,
         
     | 
| 
         @@ -44,7 +42,7 @@ from wandb.proto.wandb_internal_pb2 import ( 
     | 
|
| 
       44 
42 
     | 
    
         
             
            from wandb.sdk.artifacts._internal_artifact import InternalArtifact
         
     | 
| 
       45 
43 
     | 
    
         
             
            from wandb.sdk.artifacts.artifact import Artifact
         
     | 
| 
       46 
44 
     | 
    
         
             
            from wandb.sdk.internal import job_builder
         
     | 
| 
       47 
     | 
    
         
            -
            from wandb.sdk.lib import  
     | 
| 
      
 45 
     | 
    
         
            +
            from wandb.sdk.lib import wb_logging
         
     | 
| 
       48 
46 
     | 
    
         
             
            from wandb.sdk.lib.import_hooks import (
         
     | 
| 
       49 
47 
     | 
    
         
             
                register_post_import_hook,
         
     | 
| 
       50 
48 
     | 
    
         
             
                unregister_post_import_hook,
         
     | 
| 
         @@ -489,7 +487,7 @@ class Run: 
     | 
|
| 
       489 
487 
     | 
    
         | 
| 
       490 
488 
     | 
    
         
             
                You can log data to a run with `wandb.Run.log()`. Anything you log using
         
     | 
| 
       491 
489 
     | 
    
         
             
                `wandb.Run.log()` is sent to that run. See
         
     | 
| 
       492 
     | 
    
         
            -
                [Create an experiment](https://docs.wandb.ai/guides/track/ 
     | 
| 
      
 490 
     | 
    
         
            +
                [Create an experiment](https://docs.wandb.ai/guides/track/create-an-experiment/) or
         
     | 
| 
       493 
491 
     | 
    
         
             
                [`wandb.init`](https://docs.wandb.ai/ref/python/init/) API reference page
         
     | 
| 
       494 
492 
     | 
    
         
             
                or more information.
         
     | 
| 
       495 
493 
     | 
    
         | 
| 
         @@ -1574,15 +1572,13 @@ class Run: 
     | 
|
| 
       1574 
1572 
     | 
    
         | 
| 
       1575 
1573 
     | 
    
         
             
                @_log_to_run
         
     | 
| 
       1576 
1574 
     | 
    
         
             
                def _console_callback(self, name: str, data: str) -> None:
         
     | 
| 
       1577 
     | 
    
         
            -
                    # logger.info("console callback: %s, %s", name, data)
         
     | 
| 
       1578 
1575 
     | 
    
         
             
                    if self._backend and self._backend.interface:
         
     | 
| 
       1579 
     | 
    
         
            -
                         
     | 
| 
      
 1576 
     | 
    
         
            +
                        # nowait=True so that this can be called from an asyncio context.
         
     | 
| 
      
 1577 
     | 
    
         
            +
                        self._backend.interface.publish_output(name, data, nowait=True)
         
     | 
| 
       1580 
1578 
     | 
    
         | 
| 
       1581 
1579 
     | 
    
         
             
                @_log_to_run
         
     | 
| 
       1582 
1580 
     | 
    
         
             
                @_raise_if_finished
         
     | 
| 
       1583 
1581 
     | 
    
         
             
                def _console_raw_callback(self, name: str, data: str) -> None:
         
     | 
| 
       1584 
     | 
    
         
            -
                    # logger.info("console callback: %s, %s", name, data)
         
     | 
| 
       1585 
     | 
    
         
            -
             
     | 
| 
       1586 
1582 
     | 
    
         
             
                    # NOTE: console output is only allowed on the process which installed the callback
         
     | 
| 
       1587 
1583 
     | 
    
         
             
                    # this will prevent potential corruption in the socket to the service.  Other methods
         
     | 
| 
       1588 
1584 
     | 
    
         
             
                    # are protected by the _attach run decorator, but this callback was installed on the
         
     | 
| 
         @@ -1592,7 +1588,8 @@ class Run: 
     | 
|
| 
       1592 
1588 
     | 
    
         
             
                        return
         
     | 
| 
       1593 
1589 
     | 
    
         | 
| 
       1594 
1590 
     | 
    
         
             
                    if self._backend and self._backend.interface:
         
     | 
| 
       1595 
     | 
    
         
            -
                         
     | 
| 
      
 1591 
     | 
    
         
            +
                        # nowait=True so that this can be called from an asyncio context.
         
     | 
| 
      
 1592 
     | 
    
         
            +
                        self._backend.interface.publish_output_raw(name, data, nowait=True)
         
     | 
| 
       1596 
1593 
     | 
    
         | 
| 
       1597 
1594 
     | 
    
         
             
                @_log_to_run
         
     | 
| 
       1598 
1595 
     | 
    
         
             
                def _tensorboard_callback(
         
     | 
| 
         @@ -1861,7 +1858,7 @@ class Run: 
     | 
|
| 
       1861 
1858 
     | 
    
         
             
                        run.log({"accuracy": 0.8}, step=current_step)
         
     | 
| 
       1862 
1859 
     | 
    
         
             
                        current_step += 1
         
     | 
| 
       1863 
1860 
     | 
    
         
             
                        run.log({"train-loss": 0.4}, step=current_step)
         
     | 
| 
       1864 
     | 
    
         
            -
                        run.log({"accuracy": 0.9}, step=current_step)
         
     | 
| 
      
 1861 
     | 
    
         
            +
                        run.log({"accuracy": 0.9}, step=current_step, commit=True)
         
     | 
| 
       1865 
1862 
     | 
    
         
             
                    ```
         
     | 
| 
       1866 
1863 
     | 
    
         | 
| 
       1867 
1864 
     | 
    
         
             
                    Args:
         
     | 
| 
         @@ -2682,41 +2679,6 @@ class Run: 
     | 
|
| 
       2682 
2679 
     | 
    
         
             
                    else:
         
     | 
| 
       2683 
2680 
     | 
    
         
             
                        return artifact
         
     | 
| 
       2684 
2681 
     | 
    
         | 
| 
       2685 
     | 
    
         
            -
                async def _display_finish_stats(
         
     | 
| 
       2686 
     | 
    
         
            -
                    self,
         
     | 
| 
       2687 
     | 
    
         
            -
                    progress_printer: progress.ProgressPrinter,
         
     | 
| 
       2688 
     | 
    
         
            -
                ) -> None:
         
     | 
| 
       2689 
     | 
    
         
            -
                    last_result: Result | None = None
         
     | 
| 
       2690 
     | 
    
         
            -
             
     | 
| 
       2691 
     | 
    
         
            -
                    async def loop_update_printer() -> None:
         
     | 
| 
       2692 
     | 
    
         
            -
                        while True:
         
     | 
| 
       2693 
     | 
    
         
            -
                            if last_result:
         
     | 
| 
       2694 
     | 
    
         
            -
                                progress_printer.update(
         
     | 
| 
       2695 
     | 
    
         
            -
                                    [last_result.response.poll_exit_response],
         
     | 
| 
       2696 
     | 
    
         
            -
                                )
         
     | 
| 
       2697 
     | 
    
         
            -
                            await asyncio.sleep(0.1)
         
     | 
| 
       2698 
     | 
    
         
            -
             
     | 
| 
       2699 
     | 
    
         
            -
                    async def loop_poll_exit() -> None:
         
     | 
| 
       2700 
     | 
    
         
            -
                        nonlocal last_result
         
     | 
| 
       2701 
     | 
    
         
            -
                        assert self._backend and self._backend.interface
         
     | 
| 
       2702 
     | 
    
         
            -
             
     | 
| 
       2703 
     | 
    
         
            -
                        while True:
         
     | 
| 
       2704 
     | 
    
         
            -
                            handle = await self._backend.interface.deliver_async(
         
     | 
| 
       2705 
     | 
    
         
            -
                                pb.Record(request=pb.Request(poll_exit=pb.PollExitRequest()))
         
     | 
| 
       2706 
     | 
    
         
            -
                            )
         
     | 
| 
       2707 
     | 
    
         
            -
             
     | 
| 
       2708 
     | 
    
         
            -
                            time_start = time.monotonic()
         
     | 
| 
       2709 
     | 
    
         
            -
                            last_result = await handle.wait_async(timeout=None)
         
     | 
| 
       2710 
     | 
    
         
            -
             
     | 
| 
       2711 
     | 
    
         
            -
                            # Update at most once a second.
         
     | 
| 
       2712 
     | 
    
         
            -
                            time_elapsed = time.monotonic() - time_start
         
     | 
| 
       2713 
     | 
    
         
            -
                            if time_elapsed < 1:
         
     | 
| 
       2714 
     | 
    
         
            -
                                await asyncio.sleep(1 - time_elapsed)
         
     | 
| 
       2715 
     | 
    
         
            -
             
     | 
| 
       2716 
     | 
    
         
            -
                    async with asyncio_compat.open_task_group() as task_group:
         
     | 
| 
       2717 
     | 
    
         
            -
                        task_group.start_soon(loop_update_printer())
         
     | 
| 
       2718 
     | 
    
         
            -
                        task_group.start_soon(loop_poll_exit())
         
     | 
| 
       2719 
     | 
    
         
            -
             
     | 
| 
       2720 
2682 
     | 
    
         
             
                def _on_finish(self) -> None:
         
     | 
| 
       2721 
2683 
     | 
    
         
             
                    trigger.call("on_finished")
         
     | 
| 
       2722 
2684 
     | 
    
         | 
| 
         @@ -2741,8 +2703,9 @@ class Run: 
     | 
|
| 
       2741 
2703 
     | 
    
         
             
                            exit_handle,
         
     | 
| 
       2742 
2704 
     | 
    
         
             
                            timeout=None,
         
     | 
| 
       2743 
2705 
     | 
    
         
             
                            display_progress=functools.partial(
         
     | 
| 
       2744 
     | 
    
         
            -
                                 
     | 
| 
      
 2706 
     | 
    
         
            +
                                progress.loop_printing_operation_stats,
         
     | 
| 
       2745 
2707 
     | 
    
         
             
                                progress_printer,
         
     | 
| 
      
 2708 
     | 
    
         
            +
                                self._backend.interface,
         
     | 
| 
       2746 
2709 
     | 
    
         
             
                            ),
         
     | 
| 
       2747 
2710 
     | 
    
         
             
                        )
         
     | 
| 
       2748 
2711 
     | 
    
         | 
    
        wandb/sdk/wandb_settings.py
    CHANGED
    
    | 
         @@ -254,7 +254,40 @@ class Settings(BaseModel, validate_assignment=True): 
     | 
|
| 
       254 
254 
     | 
    
         
             
                """
         
     | 
| 
       255 
255 
     | 
    
         | 
| 
       256 
256 
     | 
    
         
             
                console_multipart: bool = False
         
     | 
| 
       257 
     | 
    
         
            -
                """ 
     | 
| 
      
 257 
     | 
    
         
            +
                """Enable multipart console logging.
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
                When True, the SDK writes console output to timestamped files
         
     | 
| 
      
 260 
     | 
    
         
            +
                under the `logs/` directory instead of a single `output.log`.
         
     | 
| 
      
 261 
     | 
    
         
            +
             
     | 
| 
      
 262 
     | 
    
         
            +
                Each part is uploaded as soon as it is closed, giving users live
         
     | 
| 
      
 263 
     | 
    
         
            +
                access to logs while the run is active. Rollover cadence is
         
     | 
| 
      
 264 
     | 
    
         
            +
                controlled by `console_chunk_max_bytes` and/or `console_chunk_max_seconds`.
         
     | 
| 
      
 265 
     | 
    
         
            +
                If both limits are `0`, all logs are uploaded once at run finish.
         
     | 
| 
      
 266 
     | 
    
         
            +
             
     | 
| 
      
 267 
     | 
    
         
            +
                Note: Uploaded chunks are immutable; terminal control sequences
         
     | 
| 
      
 268 
     | 
    
         
            +
                that modify previous lines (e.g., progress bars using carriage returns)
         
     | 
| 
      
 269 
     | 
    
         
            +
                only affect the current chunk.
         
     | 
| 
      
 270 
     | 
    
         
            +
                """
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
                console_chunk_max_bytes: int = 0
         
     | 
| 
      
 273 
     | 
    
         
            +
                """Size-based rollover threshold for multipart console logs, in bytes.
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
      
 275 
     | 
    
         
            +
                Starts a new console log file when the current part reaches this
         
     | 
| 
      
 276 
     | 
    
         
            +
                size. Has an effect only when `console_multipart` is `True`.
         
     | 
| 
      
 277 
     | 
    
         
            +
                Can be combined with `console_chunk_max_seconds`; whichever limit is
         
     | 
| 
      
 278 
     | 
    
         
            +
                hit first triggers the rollover. A value of `0` disables the
         
     | 
| 
      
 279 
     | 
    
         
            +
                size-based limit.
         
     | 
| 
      
 280 
     | 
    
         
            +
                """
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                console_chunk_max_seconds: int = 0
         
     | 
| 
      
 283 
     | 
    
         
            +
                """Time-based rollover threshold for multipart console logs, in seconds.
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
                Starts a new console log file after this many seconds have elapsed
         
     | 
| 
      
 286 
     | 
    
         
            +
                since the current part began. Requires `console_multipart` to be
         
     | 
| 
      
 287 
     | 
    
         
            +
                `True`.  May be used with `console_chunk_max_bytes`; the first limit
         
     | 
| 
      
 288 
     | 
    
         
            +
                reached closes the part. A value of `0` disables the time-based
         
     | 
| 
      
 289 
     | 
    
         
            +
                limit.
         
     | 
| 
      
 290 
     | 
    
         
            +
                """
         
     | 
| 
       258 
291 
     | 
    
         | 
| 
       259 
292 
     | 
    
         
             
                credentials_file: str = Field(
         
     | 
| 
       260 
293 
     | 
    
         
             
                    default_factory=lambda: str(credentials.DEFAULT_WANDB_CREDENTIALS_FILE)
         
     | 
| 
         @@ -1084,6 +1117,30 @@ class Settings(BaseModel, validate_assignment=True): 
     | 
|
| 
       1084 
1117 
     | 
    
         | 
| 
       1085 
1118 
     | 
    
         
             
                    return "wrap"
         
     | 
| 
       1086 
1119 
     | 
    
         | 
| 
      
 1120 
     | 
    
         
            +
                @field_validator("console_chunk_max_bytes", mode="after")
         
     | 
| 
      
 1121 
     | 
    
         
            +
                @classmethod
         
     | 
| 
      
 1122 
     | 
    
         
            +
                def validate_console_chunk_max_bytes(cls, value):
         
     | 
| 
      
 1123 
     | 
    
         
            +
                    """Validate the console_chunk_max_bytes value.
         
     | 
| 
      
 1124 
     | 
    
         
            +
             
     | 
| 
      
 1125 
     | 
    
         
            +
                    <!-- lazydoc-ignore: internal -->
         
     | 
| 
      
 1126 
     | 
    
         
            +
                    """
         
     | 
| 
      
 1127 
     | 
    
         
            +
                    if value < 0:
         
     | 
| 
      
 1128 
     | 
    
         
            +
                        raise ValueError("console_chunk_max_bytes must be non-negative")
         
     | 
| 
      
 1129 
     | 
    
         
            +
             
     | 
| 
      
 1130 
     | 
    
         
            +
                    return value
         
     | 
| 
      
 1131 
     | 
    
         
            +
             
     | 
| 
      
 1132 
     | 
    
         
            +
                @field_validator("console_chunk_max_seconds", mode="after")
         
     | 
| 
      
 1133 
     | 
    
         
            +
                @classmethod
         
     | 
| 
      
 1134 
     | 
    
         
            +
                def validate_console_chunk_max_seconds(cls, value):
         
     | 
| 
      
 1135 
     | 
    
         
            +
                    """Validate the console_chunk_max_seconds value.
         
     | 
| 
      
 1136 
     | 
    
         
            +
             
     | 
| 
      
 1137 
     | 
    
         
            +
                    <!-- lazydoc-ignore: internal -->
         
     | 
| 
      
 1138 
     | 
    
         
            +
                    """
         
     | 
| 
      
 1139 
     | 
    
         
            +
                    if value < 0:
         
     | 
| 
      
 1140 
     | 
    
         
            +
                        raise ValueError("console_chunk_max_seconds must be non-negative")
         
     | 
| 
      
 1141 
     | 
    
         
            +
             
     | 
| 
      
 1142 
     | 
    
         
            +
                    return value
         
     | 
| 
      
 1143 
     | 
    
         
            +
             
     | 
| 
       1087 
1144 
     | 
    
         
             
                @field_validator("x_executable", mode="before")
         
     | 
| 
       1088 
1145 
     | 
    
         
             
                @classmethod
         
     | 
| 
       1089 
1146 
     | 
    
         
             
                def validate_x_executable(cls, value):
         
     | 
| 
         @@ -1914,24 +1971,7 @@ class Settings(BaseModel, validate_assignment=True): 
     | 
|
| 
       1914 
1971 
     | 
    
         
             
                    program = self.program or self._get_program()
         
     | 
| 
       1915 
1972 
     | 
    
         | 
| 
       1916 
1973 
     | 
    
         
             
                    if program is not None:
         
     | 
| 
       1917 
     | 
    
         
            -
                         
     | 
| 
       1918 
     | 
    
         
            -
                            root = (
         
     | 
| 
       1919 
     | 
    
         
            -
                                GitRepo().root or os.getcwd()
         
     | 
| 
       1920 
     | 
    
         
            -
                                if not self.disable_git
         
     | 
| 
       1921 
     | 
    
         
            -
                                else os.getcwd()
         
     | 
| 
       1922 
     | 
    
         
            -
                            )
         
     | 
| 
       1923 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       1924 
     | 
    
         
            -
                            # if the git command fails, fall back to the current working directory
         
     | 
| 
       1925 
     | 
    
         
            -
                            root = os.getcwd()
         
     | 
| 
       1926 
     | 
    
         
            -
             
     | 
| 
       1927 
     | 
    
         
            -
                        self.program_relpath = self.program_relpath or self._get_program_relpath(
         
     | 
| 
       1928 
     | 
    
         
            -
                            program, root
         
     | 
| 
       1929 
     | 
    
         
            -
                        )
         
     | 
| 
       1930 
     | 
    
         
            -
                        program_abspath = os.path.abspath(
         
     | 
| 
       1931 
     | 
    
         
            -
                            os.path.join(root, os.path.relpath(os.getcwd(), root), program)
         
     | 
| 
       1932 
     | 
    
         
            -
                        )
         
     | 
| 
       1933 
     | 
    
         
            -
                        if os.path.exists(program_abspath):
         
     | 
| 
       1934 
     | 
    
         
            -
                            self.program_abspath = program_abspath
         
     | 
| 
      
 1974 
     | 
    
         
            +
                        self._setup_code_paths(program)
         
     | 
| 
       1935 
1975 
     | 
    
         
             
                    else:
         
     | 
| 
       1936 
1976 
     | 
    
         
             
                        program = "<python with no main file>"
         
     | 
| 
       1937 
1977 
     | 
    
         | 
| 
         @@ -2196,3 +2236,46 @@ class Settings(BaseModel, validate_assignment=True): 
     | 
|
| 
       2196 
2236 
     | 
    
         
             
                        This is a compatibility property for Pydantic v1 to mimic v2's model_fields_set.
         
     | 
| 
       2197 
2237 
     | 
    
         
             
                        """
         
     | 
| 
       2198 
2238 
     | 
    
         
             
                        return getattr(self, "__fields_set__", set())
         
     | 
| 
      
 2239 
     | 
    
         
            +
             
     | 
| 
      
 2240 
     | 
    
         
            +
                def _setup_code_paths(self, program: str):
         
     | 
| 
      
 2241 
     | 
    
         
            +
                    """Sets the program_abspath and program_relpath settings."""
         
     | 
| 
      
 2242 
     | 
    
         
            +
                    if self._jupyter and self.x_jupyter_root:
         
     | 
| 
      
 2243 
     | 
    
         
            +
                        self._infer_code_paths_for_jupyter(program)
         
     | 
| 
      
 2244 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 2245 
     | 
    
         
            +
                        self._infer_code_path_for_program(program)
         
     | 
| 
      
 2246 
     | 
    
         
            +
             
     | 
| 
      
 2247 
     | 
    
         
            +
                def _infer_code_path_for_program(self, program: str):
         
     | 
| 
      
 2248 
     | 
    
         
            +
                    """Finds the program's absolute and relative paths."""
         
     | 
| 
      
 2249 
     | 
    
         
            +
                    try:
         
     | 
| 
      
 2250 
     | 
    
         
            +
                        root = (
         
     | 
| 
      
 2251 
     | 
    
         
            +
                            GitRepo().root or os.getcwd() if not self.disable_git else os.getcwd()
         
     | 
| 
      
 2252 
     | 
    
         
            +
                        )
         
     | 
| 
      
 2253 
     | 
    
         
            +
                    except Exception:
         
     | 
| 
      
 2254 
     | 
    
         
            +
                        # if the git command fails, fall back to the current working directory
         
     | 
| 
      
 2255 
     | 
    
         
            +
                        root = os.getcwd()
         
     | 
| 
      
 2256 
     | 
    
         
            +
             
     | 
| 
      
 2257 
     | 
    
         
            +
                    self.program_relpath = self.program_relpath or self._get_program_relpath(
         
     | 
| 
      
 2258 
     | 
    
         
            +
                        program, root
         
     | 
| 
      
 2259 
     | 
    
         
            +
                    )
         
     | 
| 
      
 2260 
     | 
    
         
            +
             
     | 
| 
      
 2261 
     | 
    
         
            +
                    program_abspath = os.path.abspath(
         
     | 
| 
      
 2262 
     | 
    
         
            +
                        os.path.join(root, os.path.relpath(os.getcwd(), root), program)
         
     | 
| 
      
 2263 
     | 
    
         
            +
                    )
         
     | 
| 
      
 2264 
     | 
    
         
            +
             
     | 
| 
      
 2265 
     | 
    
         
            +
                    if os.path.exists(program_abspath):
         
     | 
| 
      
 2266 
     | 
    
         
            +
                        self.program_abspath = program_abspath
         
     | 
| 
      
 2267 
     | 
    
         
            +
             
     | 
| 
      
 2268 
     | 
    
         
            +
                def _infer_code_paths_for_jupyter(self, program: str):
         
     | 
| 
      
 2269 
     | 
    
         
            +
                    """Find the notebook's absolute and relative paths.
         
     | 
| 
      
 2270 
     | 
    
         
            +
             
     | 
| 
      
 2271 
     | 
    
         
            +
                    Since the notebook's execution environment
         
     | 
| 
      
 2272 
     | 
    
         
            +
                    is not the same as the current working directory.
         
     | 
| 
      
 2273 
     | 
    
         
            +
                    We utilize the metadata provided by the jupyter server.
         
     | 
| 
      
 2274 
     | 
    
         
            +
                    """
         
     | 
| 
      
 2275 
     | 
    
         
            +
                    if not self.x_jupyter_root or not program:
         
     | 
| 
      
 2276 
     | 
    
         
            +
                        return None
         
     | 
| 
      
 2277 
     | 
    
         
            +
             
     | 
| 
      
 2278 
     | 
    
         
            +
                    self.program_abspath = os.path.abspath(
         
     | 
| 
      
 2279 
     | 
    
         
            +
                        os.path.join(self.x_jupyter_root, program)
         
     | 
| 
      
 2280 
     | 
    
         
            +
                    )
         
     | 
| 
      
 2281 
     | 
    
         
            +
                    self.program_relpath = program
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Metadata-Version: 2.4
         
     | 
| 
       2 
2 
     | 
    
         
             
            Name: wandb
         
     | 
| 
       3 
     | 
    
         
            -
            Version: 0.22. 
     | 
| 
      
 3 
     | 
    
         
            +
            Version: 0.22.3
         
     | 
| 
       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
         
     | 
| 
         @@ -42,6 +42,7 @@ Classifier: Programming Language :: Python :: 3.10 
     | 
|
| 
       42 
42 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3.11
         
     | 
| 
       43 
43 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3.12
         
     | 
| 
       44 
44 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3.13
         
     | 
| 
      
 45 
     | 
    
         
            +
            Classifier: Programming Language :: Python :: 3.14
         
     | 
| 
       45 
46 
     | 
    
         
             
            Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
         
     | 
| 
       46 
47 
     | 
    
         
             
            Classifier: Topic :: Software Development :: Libraries :: Python Modules
         
     | 
| 
       47 
48 
     | 
    
         
             
            Classifier: Topic :: System :: Logging
         
     |