Skip to content

Upgrading wandb 0.27 to 0.28

Breaking0.27.2 → 0.28.2Breaking2Security4Deprecated1New10Changed23Fixed31

BreakingUpgrade verdict

2 breaking changes and 4 security fixes.

  • Downloading artifact files no longer works on old, unsupported W&B Server versions; upgrade the server to 0.70.0 or newer.
  • Fetching artifacts by path no longer works on old, unsupported W&B Server versions; upgrade the server to 0.70.0 or newer.
  • Makes launching jobs safer by properly quoting values that come from the job.
  • Makes fetching job code from git safer by limiting which remote URLs and protocols are allowed.
Top 5 of 7 that need code or config changes

Adds opentelemetry-api >=1.43.0.

Drops gitpython.

Installs 17 packages in all (was 19).

Breaking2
Removes legacy fallback implementations for downloading artifact files on older EOL W&B Server releases.
Artifact.files()Artifact.download()Artifact.get_entry()Artifact.get_path()
Removes legacy fallback implementations for fetching an artifact by name on older EOL W&B Server releases.
wandb.Api().artifact()
Security4
Hardens argument handling in wandb launch for the local-process resource so job-supplied values are always shell-quoted.
wandb launch
The launch agent restricts a job's git source URL to https/ssh remotes and pins git's protocol allowlist when fetching it and updating submodules.
Debug logs no longer contain CoreWeave cluster credentials.
wandb docker and wandb docker-run no longer pass your API key on the command line, where other users of the same machine could read it.
wandb dockerwandb docker-run
Deprecated1
wandb sync --sync-tensorboard is deprecated and will be removed in a later release.
wandb sync --sync-tensorboard

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • changed: function agent(sweep_id: str, function: Callable | None=…, entity: str | None=…, project: str | None=…, count: int | None=…, forward_signals: bool=…) -> None → function agent(sweep_id: str, function: Callable | None=…, entity: str | None=…, project: str | None=…, count: int | None=…, forward_signals: bool=…, term_timeout: int | None=…) -> None
  • changed: function save(glob_str: str | os.PathLike, base_path: str | os.PathLike | None=…, policy: PolicyName=…) -> bool | list[str] → function save(glob_str: str | os.PathLike, base_path: str | os.PathLike | None=…, policy: PolicyName=…, glob: bool=…) -> bool | list[str]
  • added: export EvalTable
  • added: field Agent.HEARTBEAT_SLEEP_SECONDS
  • added: export TelemetryContext
  • added: export TelemetryRecorder
  • added: export TelemetryContext
  • added: export TelemetryRecorder
  • added: class LowCardinalityAttributes
  • added: class TelemetryContext
  • added: class TelemetryRecorder
  • added: constructor TelemetryContext(low_cardinality_attributes: LowCardinalityAttributes | None=…, high_cardinality_attributes: dict[str, str] | None=…) -> None
  • added: constructor TelemetryRecorder(service_api: ServiceApi | None=…, context: TelemetryContext | None=…) -> None
  • added: field LowCardinalityAttributes.exception_type: str | None
  • added: field LowCardinalityAttributes.python_runtime: str | None
  • added: field LowCardinalityAttributes.python_version: str | None
  • added: field LowCardinalityAttributes.wandb_version: str | None
  • added: function guard(method: Callable[Concatenate[TelemetryRecorder, _P], None]) -> Callable[Concatenate[TelemetryRecorder, _P], None]
  • added: method LowCardinalityAttributes.as_dict() -> dict[str, str]
  • added: method LowCardinalityAttributes.merge(other: LowCardinalityAttributes) -> LowCardinalityAttributes
  • added: method TelemetryContext.with_attributes(low_cardinality_attributes: LowCardinalityAttributes, high_cardinality_attributes: dict[str, str]) -> TelemetryContext
  • added: method TelemetryRecorder.exception(exc: Exception, message: str | None=…) -> None
  • added: method TelemetryRecorder.increment_counter(name: str, low_cardinality_attributes: LowCardinalityAttributes) -> None
  • added: method TelemetryRecorder.increment_counter_and_log_event(name: str, attributes: dict[str, str] | None=…) -> None
  • added: method TelemetryRecorder.log(message: str, attributes: dict[str, str] | None=…, severity: SeverityNumber=…) -> None
  • added: method TelemetryRecorder.reraise(exc: Exception) -> Never
  • added: method TelemetryRecorder.with_context(low_cardinality_attributes: LowCardinalityAttributes | None=…, high_cardinality_attributes: dict[str, str] | None=…) -> TelemetryRecorder
  • removed: method Api.create_default_resource_config(*args, **kwargs)
  • removed: method Api.create_run_queue(*args, **kwargs)
  • removed: method Api.validate_api_key() -> bool
  • added: export Integrations
  • added: export Organization
  • changed: method Api.artifact_collections(project_name: str, type_name: str, per_page: int=…, start: str | None=…) -> ArtifactCollections → method Api.artifact_collections(project_name: str, type_name: str, order: str | None=…, per_page: int=…, start: str | None=…) -> ArtifactCollections
  • changed: method Api.artifacts(type_name: str, name: str, per_page: int=…, tags: list[str] | None=…, start: str | None=…) -> Artifacts → method Api.artifacts(type_name: str, name: str, order: str | None=…, per_page: int=…, tags: list[str] | None=…, start: str | None=…) -> Artifacts
  • changed: method Api.registries(organization: str | None=…, filter: dict[str, Any] | None=…, per_page: int=…, start: str | None=…) -> Registries → method Api.registries(organization: str | None=…, filter: dict[str, Any] | None=…, order: str | None=…, per_page: int=…, start: str | None=…) -> Registries
  • added: method Api.organization(name: str | None=…) -> Organization
  • changed: constructor ArtifactCollections(service_api: ServiceApi, entity: str, project: str, type_name: str, filters: Mapping[str, Any] | None=…, order: str | None=…, per_page: int=…, start: str | None=…) → constructor ArtifactCollections(service_api: ServiceApi, entity: str, project: str, type_name: str, filters: Mapping[str, Any] | None=…, order: str | None=…, per_page: PositiveInt=…, start: str | None=…)
  • changed: constructor ArtifactTypes(service_api: ServiceApi, entity: str, project: str, per_page: int=…, start: str | None=…) → constructor ArtifactTypes(service_api: ServiceApi, entity: str, project: str, per_page: PositiveInt=…, start: str | None=…)
  • changed: constructor ProjectArtifactCollections(service_api: ServiceApi, entity: str, project: str, filters: Mapping[str, Any] | None=…, order: str | None=…, per_page: int=…, start: str | None=…) → constructor ProjectArtifactCollections(service_api: ServiceApi, entity: str, project: str, filters: Mapping[str, Any] | None=…, order: str | None=…, per_page: PositiveInt=…, start: str | None=…)
  • changed: field ArtifactFiles.QUERY: str → field ArtifactFiles.QUERY: ClassVar[str | None]
  • changed: field Artifacts.QUERY: str → field Artifacts.QUERY: ClassVar[str | None]
  • changed: field ProjectArtifactCollections.QUERY: str | None → field ProjectArtifactCollections.QUERY: ClassVar[str | None]
  • added: property ArtifactCollection.project_id -> str
  • added: property ArtifactCollection.project_internal_id -> str | None
  • removed: field Automations.last_response: Connection[ProjectTriggersFields] | None
  • removed: method Automations.convert_objects() -> Iterator[Automation]
  • changed: class Automations(RelayPaginator['ProjectTriggersFields', 'Automation']) → class Automations(_LegacyAutomationsPaginator)
  • added: class LegacyAutomations(_LegacyAutomationsPaginator)
  • added: class LegacyEntityAutomations(_LegacyAutomationsPaginator)
  • added: constructor LegacyAutomations(service_api: ServiceApi, *, name: str | None=…, per_page: int=…, start: str | None=…, omit_fragments: Iterable[str] | None=…)
  • added: constructor LegacyEntityAutomations(service_api: ServiceApi, entity: str, *, name: str | None=…, per_page: int=…, start: str | None=…, omit_fragments: Iterable[str] | None=…)
  • removed: static method HistoryScan.cleanup(service_api: ServiceApi, request_id: int) -> None
  • removed: constructor Integrations(service_api: ServiceApi, variables: dict[str, Any], per_page: int=…, start: str | None=…)
  • removed: field Integrations.QUERY: ClassVar[str | None]
  • removed: field Integrations.last_response: Connection[IntegrationFields] | None
  • changed: class Integrations(RelayPaginator['IntegrationFields', 'Integration']) → class Integrations(_IntegrationsPaginator['Integration'])
  • changed: class SlackIntegrations(Integrations) → class SlackIntegrations(_IntegrationsPaginator['SlackIntegration'])
  • changed: class WebhookIntegrations(Integrations) → class WebhookIntegrations(_IntegrationsPaginator['WebhookIntegration'])
  • added: class Organization
  • added: field Organization.id: GQLId
  • added: field Organization.name: str
  • added: field Organization.org_entity: _OrgEntity
  • added: field Organization.service_api: InitVar[ServiceApi]
  • changed: constructor Project(service_api: ServiceApi, entity: str, project: str, attrs: Mapping[str, Any]) -> Project → constructor Project(service_api: ServiceApi, entity: str, project: str, attrs: Mapping[str, Any]) -> None
  • changed: constructor Projects(service_api: ServiceApi, entity: str, per_page: int=…) -> Projects → constructor Projects(service_api: ServiceApi, entity: str, per_page: int=…) -> None
  • changed: method Project.sweeps(per_page: int=…) -> Sweeps → method Project.sweeps(per_page: int=…, filters: dict[str, Any] | None=…, order: str | None=…) -> Sweeps
  • changed: constructor Collections(service_api: ServiceApi, organization: str, registry_filter: dict[str, Any] | None=…, collection_filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) → constructor Collections(service_api: ServiceApi, organization: str, registry_filter: _RegistryFilter | None=…, collection_filter: _CollectionFilter | None=…, order: _CollectionOrder | None=…, per_page: PositiveInt=…, start: str | None=…)
  • changed: constructor Registries(service_api: ServiceApi, organization: str, filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) → constructor Registries(service_api: ServiceApi, organization: str, filter: _RegistryFilter | None=…, order: _RegistryOrder | None=…, per_page: PositiveInt=…, start: str | None=…)
  • changed: constructor Versions(service_api: ServiceApi, organization: str, registry_filter: dict[str, Any] | None=…, collection_filter: dict[str, Any] | None=…, artifact_filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) → constructor Versions(service_api: ServiceApi, organization: str, registry_filter: _RegistryFilter | None=…, collection_filter: _CollectionFilter | None=…, artifact_filter: _VersionFilter | None=…, per_page: PositiveInt=…, start: str | None=…)
  • changed: field Versions.QUERY: str → field Versions.QUERY: ClassVar[str | None]
  • changed: method Collections.versions(filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) -> Versions → method Collections.versions(filter: _VersionFilter | None=…, per_page: PositiveInt=…, start: str | None=…) -> VersionsIterator
  • changed: method Registries.collections(filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) -> Collections → method Registries.collections(filter: _CollectionFilter | None=…, order: _CollectionOrder | None=…, per_page: PositiveInt=…, start: str | None=…) -> CollectionsIterator
  • changed: method Registries.versions(filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) -> Versions → method Registries.versions(filter: _VersionFilter | None=…, per_page: PositiveInt=…, start: str | None=…) -> VersionsIterator
  • added: class CollectionsIterator(Protocol)
  • added: class VersionsIterator(Protocol)
  • added: method CollectionsIterator.versions(filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) -> VersionsIterator
  • removed: property Registry.updated_at -> str
  • changed: method Registry.collections(filter: dict[str, Any] | None=…, per_page: PositiveInt=…, start: str | None=…) -> Collections → method Registry.collections(filter: dict[str, Any] | None=…, order: str | None=…, per_page: PositiveInt=…, start: str | None=…) -> Collections
  • added: property Registry.internal_id -> str | None
  • added: property Registry.updated_at -> str | None
  • changed: method Run.update_state(state: Literal['pending']) -> bool → method Run.update_state(state: str) -> bool
  • changed: static method Run.create(api: public.Api, run_id: str | None=…, project: str | None=…, entity: str | None=…, state: Literal['running', 'pending']=…) -> Self → static method Run.create(api: public.Api, run_id: str | None=…, project: str | None=…, entity: str | None=…, state: Literal['running', 'pending']=…) -> Run
  • added: class RunNotFoundError(ValueError)
  • added: method Run.stop() -> None
  • added: property Run.sweep -> public.Sweep | None
  • changed: method ServiceApi.execute_graphql(query: str, variables: Mapping[str, Any] | None=…, timeout: float | None=…, *, omit_variables: Iterable[str] | None=…, omit_fragments: Iterable[str] | None=…, omit_fields: Iterable[str] | None=…, rename_fields: Mapping[str, str] | None=…) -> Any → method ServiceApi.execute_graphql(query: str, variables: Mapping[str, Any] | None=…, timeout: float | None=…, *, parse: Callable[[str], _T]=…, omit_variables: Iterable[str] | None=…, omit_fragments: Iterable[str] | None=…, omit_fields: Iterable[str] | None=…, rename_fields: Mapping[str, str] | None=…) -> _T
  • added: method ServiceApi.access_token(timeout: float | None=…) -> str | None
  • added: method ServiceApi.api_publish(request: ApiRequest) -> None
  • added: method ServiceApi.authenticate(timeout: float | None=…) -> AuthenticateResponse
  • added: method ServiceApi.finalize(obj: object, cleanup: ApiRequest) -> Callable[[], None]
  • added: property ServiceApi.base_url -> str
  • added: property ServiceApi.initialized -> bool
  • changed: constructor Sweeps(service_api: ServiceApi, entity: str, project: str, per_page: int=…) -> Sweeps → constructor Sweeps(service_api: ServiceApi, entity: str, project: str, per_page: int=…, filters: dict[str, Any] | None=…) -> None
  • added: method Sweep.enqueue_run(config: dict, display_name: str | None=…) -> str
  • added: export EntityScope
  • added: export OrgScope
  • added: export TeamScope
  • added: class OrgScope(_BaseScope, EntityScopeFields)
  • added: class TeamScope(_BaseScope, EntityScopeFields)
  • added: field OrgScope.entity_type: Literal['organization']
  • added: field OrgScope.scope_type: Literal[ScopeType.ENTITY]
  • added: field ScopeType.ENTITY
  • added: field TeamScope.entity_type: Literal['team']
  • added: field TeamScope.scope_type: Literal[ScopeType.ENTITY]
  • added: variable EntityScope
  • removed: class DefaultCommandGroup(click.Group)
  • removed: constructor DefaultCommandGroup(*args: Any, default_cmd: str=…, **kwargs: Any) -> None
  • removed: function config() -> None
  • removed: function leet(ctx: click.Context) -> None
  • removed: function run(path: str | None=…, pprof: str=…) -> None
  • removed: function symon(pprof: str=…, interval: str=…) -> None
  • removed: method DefaultCommandGroup.format_usage(ctx: click.Context, formatter: click.HelpFormatter) -> None
  • removed: method DefaultCommandGroup.parse_args(ctx: click.Context, args: list[str]) -> list[str]
  • changed: function beta() -> None → function beta(ctx: click.Context) -> None
  • changed: function sync(paths: tuple[str, ...], live: bool, entity: str, project: str, run_id: str, job_type: str, replace_tags: str, skip_synced: bool, dry_run: bool, verbose: bool, n: int) -> None → function sync(paths: tuple[str, ...], live: bool, entity: str, project: str, run_id: str, job_type: str, replace_tags: str, skip_synced: bool, skip_online: bool, dry_run: bool, skip_confirmation: bool, verbose: bool, n: int) -> None
  • removed: class LaunchConfig
  • removed: field LaunchConfig.run_file: str | None
  • removed: field LaunchConfig.wandb_dir: str
  • removed: function launch(path: str | None, pprof: str) -> Never
  • removed: function launch_config() -> Never
  • removed: function launch_symon(pprof: str=…, interval: str=…) -> Never
  • changed: function sync(paths: list[pathlib.Path], *, live: bool, entity: str, project: str, run_id: str, job_type: str, replace_tags: str, dry_run: bool, skip_synced: bool, verbose: bool, parallelism: int) -> None → function sync(paths: list[pathlib.Path], *, live: bool, entity: str, project: str, run_id: str, job_type: str, replace_tags: str, dry_run: bool, skip_confirmation: bool, skip_synced: bool, skip_online: bool, verbose: bool, parallelism: int) -> None
  • added: function clean(ctx: click.Context, min_hours: int, include_unsynced: bool, force: bool) -> None
  • removed: function cli_unsupported(argument)
  • changed: function agent(ctx, project, entity, count, forward_signals, sweep_id) → function agent(ctx, project, entity, count, forward_signals, term_timeout, sweep_id)
  • changed: function sync(ctx, path=…, view=…, verbose=…, run_id=…, project=…, entity=…, job_type=…, sync_tensorboard=…, include_globs=…, exclude_globs=…, include_online=…, include_offline=…, include_synced=…, mark_synced=…, sync_all=…, ignore=…, show=…, clean=…, clean_old_hours=…, clean_force=…, append=…, skip_console=…, replace_tags=…) → function sync(ctx: click.Context, path: tuple[str, ...], view: bool, verbose: bool, skip_confirmation: bool, run_id: str | None, project: str | None, entity: str | None, job_type: str | None, sync_tensorboard: bool | None, include_globs: str | None, exclude_globs: str | None, include_online: bool | None, include_offline: bool | None, include_synced: bool | None, mark_synced: bool, sync_all: bool,…
  • added: class DefaultCommandGroup(click.Group)
  • added: class LaunchConfig
  • added: class LocalLaunchConfig(LaunchConfig)
  • added: class RemoteLaunchConfig(LaunchConfig)
  • added: constructor DefaultCommandGroup(*args: Any, default_cmd: str=…, **kwargs: Any) -> None
  • added: field LocalLaunchConfig.run_file: str | None
  • added: field LocalLaunchConfig.wandb_dir: str
  • added: field RemoteLaunchConfig.api_key: str
  • added: field RemoteLaunchConfig.remote_url: str
  • added: function config() -> None
  • added: function launch(path: str | None, pprof: str) -> Never
  • added: function launch_config() -> Never
  • added: function launch_symon(pprof: str=…, interval: str=…) -> Never
  • added: function leet() -> None
  • added: function run(path: str | None=…, pprof: str=…) -> None
  • added: function symon(pprof: str=…, interval: str=…) -> None
  • added: method DefaultCommandGroup.format_usage(ctx: click.Context, formatter: click.HelpFormatter) -> None
  • added: method DefaultCommandGroup.parse_args(ctx: click.Context, args: list[str]) -> list[str]
  • added: export EvalTable
  • removed: variable LOG_STRING_NOCOLOR
  • changed: function get_ground_truth_bbox_annotations(img_idx: int, image_path: str, batch: dict, class_name_map: dict=…) -> list[dict[str, Any]] → function get_ground_truth_bbox_annotations(img_idx: int, image_path: str, batch: dict, class_name_map: dict | None=…) -> list[dict[str, Any]]
  • removed: export setup
  • added: export build_project_path
  • added: export ensure_version
  • added: export init_weave
  • added: export init_weave_if_imported
  • added: function handle_nested_wandb_values(val: Any, column: str | int, unsupported_media_mode: UnsupportedMediaMode, *, nested: bool=…, inside_sequence: bool=…) -> Any
  • added: function unwrap_value(val: Any, column: str | int, unsupported_media_mode: UnsupportedMediaMode) -> Any
  • added: function validate_supported_value(val: Any, column: str | int, unsupported_media_mode: UnsupportedMediaMode) -> None
  • added: function validate_unsupported_media_mode(mode: str) -> None
  • added: variable UnsupportedMediaMode
  • removed: function setup(entity: str | None, project: str | None) -> None
  • added: function build_project_path(entity: str | None, project: str | None) -> str | None
  • added: function ensure_version(min_version: str, error_msg: str | None=…) -> None
  • added: function init_weave(entity: str | None, project: str | None) -> None
  • added: function init_weave_if_imported(entity: str | None, project: str | None) -> None
  • changed: function pr_curve(y_true: Iterable[T] | None=…, y_probas: Iterable[numbers.Number] | None=…, labels: list[str] | None=…, classes_to_plot: list[T] | None=…, interp_size: int=…, title: str=…, split_table: bool=…) -> CustomChart → function pr_curve(y_true: Iterable[T] | None=…, y_probas: Iterable[numbers.Number] | None=…, labels: list[str] | None=…, classes_to_plot: list[T] | None=…, interp_size: int=…, title: str=…, split_table: bool=…) -> CustomChart | None
  • changed: function roc_curve(y_true: Sequence[numbers.Number], y_probas: Sequence[Sequence[float]] | None=…, labels: list[str] | None=…, classes_to_plot: list[numbers.Number] | None=…, title: str=…, split_table: bool=…) -> CustomChart → function roc_curve(y_true: Sequence[numbers.Number], y_probas: Sequence[Sequence[float]] | None=…, labels: list[str] | None=…, classes_to_plot: list[numbers.Number] | None=…, title: str=…, split_table: bool=…) -> CustomChart | None
  • removed: variable DESCRIPTOR
  • removed: variable DESCRIPTOR
  • removed: variable DESCRIPTOR
  • removed: variable DESCRIPTOR
  • removed: variable DESCRIPTOR
  • removed: variable DESCRIPTOR
  • added: variable DESCRIPTOR
  • added: variable DESCRIPTOR
  • added: variable DESCRIPTOR
  • added: variable protobuf_version
  • added: class EvalTable(Table)
  • added: constructor EvalTable(columns: list[ColumnKey] | None=…, data: list[InputRow] | np.ndarray | pd.DataFrame | None=…, rows: list[InputRow] | None=…, dataframe: pd.DataFrame | None=…, dtype: Any=…, optional: bool | list[bool]=…, allow_mixed_types: bool=…, log_mode: LogMode=…, *, input_columns: list[str] | None=…, output_columns: list[str] | None=…, score_columns: list[str] | None=…, unsupported_medi…
  • added: method EvalTable.add_column(name: str, data: list[Any] | np.ndarray, optional: bool=…) -> None
  • added: method EvalTable.add_data(*data: Any) -> None
  • added: method EvalTable.bind_to_run(run: LocalRun, key: int | str, step: int | str, id_: int | str | None=…, ignore_copy_err: bool | None=…) -> None
  • added: method EvalTable.has_been_logged() -> bool
  • added: method EvalTable.to_json(run_or_artifact: Any) -> dict[str, Any]
  • added: variable EVAL_TABLE_MARKER
  • added: variable EVAL_TABLE_ROW_INDEX_KEY
  • changed: constructor Table(columns=…, data=…, rows=…, dataframe=…, dtype=…, optional=…, allow_mixed_types=…, log_mode: Literal['IMMUTABLE', 'MUTABLE', 'INCREMENTAL'] | None=…) → constructor Table(columns: list[ColumnKey] | None=…, data: list[InputRow] | np.ndarray | pd.DataFrame | None=…, rows: list[InputRow] | None=…, dataframe: pd.DataFrame | None=…, dtype: Any=…, optional: bool | list[bool]=…, allow_mixed_types: bool=…, log_mode: LogMode | None=…) -> None
  • changed: method Table.add_column(name, data, optional=…) → method Table.add_column(name: str, data: list[Any] | np.ndarray, optional: bool=…) -> None
  • changed: method Table.add_computed_columns(fn) → method Table.add_computed_columns(fn: Callable[[int, dict[ColumnKey, Any]], dict[str, Any]]) -> None
  • changed: method Table.add_data(*data) → method Table.add_data(*data: Any) -> None
  • changed: method Table.add_row(*row) → method Table.add_row(*row: Any) -> None
  • changed: method Table.cast(col_name, dtype, optional=…) → method Table.cast(col_name: ColumnKey, dtype: Any, optional: bool=…) -> _dtypes.Type
  • changed: method Table.get_column(name, convert_to=…) → method Table.get_column(name: ColumnKey, convert_to: None=…) -> list[Any] | (name: ColumnKey, convert_to: Literal['numpy']) -> np.ndarray
  • changed: method Table.get_dataframe() → method Table.get_dataframe() -> pd.DataFrame
  • changed: method Table.index_ref(index) → method Table.index_ref(index: int) -> _TableIndex
  • changed: method Table.iterrows() → method Table.iterrows() -> Iterator[tuple[_TableIndex, list[Any]]]
  • changed: method Table.set_fk(col_name, table, table_col) → method Table.set_fk(col_name: ColumnKey, table: Table, table_col: str) -> None
  • changed: method Table.set_pk(col_name) → method Table.set_pk(col_name: ColumnKey) -> None
  • changed: method Table.to_json(run_or_artifact) → method Table.to_json(run_or_artifact: Any) -> dict[str, Any]
  • changed: static method Table.from_json(json_obj, source_artifact: artifact.Artifact) → static method Table.from_json(json_obj: dict[str, Any], source_artifact: artifact.Artifact) -> Table
  • added: method Table.has_been_logged() -> bool
  • added: variable ColumnKey
  • added: variable InputRow
  • added: variable LogMode
  • changed: function val_to_json(run: LocalRun | None, key: str, val: ValToJsonType, namespace: str | int | None=…, ignore_copy_err: bool | None=…) -> Sequence | dict → function val_to_json(run: LocalRun | None, key: str, val: ValToJsonType, namespace: str | int | None=…, ignore_copy_err: bool | None=…) -> Any
  • removed: class ValidationDataLogger
  • removed: constructor ValidationDataLogger(inputs: Sequence | dict[str, Sequence], targets: Sequence | dict[str, Sequence] | None=…, indexes: list[_TableIndex] | None=…, validation_row_processor: Callable | None=…, prediction_row_processor: Callable | None=…, input_col_name: str=…, target_col_name: str=…, table_name: str=…, artifact_type: str=…, class_labels: list[str] | None=…, infer_missing_processors: b…
  • removed: field ValidationDataLogger.class_labels_table: wandb.Table | None
  • removed: field ValidationDataLogger.infer_missing_processors: bool
  • removed: field ValidationDataLogger.prediction_row_processor: Callable | None
  • removed: field ValidationDataLogger.validation_indexes: list[_TableIndex]
  • removed: field ValidationDataLogger.validation_inputs: Sequence | dict[str, Sequence]
  • removed: field ValidationDataLogger.validation_targets: Sequence | dict[str, Sequence] | None
  • removed: method ValidationDataLogger.log_predictions(predictions: Sequence | dict[str, Sequence], prediction_col_name: str=…, val_ndx_col_name: str=…, table_name: str=…, commit: bool=…) -> wandb.data_types.Table
  • removed: method ValidationDataLogger.make_predictions(predict_fn: Callable) -> Sequence | dict[str, Sequence]
  • removed: variable CAN_INFER_IMAGE_AND_VIDEO
  • removed: variable NOTIFY_PROCESS
  • removed: variable NOTIFY_REQUEST
  • removed: variable NOTIFY_SHUTDOWN
  • removed: class Context
  • removed: class ContextKeeper
  • removed: constructor Context() -> None
  • removed: constructor ContextKeeper() -> None
  • removed: function context_id_from_record(record: Record) -> str
  • removed: function context_id_from_result(result: Result) -> str
  • removed: method Context.cancel() -> None
  • removed: method ContextKeeper.add(context_id: str) -> Context
  • removed: method ContextKeeper.add_from_record(record: Record) -> Context | None
  • removed: method ContextKeeper.cancel(context_id: str) -> bool
  • removed: method ContextKeeper.get(context_id: str) -> Context | None
  • removed: method ContextKeeper.release(context_id: str) -> None
  • removed: property Context.cancel_event -> threading.Event
  • removed: variable logger
  • changed: constructor HandleManager(settings: SettingsStatic, record_q: Queue[Record], result_q: Queue[Result], stopped: Event, writer_q: Queue[Record], interface: InterfaceQueue, context_keeper: context.ContextKeeper) -> None → constructor HandleManager(settings: SettingsStatic, record_q: Queue[Record], result_q: Queue[Result], stopped: Event, writer_q: Queue[Record], interface: InterfaceQueue) -> None
  • removed: method Api.clear_local_context() -> None
  • removed: method Api.create_default_resource_config(entity: str, resource: str, config: str, template_variables: dict[str, float | int | str] | None) -> dict[str, Any] | None
  • removed: method Api.create_run_queue(entity: str, project: str, queue_name: str, access: str, prioritization_mode: str | None=…, config_id: str | None=…) -> dict[str, Any] | None
  • removed: method Api.pull(project: str, run: str | None=…, entity: str | None=…) -> list[requests.Response]
  • removed: method Api.set_local_context(api_context: context.Context | None) -> None
  • removed: method Api.validate_api_key() -> bool
  • removed: property Api.access_token -> str | None
  • removed: property Api.context -> context.Context
  • changed: constructor Api(default_settings: wandb.Settings | settings_static.SettingsStatic | DefaultSettings | None=…, load_settings: bool=…, retry_timedelta: datetime.timedelta | None=…, environ: MutableMapping[str, str]=…, retry_callback: Callable[[int, str], Any] | None=…, api_key: str | None=…) -> None → constructor Api(default_settings: wandb.Settings | settings_static.SettingsStatic | DefaultSettings | None=…, load_settings: bool=…, retry_timedelta: datetime.timedelta | None=…, environ: MutableMapping[str, str]=…, retry_callback: Callable[[int, str], Any] | None=…, api_key: str | None=…, telemetry_recorder: TelemetryRecorder | None=…) -> None
  • changed: method Api.download_file(url: str) -> tuple[int, requests.Response] → method Api.download_file(url: str, path: str) -> None
  • changed: method Api.download_write_file(metadata: dict[str, str], out_dir: str | None=…) -> tuple[str, requests.Response | None] → method Api.download_write_file(metadata: dict[str, str], out_dir: str | None=…) -> tuple[str, bool]
  • removed: class UniformSampleAccumulator
  • removed: constructor UniformSampleAccumulator(min_samples=…)
  • removed: method UniformSampleAccumulator.add(val)
  • removed: method UniformSampleAccumulator.get()
  • changed: constructor SendManager(settings: SettingsStatic, record_q: Queue[Record], result_q: Queue[Result], interface: InterfaceQueue, context_keeper: context.ContextKeeper) -> None → constructor SendManager(settings: SettingsStatic, record_q: Queue[Record], result_q: Queue[Result], interface: InterfaceQueue) -> None
  • changed: constructor LaunchAgent(api: Api, config: dict[str, Any]) → constructor LaunchAgent(api: Api, config: dict[str, Any], telemetry_recorder: TelemetryRecorder) -> None
  • removed: variable PREFIX_SSH
  • removed: variable SUFFIX_GIT
  • added: function inject_restricted_security_context(manifest: Any) -> None
  • added: function validate_kubernetes_resource_args(resource_args: dict[str, Any]) -> None
  • added: function validate_launch_resource_args(resource_args: dict[str, Any]) -> None
  • added: function validate_local_container_resource_args(docker_args: dict[str, Any]) -> None
  • added: function yield_kubernetes_pod_specs(manifest: Any) -> Iterator[dict[str, Any]]
  • added: variable K8S_RESTRICTED_SECURITY_CONTEXT: dict[str, Any]
  • added: class ForkedError(Exception)
  • removed: function access_token(base_url: str, token_file: Path, credentials_file: Path) -> str
  • removed: variable DEFAULT_WANDB_CREDENTIALS_FILE
  • removed: variable JOBSPEC_FNAME
  • removed: class FsmEntry(Generic[T_FsmInputs, T_FsmContext])
  • removed: class FsmStateCheck(Protocol[T_FsmInputs])
  • removed: class FsmStateEnter(Protocol[T_FsmInputs])
  • removed: class FsmStateEnterWithContext(Protocol[T_FsmInputs, T_FsmContext_contra])
  • removed: class FsmStateExit(Protocol[T_FsmInputs, T_FsmContext_cov])
  • removed: class FsmStateOutput(Protocol[T_FsmInputs])
  • removed: class FsmStateStay(Protocol[T_FsmInputs])
  • removed: class FsmWithContext(Generic[T_FsmInputs, T_FsmContext])
  • removed: constructor FsmWithContext(states: Sequence[FsmState], table: FsmTableWithContext[T_FsmInputs, T_FsmContext]) -> None
  • removed: field FsmEntry.action: Callable[[T_FsmInputs], None] | None
  • removed: field FsmEntry.condition: Callable[[T_FsmInputs], bool]
  • removed: field FsmEntry.target_state: type[FsmState[T_FsmInputs, T_FsmContext]]
  • removed: method FsmStateCheck.on_check(inputs: T_FsmInputs) -> None
  • removed: method FsmStateEnter.on_enter(inputs: T_FsmInputs) -> None
  • removed: method FsmStateEnterWithContext.on_enter(inputs: T_FsmInputs, context: T_FsmContext_contra) -> None
  • removed: method FsmStateExit.on_exit(inputs: T_FsmInputs) -> T_FsmContext_cov
  • removed: method FsmStateOutput.on_state(inputs: T_FsmInputs) -> None
  • removed: method FsmStateStay.on_stay(inputs: T_FsmInputs) -> None
  • removed: method FsmWithContext.input(inputs: T_FsmInputs) -> None
  • removed: variable Fsm: TypeAlias
  • removed: variable FsmState: TypeAlias
  • removed: variable FsmTable: TypeAlias
  • removed: variable FsmTableWithContext: TypeAlias
  • removed: variable T_FsmContext
  • removed: variable T_FsmContext_contra
  • removed: variable T_FsmContext_cov
  • removed: variable T_FsmInputs
  • removed: property GitRepo.branch -> Any
  • removed: property GitRepo.dirty -> Any
  • removed: property GitRepo.last_commit -> Any
  • removed: property GitRepo.remote -> Any
  • removed: property GitRepo.remote_url -> Any
  • removed: property GitRepo.repo -> Repo | None
  • removed: property GitRepo.root -> Any
  • removed: property GitRepo.root_dir -> Any
  • changed: constructor GitRepo(root: str | None=…, remote: str=…, lazy: bool=…, remote_url: str | None=…, commit: str | None=…) -> None → constructor GitRepo(root: str | None=…, remote: str | None=…, lazy: bool=…, remote_url: str | None=…, commit: str | None=…, _git_executable: str | None=…) -> None
  • changed: method GitRepo.get_upstream_fork_point() -> Any → method GitRepo.get_upstream_fork_point() -> str | None
  • changed: method GitRepo.push(name: str) -> Any → method GitRepo.push(name: str) -> str | None
  • changed: method GitRepo.tag(name: str, message: str | None) -> Any → method GitRepo.tag(name: str, message: str | None) -> str | None
  • added: class GitCommandError(Exception)
  • added: class GitVersion
  • added: field GitVersion.major: int
  • added: field GitVersion.minor: int
  • added: field GitVersion.patch: int
  • added: function remote_url_without_password(url: str) -> str
  • added: function run_git(*args: str, cwd: str | None=…, executable: str | None=…) -> str
  • added: method GitRepo.checkout(ref: str) -> None
  • added: method GitRepo.checkout_new_branch(branch_name: str, start_point: str) -> None
  • added: method GitRepo.commit_for_ref(ref: str) -> str
  • added: method GitRepo.config_value(name: str) -> str | None
  • added: method GitRepo.create_tag(tag_name: str, message: str | None) -> None
  • added: method GitRepo.current_branch() -> str
  • added: method GitRepo.current_tracking_branch() -> str
  • added: method GitRepo.fetch_all() -> None
  • added: method GitRepo.git_version() -> GitVersion | None
  • added: method GitRepo.has_branch(branch_name: str) -> bool
  • added: method GitRepo.has_commit(commit: str) -> bool
  • added: method GitRepo.has_tracked_changes() -> bool
  • added: method GitRepo.is_ancestor(older: str, newer: str) -> bool
  • added: method GitRepo.is_detached_head() -> bool
  • added: method GitRepo.merge_base(*refs: str) -> str
  • added: method GitRepo.remote_exists(remote_name: str) -> bool
  • added: method GitRepo.remote_url_for(remote_name: str) -> str
  • added: method GitRepo.repo_root_for(cwd: str) -> str
  • added: method GitRepo.run_git(*args: str, cwd: str | None=…) -> str
  • added: method GitRepo.tracking_branches() -> list[str]
  • added: method GitRepo.untracked_files(pathspec: str) -> list[str]
  • added: property GitRepo.branch -> str | None
  • added: property GitRepo.dirty -> bool
  • added: property GitRepo.last_commit -> str | None
  • added: property GitRepo.remote -> str | None
  • added: property GitRepo.remote_url -> str | None
  • added: property GitRepo.root_dir -> str | None
  • added: variable GIT_EXECUTABLE_ENV
  • added: class Identity
  • added: class SessionIdentity
  • added: constructor SessionIdentity(settings: Settings) -> None
  • added: field Identity.default_entity: str
  • added: field Identity.email: str
  • added: field Identity.flags: dict[str, Any]
  • added: field Identity.teams: tuple[str, ...]
  • added: field Identity.username: str
  • added: property SessionIdentity.identity -> Identity | None
  • removed: variable CSI
  • removed: class FilteredBackoff(Backoff)
  • removed: constructor FilteredBackoff(filter: Callable[[Exception], bool], wrapped: Backoff) -> None
  • removed: method FilteredBackoff.next_sleep_or_reraise(exc: Exception) -> datetime.timedelta
  • removed: class Server
  • removed: constructor Server(settings: Settings) -> None
  • removed: method Server.query_with_timeout(timeout: int | float=…) -> None
  • removed: property Server.viewer -> dict[str, Any]
  • removed: method ServiceConnection.api_cleanup_request(api_id: str) -> None
  • added: method ServiceConnection.finalize(obj: object, cleanup: spb.ServerRequest) -> Callable[[], None]
  • added: class ServiceFinalizer
  • added: constructor ServiceFinalizer(asyncer: asyncio_manager.AsyncioManager, client: ServiceClient) -> None
  • added: method ServiceFinalizer.close() -> None
  • added: method ServiceFinalizer.finalize(obj: object, cleanup: spb.ServerRequest) -> Callable[[], None]
  • removed: method Auth.as_requests_auth() -> requests.auth.AuthBase
  • removed: method AuthApiKey.as_requests_auth() -> requests.auth.AuthBase
  • removed: method AuthIdentityTokenFile.as_requests_auth() -> requests.auth.AuthBase
  • removed: method AuthIdentityTokenFile.fetch_access_token() -> str
  • added: method Auth.verify() -> None
  • added: method AuthApiKey.verify() -> None
  • added: method AuthIdentityTokenFile.verify() -> None
  • changed: function authenticate_session(*, host: str | HostUrl, source: str, no_offline: bool=…, no_create: bool=…, input_timeout: float | None=…, referrer: str=…, relogin: bool=…) -> Auth | None → function authenticate_session(*, host: str | HostUrl, source: str, no_offline: bool=…, no_create: bool=…, input_timeout: float | None=…, referrer: str=…, relogin: bool=…, verify: bool=…) -> Auth | None
  • changed: function prompt_and_save_api_key(*, host: str | HostUrl, no_offline: bool=…, no_create: bool=…, referrer: str=…, input_timeout: float | None=…) -> str | None → function prompt_and_save_api_key(*, host: str | HostUrl, no_offline: bool=…, no_create: bool=…, referrer: str=…, input_timeout: float | None=…, verify: bool=…) -> str | None
  • added: function set_auth_settings_for_api_key(settings: Settings, api_key: str, base_url: str) -> None
  • added: function set_auth_settings_for_identity_token_file(settings: Settings, identity_token_file: str, credentials_file: str, base_url: str) -> None
  • added: function check_api_key_validity(*, host: HostUrl, api_key: str) -> str | None
  • added: function check_identity_token_validity(*, host: HostUrl, identity_token_file: pathlib.Path, credentials_file: pathlib.Path) -> str | None
  • added: function check_service_api_auth_validity(service_api: ServiceApi) -> str | None
  • removed: class RequiresMixin
  • removed: constructor RequiresMixin() -> None
  • removed: field RequiresMixin.requirement
  • removed: function requires(requirement: str) -> FuncT
  • removed: variable FuncT
  • removed: variable requirement_env_var_mapping: dict[str, str]
  • removed: variable EXIT_TIMEOUT
  • changed: method Run.save(glob_str: str | os.PathLike, base_path: str | os.PathLike | None=…, policy: PolicyName=…) -> bool | list[str] → method Run.save(glob_str: str | os.PathLike, base_path: str | os.PathLike | None=…, policy: PolicyName=…, glob: bool=…) -> bool | list[str]
  • added: property Run.sync_dir -> str
  • added: field Settings.x_file_stream_no_gzip: bool
  • added: method Settings.infer_git_root() -> None
  • added: export TFEVENT_SUBSTRING
  • removed: function batched(n: int, iterable: Iterable[T]) -> Generator[list[T], None, None]
  • removed: function check_retry_conflict(e: Any) -> bool | None
  • removed: function check_retry_conflict_or_gone(e: Any) -> bool | None
  • removed: function coalesce(*arg: Any) -> Any
  • removed: function download_file_from_url(dest_path: str, source_url: str, api_key: str | None=…) -> None
  • removed: function download_file_into_memory(source_url: str, api_key: str | None=…) -> bytes
  • removed: function ensure_text(string: str | bytes, encoding: str=…, errors: str=…) -> str
  • removed: function generate_id(length: int=…) -> str
  • removed: function launch_browser(attempt_launch_browser: bool=…) -> bool
  • removed: function make_check_retry_fn(fallback_retry_fn: CheckRetryFnType, check_fn: Callable[[Exception], bool | None], check_timedelta: timedelta | None=…) -> CheckRetryFnType
  • removed: function merge_dicts(source: dict[str, Any], destination: dict[str, Any]) -> dict[str, Any]
  • removed: function no_retry_4xx(e: Exception) -> bool
  • removed: function no_retry_auth(e: Any) -> bool
  • removed: function recursive_cast_dictlike_to_dict(d: dict[str, Any]) -> dict[str, Any]
  • removed: function remove_keys_with_none_values(d: dict[str, Any] | Any) -> dict[str, Any] | Any
  • removed: function stopwatch_now() -> float
  • removed: variable IS_GIT
  • changed: function class_colors(class_count: int) -> list[list[int]] → function class_colors(class_count: int) -> list[list[int] | tuple[float, float, float]]
  • changed: function json_friendly(obj: Any) -> tuple[Any, bool] | tuple[None | str | float, bool] → function json_friendly(obj: Any, *, preserve_numpy_nan: bool=…) -> tuple[Any, bool] | tuple[None | str | float, bool]
  • removed: class AgentApi
  • removed: constructor AgentApi(queue)
  • removed: method AgentApi.command(command)
  • changed: constructor Agent(api, queue, sweep_id=…, function=…, in_jupyter=…, count=…, forward_signals=…) → constructor Agent(api, queue, sweep_id=…, function=…, in_jupyter=…, count=…, forward_signals=…, term_timeout: int | None=…)
  • changed: function agent(sweep_id: str, function: Callable | None=…, entity: str | None=…, project: str | None=…, count: int | None=…, forward_signals: bool=…) -> None → function agent(sweep_id: str, function: Callable | None=…, entity: str | None=…, project: str | None=…, count: int | None=…, forward_signals: bool=…, term_timeout: int | None=…) -> None
  • changed: function run_agent(sweep_id, function=…, in_jupyter=…, entity=…, project=…, count=…, forward_signals=…) → function run_agent(sweep_id, function=…, in_jupyter=…, entity=…, project=…, count=…, forward_signals=…, term_timeout: int | None=…)
  • changed: method AgentProcess.wait() → method AgentProcess.wait(timeout: float | None=…)
  • added: class ShutdownSignal(BaseException)
  • added: class TerminationTier(enum.IntEnum)
  • added: constructor ShutdownSignal(signum: int) -> None
  • added: field TerminationTier.KILL_CHILDREN
  • added: field TerminationTier.NORMAL_EXECUTION
  • added: field TerminationTier.TERMINATE_AND_WAIT_FOR_CHILDREN
  • added: field TerminationTier.WAIT_FOR_CHILDREN
  • added: method TerminationTier.succ()
  • added: property ShutdownSignal.label -> str