Skip to content

build(deps): bump the python group across 1 directory with 13 updates - #9

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/python-39e2b5f265
Closed

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/python-39e2b5f265

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Bumps the python group with 13 updates in the / directory:

Package From To
numpy 2.5.3 2.5.4
pydantic 2.13.5 2.14.1
typer 0.27.2 0.27.3
torch 2.14.0 2.14.1
torchvision 0.29.0 0.29.1
rfdetr 1.10.1 1.11.2
supervision 0.30.2 0.30.9
fiftyone 1.21.0 1.22.1
transformers 5.17.0 5.19.0
onnx 1.22.0 1.23.2
onnxruntime 1.29.0 1.31.0
ruff 0.16.6 0.17.0
mypy 2.3.1 2.4.0

Updates numpy from 2.5.3 to 2.5.4

Release notes

Sourced from numpy's releases.

v2.5.4 (Oct 10, 2026)

NumPy 2.5.4 Release Notes

Released on 2026-10-10.

NumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3 release. Highlights are:

  • Many typing fixes and improvements,
  • A workaround for the MSVC 19.51 bug, see below.

This release supports Python versions 3.12-3.15.

Improvements

  • numpy.linalg.svd and numpy.linalg.lstsq now raise for inputs containing infinities instead of returning garbage results.

  • Fixed hangs in numpy.linalg.svd and numpy.linalg.lstsq for certain inputs containing infinities for recent versions of some LAPACK implementations.

  • numpy.linalg.cond now handles non-finite inputs more consistently.

(gh-32593)

StringDType hashing with NaN sentinels

StringDType instances with equivalent floating-point NaN sentinels now have equal hashes. Previously, distinct NaN objects could produce equal dtype instances with different hashes, causing dictionary lookups and set deduplication to fail.

(gh-32563)

Changes

MaskedArray resets a fill_value that cannot be represented in a new dtype

A fill_value copied from a source array is now reset to the default fill_value for the new dtype when it cannot be represented in that dtype. Previously the copied value could be stale: ufuncs that change dtype left the result holding a fill_value typed for the old dtype, which raised a TypeError only when something later validated it (such as .view()), and a floating point fill_value that overflows an integer dtype was kept as an out-of-range value together with a RuntimeWarning. Both now fall back to the default, including when a masked array is passed to MaskedArray with a different dtype. A fill_value given explicitly by the user is still validated and raises as before. This can now raise a ComplexWarning if the fill_value is complex and the new dtype is real.

... (truncated)

Commits
  • a3d0ef1 Merge pull request #32969 from charris/prepare-2.5.4
  • 087b536 MAINT: Make OpenBLAS version check use 2.5.x branch.
  • 91acd87 REL: Prepare for the NumPy 2.5.4 release.
  • 9cc555b Merge pull request #32956 from charris/backport-typing-1
  • e04b972 TYP: dtype[void].names: allow setting with list (#32943)
  • d929969 TYP: timedelta64: datetime.timedelta construction isn't deprecated (#...
  • 839467f TYP: ma.getmaskarray: accept array-likes (#32934)
  • 64b721b TYP: polynomial: accept scalar coef in the poly constructors (#32931)
  • 06b7ad2 TYP: void: accept any dtype: str in constructor calls (#32928)
  • c7bcd2c TYP: place: widen mask (#32926)
  • Additional commits viewable in compare view

Updates pydantic from 2.13.5 to 2.14.1

Release notes

Sourced from pydantic's releases.

v2.14.1 2026-10-11

What's Changed

Performance

  • Avoid Python tuple allocation during model fields validation by @​Viicos in #13955
  • Avoid unnecessary extra dict allocation in model validation by @​Viicos in #13956

Fixes

Full Changelog: pydantic/pydantic@v2.14.0...v2.14.1

v2.14.0 2026-10-08

What's Changed

The highlights of the v2.14 release are available in the blog post. Several minor changes (considered non-breaking changes according to our versioning policy) are also included in this release. Make sure to look into them before upgrading.

This release drops support for Python 3.9 and adds support for Python 3.15.

New Features

  • Add support for multiple_of constraint in fraction and timedelta core schemas by @​Viicos in #13873
  • Add __namespace__ parameter to create_model() by @​Viicos in #13895

Changes

Fixes

  • Call enum constructors in both validation modes by @​Viicos in #13792
  • Fix documentation examples not raising and remove unused string_sub_type unused error code by @​Viicos in #13821
  • Catch OverflowError during ByteSize validation by @​Viicos in #13850
  • Require multiple_of constraints to be positive by @​Viicos in #13862
  • Always pop field name and model type stacks during schema generation by @​saquibjawedbit in #13859
  • Handle TypeError gracefully during docstring extraction by @​Viicos in #13874
  • Fix config propagation of stdlib dataclasses and TypedDicts in JSON Schema by @​Viicos in #13891
  • Don't apply ser_json_timedelta to all datetime types in serialization inference by @​Viicos in #13892
  • Encode JSON Schema defaults with a consistent configuration by @​Viicos in #13893

... (truncated)

Changelog

Sourced from pydantic's changelog.

v2.14.0 (2026-10-08)

GitHub release

What's Changed

The highlights of the v2.14 release are available in the blog post. Several minor changes (considered non-breaking changes according to our versioning policy) are also included in this release. Make sure to look into them before upgrading.

This release drops support for Python 3.9 and adds support for Python 3.15.

New Features

  • Add support for multiple_of constraint in fraction and timedelta core schemas by @​Viicos in #13873
  • Add __namespace__ parameter to create_model() by @​Viicos in #13895

Changes

Fixes

  • Call enum constructors in both validation modes by @​Viicos in #13792
  • Fix documentation examples not raising and remove unused string_sub_type unused error code by @​Viicos in #13821
  • Catch OverflowError during ByteSize validation by @​Viicos in #13850
  • Require multiple_of constraints to be positive by @​Viicos in #13862
  • Always pop field name and model type stacks during schema generation by @​saquibjawedbit in #13859
  • Handle TypeError gracefully during docstring extraction by @​Viicos in #13874
  • Fix config propagation of stdlib dataclasses and TypedDicts in JSON Schema by @​Viicos in #13891
  • Don't apply ser_json_timedelta to all datetime types in serialization inference by @​Viicos in #13892
  • Encode JSON Schema defaults with a consistent configuration by @​Viicos in #13893
  • Propagate init and kw_only=False from Field() to stdlib dataclass fields by @​Viicos in #13898
  • Respect propagated extra config in the JSON Schema of stdlib dataclasses by @​Viicos in #13899
  • Handle OS errors during ZoneInfo validation by @​Viicos in #13912
  • Handle exceptions during Decimal validation by @​Viicos in #13940
  • Rebuild incomplete types during serialization inference by @​Viicos in #13922
  • Reject large exponents in Fraction validation by @​Viicos in #13944
  • Avoid validating URL prefix multiple times in multi host URLs by @​Viicos in #13945

New Contributors

... (truncated)

Commits
  • b2212c7 Prepare release v2.14.1
  • 968fb2b Fix docs conversion table
  • 6adc8b3 Support named tuples in Sequence validation
  • 7637fbc Reject out-of-range int inputs for timedelta
  • dfdbfcb Enforce the max_digits whole-digits limit in the Python Decimal validator
  • e2456d3 Support closed and extra_items via inheritance in TypedDict
  • 317655d Harden CI security
  • 3ba1dd4 Fix TypeError on ForwardRef on Python 3.10.0
  • 43681ab Bump samuelcolvin/check-python-version action to v5.1
  • d6bc53a Avoid unnecessary extra dict allocation in model validation
  • Additional commits viewable in compare view

Updates typer from 0.27.2 to 0.27.3

Release notes

Sourced from typer's releases.

0.27.3

Fixes

  • 🐛 Escape terminal control characters in error messages. PR #1972 by @​tiangolo.

Internal

Changelog

Sourced from typer's changelog.

0.27.3 (2026-10-06)

Fixes

  • 🐛 Escape terminal control characters in error messages. PR #1972 by @​tiangolo.

Internal

Commits

Updates torch from 2.14.0 to 2.14.1

Release notes

Sourced from torch's releases.

PyTorch 2.14.1 Release

This release is meant to fix the following regressions and silent correctness issues:

Silent correctness fixes

  • Fix incorrect torch.linalg.lstsq solutions on MPS for complex batched underdetermined systems (#196113), fixed by #196128
  • Fix non-orthogonal U and inaccurate small singular values from torch.linalg.svd on MPS for rank-deficient and ill-conditioned inputs (#196112), fixed by #196139 and #199063
  • Update the CUDA 13.2 Linux binaries to CUDA 13.2.2 (#196351). This NVIDIA update resolves two critical issues that could produce incorrect results (CUDA 13.2.2 release notes):
    • cuBLAS: cublasLtMatmul() could ignore tensor-wide scaling for NVFP4 matrix multiplications (introduced in CUDA 13.2 Update 1)
    • Compiler: failed thread reconvergence could leave stale or corrupted register values in kernels with nested thread divergence (present since CUDA 12.8)

Regression fixes

  • Fix torch.linalg.svd, torch.linalg.svdvals and torch.linalg.lstsq failing on MPS with a Metal pipeline-state error for inputs above 8192 elements (#195937), fixed by #195949 and #195950
  • Fix internal assert in torch.svd(out=) on MPS for complex inputs (#195822), fixed by #195872
Commits
  • 5c48869 [MPS] Fix Jacobi SVD convergence for small columns (#199086)
  • 35223a2 [release/2.14] Run the release runner-group reconcile in pytorch/pytorch (#19...
  • 41ffbc4 [release-only] Update version to 2.14.1 (#198661)
  • e8f0c01 [release/2.14] [CD] Update to CUDA 13.2.2 for Linux binaries (#198644)
  • 911665d [MPS] Cherry-pick native SVD fixes into release/2.14 (#198394)
  • See full diff in compare view

Updates torchvision from 0.29.0 to 0.29.1

Release notes

Sourced from torchvision's releases.

TorchVision 0.29.1 Release

This is a patch release, which is compatible with PyTorch 2.14.1. There are no new features added.

Packaging

  • Relax the PyTorch requirement from torch==2.14.0 to torch>=2.14. TorchVision is now ABI stable with respect to PyTorch 2.14, so it no longer pins an exact PyTorch version (#9683, cherry-pick of #9680)
Commits

Updates rfdetr from 1.10.1 to 1.11.2

Release notes

Sourced from rfdetr's releases.

v1.11.2 — Safer Threaded Inference and Training Inputs

1.11.2 hardens threaded inference, turns a silent class-name shift into an error, and fixes predict() on flipped frames.

  • Threads sharing one model no longer corrupt its weights or switch off cuDNN for the whole process.
  • A class_names list that includes the Roboflow root category now errors instead of shifting every label.
  • predict() takes frame[:, :, ::-1], so the docs' video, webcam and RTSP examples run as written.
  • YOLO data.yaml files load consistently: class IDs sort numerically and images/train layouts work.
  • ONNX exports run faster through Apple's CoreML: Nano drops from 9.3 to 8.3 ms on an M4 Max with ONNX Runtime 1.30.

Upgrading from 1.11.1 means one removed constant: inline ["images", "labels"] if you imported REQUIRED_DATA_SUBDIRS. Four behaviour changes are worth a skim in the Migration guide.

✨ Spotlights

Threads sharing a model could corrupt its weights

A cold model's weights move from CPU to the accelerator on first use (predict(), inference(), and export()'s restore step), and several threads could run that move at once. On a cold RF-DETR segmentation model, four threads calling predict() together left 13 of 573 state_dict tensors corrupted. Nothing raised, and every frame came back with no detections. The check and the move now happen under a per-model lock, so a thread that arrives mid-move waits for it. (#1564)

from concurrent.futures import ThreadPoolExecutor
model = RFDETRSegNano()  # cold: weights still on CPU
with ThreadPoolExecutor(max_workers=4) as pool:
detections = list(pool.map(model.predict, frames))

Segmentation threads no longer disable cuDNN for everyone

The segmentation head wraps its depthwise convolution in torch.backends.cudnn.flags(enabled=False). That flag is process-global and not thread-safe: a second thread entering mid-scope saved False and restored it last, so every later convolution in the process quietly skipped cuDNN. Detections near the score threshold changed (25 instead of 24 on one real frame). Forward and backward scopes now share a lock, and a CPU input skips them entirely. No code change on your side. (#1565)

A root category in class_names is now an error

Roboflow COCO exports list a top-level category first, such as animals above cat, dog and horse. Since 1.9.2 it isn't one of the model's classes, so a list built from every category gave each class its neighbour's name, in checkpoints and in predict() output, with no warning. RFDETR.train() now compares class_names with the dataset before it writes training_config.json or starts a wandb/MLflow run. (#1572)

# 1.11.1 trained, with every name shifted by one
model.train(dataset_dir=ds, class_names=["animals", "cat", "dog", "horse"])
1.11.2 raises ValueError naming the extra entry; pass the real classes
model.train(dataset_dir=ds, class_names=["cat", "dog", "horse"])

predict() accepts flipped frames

frame[:, :, ::-1], the BGR-to-RGB flip in the video file, webcam and RTSP examples of docs/learn/pretrained.md, is a negative-stride NumPy view, and torch.from_numpy rejects those. The examples raised ValueError: At least one stride in the given numpy array is negative on the first frame. Only arrays with a negative stride get copied now. (#1573)

detections = model.predict(frame[:, :, ::-1])

REQUIRED_DATA_SUBDIRS is gone

... (truncated)

Changelog

Sourced from rfdetr's changelog.

Changelog

All notable changes to RF-DETR are documented here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Breaking Changes

  • format="coreml" with coreml_precision="float16" now returns float32 output arrays; the .mlpackage returned float16 outputs before, because it was converted as an iOS 16 program and is now converted as iOS 15. A consumer that reads the outputs as float16 (a typed buffer, a dtype check) must read float32. coreml_precision="float32" bundles are unchanged. (#1024)

  • Removed rfdetr.datasets.yolo.REQUIRED_DATA_SUBDIRS. is_valid_yolo_dataset resolves split directories through the YAML-aware resolver, which derives the labels directory from the resolved images path, so the constant no longer described how any code finds a split's subdirectories. Nothing inside the package read it; an external importer should inline ["images", "labels"]. (#1570)

  • rfdetr[onnx] no longer installs polygraphy or onnx_graphsurgeon, so a host that exports to TensorRT or TFLite with rfdetr[onnx] plus a separately installed tensorrt or onnx2tf must install the missing package itself; see the matching entry under Removed. (#1588)

  • A custom Affine(translate_px=...) config on the Kornia augmentation backend behaves differently from 1.11.2. That release ignored translate_px: the config built, never shifted the image and, when rotate was omitted, rotated it by a random ±15°. The shift is now applied, the implicit rotation is gone, and combinations Kornia cannot reproduce, such as rotation, scale, shear, a nonzero fill or reflected borders, raise ValueError when the pipeline is built. Pass augmentation_backend="cpu" (Albumentations, rfdetr[augment]) to keep them; augmentation_backend="auto" resolves to Kornia on a CUDA machine with Kornia installed. The fix itself is listed under Fixed.

  • In eval mode, a segmentation LWDETR no longer returns pred_masks in aux_outputs or enc_outputs unless it is called with all_layer_masks=True; the final pred_masks are unchanged. Code that runs SetCriterion on eval-mode outputs, such as an evaluation loop that computes a segmentation loss, got every layer's masks before and must now pass that keyword. Without it the criterion raises a ValueError that names it. See the matching entry under Changed. (#1628)

Added

  • Keypoint training accepts Kornia augmentation on CUDA. The default backend remains cpu; users can select kornia/gpu explicitly, or select auto to use Kornia when available. Image geometry, boxes, padding masks and keypoints share each augmentation draw; keypoint visibility, dropped instances and paired-joint flips stay synchronized. (#1606)

  • TrainConfig.eval_backend="hotcoco_streaming" matches each validation batch with hotcoco's StreamingEval as it arrives, so the end-of-epoch COCO evaluation only accumulates and summarizes. Metrics are bit-identical to eval_backend="hotcoco". On an Apple M-series CPU with synthetic data, the end-of-epoch step dropped from 0.238 s to 0.025 s for 600,000 box detections and from 0.178 s to 0.005 s for a bbox+segm run of 20,000 detections. Total CPU time is higher for box-only runs (1.05 s vs 0.29 s) and about equal for bbox+segm (0.66 s vs 0.71 s), because matching moves into the validation step. Streaming applies to single-process runs whose labels fall within [0, num_classes]; under DDP, or after the metric is pickled mid-epoch, it evaluates in one batch as "hotcoco" does and logs why.

  • format="coreml" now embeds notes in the .mlpackage metadata (MLModel.user_defined_metadata, key rfdetr_notes, encoded as in the ONNX export) instead of warning and dropping it, and stamps the RF-DETR version under rfdetr_version. (#1024)

  • rfdetr.RFDETRAtto, rfdetr.RFDETRFemto and rfdetr.RFDETRPico: real-time detection models with a PE-Core-T backbone, provided by rfdetr_plus like the XLarge models (pip install "rfdetr[plus]", Platform Model License 1.0). RFDETR.from_checkpoint() resolves their checkpoints; an outdated rfdetr_plus raises an upgrade hint, and a broken rfdetr_plus install no longer blocks loading core checkpoints.

  • rfdetr.models.backbone.register_backbone(encoder, backbone_cls): an extension package can provide a non-DINOv2 encoder for a ModelConfig.encoder name by subclassing Backbone and overriding _build_encoder. A registered encoder that defines set_export_shape(shape) gets its position embeddings frozen for export, like DINOv2.

  • ModelConfig.dim_feedforward (default 2048) sets the decoder feed-forward width.

  • RFDETRModelModule(..., load_encoder_weights=False) skips fetching the encoder's upstream pretrained weights when every weight is replaced right after construction; the default True keeps the previous behaviour. RFDETR.evaluate() passes it.

  • RFDETR.export(format="tensorrt", quantization="int8", calibration_data=...) builds an INT8 TensorRT engine (*_int8.trt) for detection, segmentation and keypoint models. The mask head and keypoint head stay FP16. The 3-channel patch embedding of the detection models, which TensorRT cannot run in INT8 as a convolution without padding its input, is exported as a matrix multiply so that it runs in INT8 too; the 12-pixel patch embedding of the segmentation and keypoint models stays an FP16 convolution. The Tesla T4 detection rows were re-measured on TensorRT 10.16.1.11; every other row used TensorRT 11.4. On an RTX 5070 (native Linux) and a Tesla T4 (Colab), at batch 1, 4 and 8, INT8 is 1.06× to 1.43× faster than FP16 on the RTX 5070 and 1.05× to 1.31× on the T4 with a CUDA graph. At batch 1 it loses 0.47 to 0.91 AP points on the RTX 5070 and 0.37 to 0.98 on the T4 (box AP for detection, mask AP for segmentation, keypoint AP for keypoints, on all 5000 val2017 images, calibrated on 128 train2017 images). The INT8 engine is 21% to 47% smaller than the FP16 one on the RTX 5070, but on the T4 the segmentation and keypoint engines are larger at batch 4 and 8. Section 8.1 of the CUDA cookbook reproduces these numbers on your GPU. dynamic_batch=True and backbone_only=True are refused, and the engine needs fp16=True and TensorRT 10 or newer. Calibration runs calibration_data through the FP32 graph with onnxruntime on the CPU, so host memory grows with batch_size. The TensorRT INT8 section has the per-model tables and the limits. (#1024)

  • Public rfdetr.export.inference exposes TRTInference, load_executorch_method, preprocess_to_nchw, decode_detections and DecodedDetections next to OpenVINOInference; each resolves lazily, so importing the module does not require an optional runtime. (#1585)

  • Public rfdetr.export.benchmark exposes measure_latency, measure_memory, BenchmarkResult and MemoryResult, the helpers the per-hardware export cookbooks use. (#1585)

  • TRTInference(cuda_graph=True) (rfdetr.export.inference.TRTInference; python -m rfdetr.export.benchmark does not expose it) captures the engine's launch into a CUDA graph on the first call and replays it on every later call, which removes most of the per-call launch cost at small batch sizes. It is off by default. Measured as wall-clock time per call, including the copy of the input, against the same engine run with sync_mode=True (3 x 1000 calls, minimum of the medians, RTX 5070 under WSL2): with TensorRT 10.16 a Nano FP16 engine took 1.65 ms at batch 1 and a replay 0.99 ms (1.67x faster), Small 2.10 ms and 1.49 ms (1.41x); at batch 8 the gain was 1.09x for Nano and 1.05x for Small. With TensorRT 11.3 Nano gained 1.71x and Small 1.42x at batch 1. The default async path, which needs pycuda, was not measured. The outputs matched the plain call (bit for bit on the engines measured; repo tests check within 1e-3). Only an engine whose optimization profile fixes every input shape, the batch included, is accepted, so a runtime keeps one graph: an engine exported with dynamic_batch=True, or one whose image size varies, is refused with a ValueError at construction, because captured graphs would share one execution context that a change of shape modifies between replays, which TensorRT documents as undefined behaviour. The graph held 0.57 to 0.73 MiB of device memory and 1.6 to 2.1 MiB of host memory on the Nano and Small engines measured. A runtime is not safe to call from several threads. The option uses its own torch stream, so it does not need pycuda, and it raises instead of falling back when combined with sync_mode=True or when the engine cannot be captured. (#1583)

  • RFDETR.export(format="tensorrt", trt_metadata=True) writes <engine>.json next to the engine. It lists what a program needs to run the engine without importing the model: the input name, size, layout and normalization (RGB order, divide by 255, mean and std, and the resize method), the output names in order, the batch profile (static size or dynamic min/opt/max), the precision actually built, the opset, the TensorRT version and GPU, notes, and the engine file's size and SHA-256, so a consumer can check that the description file belongs to the engine it loads. A .trt file has no slot for this, so a C++, Triton or DeepStream consumer had to be told by hand, and notes only reached the intermediate ONNX. The file is written atomically and, on Linux and macOS where permitted, takes the engine's permission bits and group. When a build writes no description file (the option off, or TensorRTExporter.build_engine), an earlier description file with the same name is reported with a warning, never deleted. Class names and the background slot are not recorded yet. Off by default; other formats warn and ignore it. (#1024)

  • RFDETR.export(format="tensorrt") takes trt_hardware_compatibility ("ampere_plus" or "same_compute_capability") and trt_version_compatible=True. They ask TensorRT for an engine that other GPUs, or other releases of the same TensorRT major version, may load; every engine used to be tied to the GPU and TensorRT version that built it. We had one GPU, so running on a second one is untested. Version compatibility worked between TensorRT 11.2 and 11.3 in both directions, and didn't work across major versions or between 10.13 and 10.16. It needs TensorRT's lean runtime package, which the pip wheels don't include; without it the export stops early with an ImportError that names it. On an RTX 5070 with TensorRT 11.3 (static-batch RFDETRNano fp16, median of fresh-process build_engine calls, latency from CUDA events): "ampere_plus" took 130 s to build instead of 38 s, made a 99 MB engine instead of 62 MB and ran 10.9% slower (RFDETRSmall: 9.6%); "same_compute_capability" cost nothing measurable; trt_version_compatible added 105 MB and ran as fast (within 1%). COCO AP stayed within build-to-build noise for every option. A portable engine gets its own file name suffix, so it doesn't overwrite a default engine (unless output_name is set). TRTInference and rfdetr.export.benchmark take engine_host_code_allowed (off by default), which a TensorRT 11 version-compatible engine needs because it carries host code. Both options are off by default; other formats warn and ignore them. (#1024)

  • RFDETR.inference(compile_backend="cudagraph") adds an opt-in direct CUDA Graph replay backend for fixed batch size and resolution. It freezes the TorchScript trace, captures its forward once, and clones graph-owned outputs so later calls cannot overwrite earlier results; the default remains "torchscript", and compile=True on a non-CUDA device raises ValueError. On one NVIDIA L4 VM with RF-DETR Nano, FP16, batch 1, and the public PIL-image predict() path, seven sequential fresh-process paired runs reduced median end-to-end latency from 9.719 ms to 3.884 ms (60.03% lower, 2.50x throughput; paired throughput range 2.43-2.57x). Total setup took a 7.37 s median and graph capture added 29.1 MiB of allocated CUDA memory over the retained trace in the benchmark. One full COCO val2017 pass produced exactly the same AP/AP50 (0.480240/0.671360), with 1.5 million ranked detections per arm; its descriptive, single-process median predict() latency was 9.887 ms versus 4.051 ms. (#1547)

... (truncated)

Commits
  • 7433d59 releasing 1.11.2
  • f08cb6a docs(export): realign table, drop mAP claim
  • 923ae68 docs(cookbooks): align latency tiers, prep 1.11.2 (#1594)
  • 2f0d3dc docs(export): split guide into three pages; fix cookbook TOC (#1591)
  • 51db63b fix(inference): accept negative-stride NumPy views in predict() (#1573)
  • c58996b fix(io): keep atomically written files readable under the process umask (#1582)
  • 43fab61 fix(training): reject class_names that start with a Roboflow root category ...
  • 87442b9 fix(datasets): normalize YOLO class IDs across class-name entry points (#1571)
  • 35e66ca fix(datasets): recognize existing YAML-resolved YOLO layouts (#1570)
  • a1c04ad fix(keypoints): preserve identities across repeated horizontal flips (#1569)
  • Additional commits viewable in compare view

Updates supervision from 0.30.2 to 0.30.9

Release notes

Sourced from supervision's releases.

supervision-0.30.9

v0.30.9 — Closer to OpenCV without OpenCV

Installs without OpenCV now draw and resize like OpenCV, and the COCO and CreateML loaders stop accepting reversed boxes.

  • BoxAnnotator borders paint the same pixels with or without OpenCV installed.
  • get_video_frames_generator reads browser-recorded WebM and variable frame rate MKV to the end.
  • from_coco, from_pascal_voc and from_createml no longer build boxes with x_min past x_max.
  • get_top_k rejects a negative k instead of dropping one classification.
  • DetectionsSmoother forgets expired tracks on frames without tracker_id.

Drop-in upgrade. Without OpenCV, borders and resized regions shift toward OpenCV's output. Negative k, negative COCO/CreateML box sizes and an epsilon that is NaN, infinite or 1e30 and larger are now rejected; without OpenCV, so is rectangle thickness above 32767.

✨ Spotlights / highlights

NumPy fallback matches OpenCV

Without opencv-python, thick rectangle borders were drawn entirely inside the rectangle. They now extend (thickness + 1) // 2 pixels outside it, like OpenCV. The same release fixes cv2.resize with fx/fy sampling the wrong source pixels (it hit PixelateAnnotator) and approxPolyDP dropping vertices that sit beyond a segment endpoint. For polygons, the fallback now follows OpenCV 4.13 and later; older OpenCV keeps the infinite-line rule, so results differ by installed backend. (#2675, #2690, #2673)

import numpy as np
import supervision as sv
scene = np.zeros((100, 100, 3), dtype=np.uint8)
detections = sv.Detections(xyxy=np.array([[20, 20, 80, 60]]), class_id=np.array([0]))
annotated = sv.BoxAnnotator(thickness=2).annotate(scene, detections)
before (no OpenCV): 392 painted pixels, border drawn inside the box
now:                596 painted pixels, same as with OpenCV

Video reads to the end of the stream

With no end, sv.get_video_frames_generator stopped at OpenCV's frame count. A WebM without a duration reports a huge negative count, so browser recordings yielded no frames. It now reads until the stream ends, and sv.process_video without max_frames does the same. (#2672)

for frame in sv.get_video_frames_generator("recording.webm"):
    ...
# before: no frames yielded
# now:    every frame

No more reversed boxes from COCO, Pascal VOC and CreateML

This finishes the from_yolo fix from 0.30.8. COCO and CreateML name an extent, so a negative width or height is rejected. Pascal VOC names two corners, so a reversed pair is ordered. The three exporters order corners first, so a reversed Detections box is written as the same rectangle. (#2683)

A negative k no longer hides a classification

get_top_k(-1) returned every classification except the lowest-confidence one. It now raises. (#2695)

</tr></table> 

... (truncated)

Changelog

Sourced from supervision's changelog.

0.30.9 Oct 8, 2026

  • sv.Classifications.get_top_k now raises ValueError for a negative k. It was passed to NumPy slicing, so get_top_k(-1) silently returned all but the lowest-confidence classification. k=0 and k larger than the number of classifications are unchanged. (#2695)
  • sv.InferenceSlicer now probes past leading empty batches before choosing threaded or sequential execution. Batched callbacks producing oriented boxes keep the sequential fallback and warning even when the first batch has no detections, as in the single-slice path. (#2685)
  • sv.DetectionsSmoother now ages cached track history on frames without tracker_id, as it already does on tracked empty frames. Expired boxes and confidence scores no longer affect a returning track. Short gaps still preserve smoothing; untracked detections keep the existing warning and unchanged return value. (#2676)
  • sv.BoxAnnotator, sv.CropAnnotator, sv.PercentageBarAnnotator and sv.draw_rectangle now draw a border of thickness 2 or more identically with and without opencv-python. The NumPy fallback drew the border entirely inside the rectangle, because Pillow's ImageDraw.rectangle(outline=..., width=...) only grows inward, while OpenCV centers each edge's band on the edge and rounds the four joints with a filled disc. A default sv.BoxAnnotator() box with thickness=2 around (20, 20)–(80, 60) was 1 pixel smaller per side and painted 392 pixels instead of 596. The border now extends (thickness + 1) // 2 pixels outside the rectangle. Filled rectangles and thickness=1 borders are unchanged, except zero-height rectangles (a horizontal line or single point), which no longer draw 1 or 2 extra pixels. thickness must now be an integer of at most 32767, as in OpenCV, and a very large thickness no longer allocates memory proportional to its square. (#2675)
  • The NumPy cv2.resize fallback now maps pixels with fx/fy when <...

    Description has been truncated

Bumps the python group with 13 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [numpy](https://github.com/numpy/numpy) | `2.5.3` | `2.5.4` |
| [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` |
| [typer](https://github.com/fastapi/typer) | `0.27.2` | `0.27.3` |
| [torch](https://github.com/pytorch/pytorch) | `2.14.0` | `2.14.1` |
| [torchvision](https://github.com/pytorch/vision) | `0.29.0` | `0.29.1` |
| [rfdetr](https://github.com/roboflow/rf-detr) | `1.10.1` | `1.11.2` |
| [supervision](https://github.com/roboflow/supervision) | `0.30.2` | `0.30.9` |
| [fiftyone](https://github.com/voxel51/fiftyone) | `1.21.0` | `1.22.1` |
| [transformers](https://github.com/huggingface/transformers) | `5.17.0` | `5.19.0` |
| [onnx](https://github.com/onnx/onnx) | `1.22.0` | `1.23.2` |
| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.29.0` | `1.31.0` |
| [ruff](https://github.com/astral-sh/ruff) | `0.16.6` | `0.17.0` |
| [mypy](https://github.com/python/mypy) | `2.3.1` | `2.4.0` |



Updates `numpy` from 2.5.3 to 2.5.4
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](numpy/numpy@v2.5.3...v2.5.4)

Updates `pydantic` from 2.13.5 to 2.14.1
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](pydantic/pydantic@v2.13.5...v2.14.1)

Updates `typer` from 0.27.2 to 0.27.3
- [Release notes](https://github.com/fastapi/typer/releases)
- [Changelog](https://github.com/fastapi/typer/blob/master/docs/release-notes.md)
- [Commits](fastapi/typer@0.27.2...0.27.3)

Updates `torch` from 2.14.0 to 2.14.1
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](pytorch/pytorch@v2.14.0...v2.14.1)

Updates `torchvision` from 0.29.0 to 0.29.1
- [Release notes](https://github.com/pytorch/vision/releases)
- [Commits](pytorch/vision@v0.29.0...v0.29.1)

Updates `rfdetr` from 1.10.1 to 1.11.2
- [Release notes](https://github.com/roboflow/rf-detr/releases)
- [Changelog](https://github.com/roboflow/rf-detr/blob/develop/CHANGELOG.md)
- [Commits](roboflow/rf-detr@1.10.1...1.11.2)

Updates `supervision` from 0.30.2 to 0.30.9
- [Release notes](https://github.com/roboflow/supervision/releases)
- [Changelog](https://github.com/roboflow/supervision/blob/develop/docs/changelog.md)
- [Commits](roboflow/supervision@0.30.2...0.30.9)

Updates `fiftyone` from 1.21.0 to 1.22.1
- [Release notes](https://github.com/voxel51/fiftyone/releases)
- [Commits](voxel51/fiftyone@v1.21.0...v1.22.1)

Updates `transformers` from 5.17.0 to 5.19.0
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](huggingface/transformers@v5.17.0...v5.19.0)

Updates `onnx` from 1.22.0 to 1.23.2
- [Release notes](https://github.com/onnx/onnx/releases)
- [Changelog](https://github.com/onnx/onnx/blob/main/docs/Changelog-ml.md)
- [Commits](onnx/onnx@v1.22.0...v1.23.2)

Updates `onnxruntime` from 1.29.0 to 1.31.0
- [Release notes](https://github.com/microsoft/onnxruntime/releases)
- [Changelog](https://github.com/microsoft/onnxruntime/blob/main/docs/ReleaseNotesWorkflow.md)
- [Commits](microsoft/onnxruntime@v1.29.0...v1.31.0)

Updates `ruff` from 0.16.6 to 0.17.0
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](astral-sh/ruff@0.16.6...0.17.0)

Updates `mypy` from 2.3.1 to 2.4.0
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v2.3.1...v2.4.0)

---
updated-dependencies:
- dependency-name: numpy
  dependency-version: 2.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: pydantic
  dependency-version: 2.14.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: typer
  dependency-version: 0.27.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: torch
  dependency-version: 2.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: torchvision
  dependency-version: 0.29.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: rfdetr
  dependency-version: 1.11.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: supervision
  dependency-version: 0.30.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: fiftyone
  dependency-version: 1.22.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: transformers
  dependency-version: 5.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: onnx
  dependency-version: 1.23.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: onnxruntime
  dependency-version: 1.31.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: ruff
  dependency-version: 0.17.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: mypy
  dependency-version: 2.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@dependabot @github

dependabot Bot commented on behalf of github Oct 25, 2026

Copy link
Copy Markdown
Contributor Author

Looks like these dependencies are updatable in another way, so this is no longer needed.

@dependabot dependabot Bot closed this Oct 25, 2026
@dependabot
dependabot Bot deleted the dependabot/uv/python-39e2b5f265 branch October 25, 2026 00:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants