Skip to content

WebGPU static plugin EP - #32395

Merged
Edward Chen (edgchen1) merged 121 commits into
mainfrom
edgchen1/webgpu_static_plugin
Oct 5, 2026
Merged

Edward Chen (edgchen1) merged 121 commits into
mainfrom
edgchen1/webgpu_static_plugin

Conversation

@edgchen1

@edgchen1 Edward Chen (edgchen1) commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

Description

Enable support for statically linked plugin EPs in ORT.

Update the WebGPU EP to have an additional static plugin EP build configuration.

Motivation and Context

Eventually, we want to only have a plugin EP implementation for the WebGPU EP while allowing consumers like onnxruntime-web to continue to statically link the EP.

The longer-term goal is to move the WebGPU EP into a separate repo. Refer to the plan doc for more details.

Edward Chen (edgchen1) and others added 30 commits August 17, 2026 12:20
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Scope browser test relocation to provider behavior and keep ORT Web module assembly, packaging, and static registration tests in ORT. Record that browser-hosted provider tests are an exception to the no-source-checkout build contract, and that some web lanes are currently non-blocking or build-only. Drop the duplicated test classification in favor of the test-conformance doc, and exclude the deprecated JSEP TypeScript path from scope.

Add a minimum-version validation work package so the declared MIN_ONNXRUNTIME_VERSION floor is verified rather than claimed, and correct the packaging migration scope to the pipeline definitions still outside the staging root.

Align the four workstream docs: consistent section ordering, rename 'Parallel work packages' to 'Work packages' with explicit sequencing, flatten the plugin-boundary Scope wrapper, and separate provider-isolation versioning content from its open questions.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
State the critical path explicitly. Static plugin registration is a prerequisite for removing the adapter, not merely an enabler, so it gates code isolation. Reflect this in the overview, the dependency diagram, Stage 2, and the provider-isolation sequencing list. Replace the misaligned ASCII diagram with Mermaid.

Restructure provider-isolation work packages from nine to seven. Add a mechanical staging-root move that is off the critical path, since relocating files does not change which base classes the provider uses. Merge code isolation with the standalone build, because the provider is not independently buildable until the kernel-authoring foundation is replaced. Dissolve the dependency-ownership and packaging-migration packages into the packages that do the work: WebGPU owns Dawn and WGSL outright, and the packaging and CI pipelines must be rewired atomically with the build switch to avoid a broken window.

Correct terminology and inaccuracies: distinguish the plugin EP API from ORT package build inputs, scope the JSEP exclusion to the WebGPU compute path so it does not imply WebNN removal, fix the WebGpuExecutionProvider name casing and show registration name and EP name as independent, replace a stale version in the conformance kit example, and cross-reference the result semantics rather than restating them.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Adds a cross-repository version policy that resolves the two-way pin between ORT and the WebGPU repository, distinguishing the build-against ORT version from the runtime floor and keeping both blocking lanes on immutable released artifacts. Adds a Related work section stating independence from the JSEP migration, and a terminology table.

Renames the extraction launch matrix to consumer dispositions and moves the non-consumer row to prose. Ties the size and inference latency gates to the Stage 1 baselines, removes the undefined startup metric, and adds a latency criterion to the plugin-boundary workstream.

Records user-facing documentation ownership and post-cutover issue and pull request handling as part of the repository migration. Corrects a stale claim that onnxruntime-webgpu still ships from the non-plugin static build.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…on plan

Splits the provider's non-public-API dependencies into three groups, adding plugin EP implementation utilities under include/onnxruntime/ep/. Those headers are offered for plugin EP implementations but are not shipped in the released package, so they are copied rather than consumed. Scopes the section to what the compiler and linker see, and moves the build-input inventory to the standalone build contract.

Replaces the single disposition for CI lanes with three: lanes that build the provider statically into ORT are retired, onnxruntime-web keeps static linkage against the pinned external source, and provider-owned lanes move to the WebGPU repository. Records that ORT-root packaging scripts reference WebGPU independently of the plugin packages, and that the plugin-ep-webgpu/rel-* branch prefix disappears once release branches no longer share the ORT repository.

Adds the browser-test lane to the cross-repository version policy, which the standalone build contract already pointed at it for.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Scopes CPU-fallback disabling to non-CPU targets. The conformance design required running cases against CPU as a reference while unconditionally disabling CPU fallback, which ORT rejects whenever nodes are assigned to the CPU EP.

Makes the static-runner SDK conditional in the design section, Phase 3, and the MVP deliverables, since whether a native static-linkage runner is needed at all is still an open question.

Qualifies the isolation milestone: every build input is either inside the staging root or a declared external dependency. The previous wording forbade any input resolving outside the root, which the standalone build contract's own ORT package and pinned third-party dependencies could not satisfy.

Reframes the cross-repository version policy around avoiding a circular dependency rather than claiming neither side can be blocked, and names the wait for an ORT release as a scheduling cost rather than a deadlock.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
… that way

Adds a generic mechanism for plugin EPs that are linked into the ORT binary
rather than loaded from a shared library, and uses it for the WebGPU EP via a
new --use_webgpu static_plugin build configuration.

This lets one set of EP sources (core/providers/webgpu/ep) serve both a
dynamically loaded plugin library and a statically linked build. The latter is
what ORT Web needs, since Emscripten cannot load shared library modules.

Core:
- EpLibraryStaticPlugin, an EpLibrary that takes the factory entry points
  directly instead of resolving them from a loaded library. The factory
  lifecycle it shares with EpLibraryPlugin is factored into
  ep_library_plugin_utils.
- ep_static_plugins.cc, a link-time registry of statically linked plugin EPs.
- Environment::CreateAndRegisterStaticPluginEps().

The registration runs from OrtEnv::GetOrCreateInstance() rather than from
Environment::Initialize(), after the singleton is published and its reference
taken. Registering an EP enumerates its devices, and the WebGPU factory queries
the environment while doing so, which self-deadlocks if the environment is not
yet published. OrtEnv::m_ becomes recursive to allow that re-entry.

WebGPU EP:
- Entry point names are macro-parameterized so the statically linked build can
  emit prefixed symbols. The shared library build must keep the unprefixed
  names that EpLibraryPlugin::Load looks up.
- Protobuf shutdown is compiled out unless the EP owns the process globals,
  which is only true for the shared library module.
- ORT_PLUGIN_EP_STATICALLY_LINKED disables manual C++ API initialization. The
  MSVC detect_mismatch guard on ORT_API_MANUAL_INIT requires whole-binary
  agreement, so forcing it on in ep/api.h fails to link once EP objects are
  part of the ORT binary. Initialization is unnecessary there anyway: the EP
  and ORT are the same binary and therefore the same API version.

Tests:
- The plugin EP test infrastructure treats the EP library path as optional,
  since ORT core registers statically linked plugin EPs itself.
- Virtual devices are requested through the allow_virtual_devices environment
  configuration entry rather than a ".virtual" registration name suffix, which
  is unavailable when ORT core chooses the registration name.
- The WebGPU plugin EP test definitions move into a shared cmake function and
  are applied to onnxruntime_provider_test as well as onnxruntime_test_all.
  The operator tests live in the former, so the plugin path had no operator
  test coverage.

Design notes are in docs/design/webgpu_ep_extraction.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The static_plugin configuration had no CI coverage, since both new cmake
options default to OFF and every existing WebGPU job builds either the
internal EP or the shared library plugin EP.

Windows runs on the GPU pool and builds and tests, which is the only way to
exercise the operator tests on this configuration. Linux is build-only, like
the WebGPU job next to it, and mainly serves to compile the configuration
with GCC as well as MSVC. It keeps --build_wheel because linking the EP into
pybind11_state is specific to this configuration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The EP adapter OpKernelInfo defines GetAttr()/GetAttrOrDefault() inline in the
header, so GCC can see their failure and exception paths and reports
-Werror=maybe-uninitialized for values that are only read when the lookup
succeeded. The in-tree OpKernelInfo hides these paths behind an out-of-line
definition, which is why this only shows up when building the EP adapters with
GCC.

Value-initialize the temporaries in the accessors and in the WebGPU kernel
constructors that pass a local by pointer and read it back.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
`ep_library_path` is now optional in the dynamic plugin EP test infrastructure
config, so that a statically linked plugin EP that ORT core has already
registered can be selected. Update the test that asserted it was required, and
add coverage for omitting it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The EP adapter types are defined entirely inline in headers, so GCC sees
through the failure and exception paths of accessors like
OpKernelInfo::GetAttr<> and falsely warns about values that are only read once
the call succeeded. It also reports false positives deep inside
absl::InlinedVector for TensorShapeVector locals that are always constructed,
which cannot be addressed at the source.

Apply the same target scoped suppression the CUDA plugin EP already uses. It is
limited to GCC and to the EP adapter build so that other builds stay strict.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Scratch handoff notes covering build configurations, CI dispatch and log
retrieval, the GCC -Werror=maybe-uninitialized behavior of the header-only EP
adapters, and what still needs validating (notably operator tests on a real
GPU). To be removed before the PR.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Built the static_plugin and internal-EP WebGPU configurations from the same tree on a
machine with a real GPU and compared them.

onnxruntime_provider_test: zero failures in both, and zero status differences across the
5894 tests common to the two builds. onnxruntime_test_all: 1965 passed in both, no
differences. This closes open item 2, the operator-level validation that could not be
done on the original GPU-less development machine.

Also records the two categories of test that legitimately differ (white-box WebGPU tests
excluded from adapter builds, and the deliberately paired virtual-device tests), the
third GCC -Werror batch seen in run 33009901327, and the finding that the MAX_PATH build
directory restriction is specific to MSBuild rather than to the path length itself.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…sign doc

The work log is deleted before the PR, so these findings need to live in the design
document instead.

Records that operator-level validation on a real GPU is now done and showed zero status
differences across the 5894 provider tests common to the static_plugin and internal-EP
builds.

Also documents the known coverage difference: onnxruntime_unittests.cmake excludes
test/providers/webgpu/* from adapter builds because those tests include internal EP
headers, which leaves HardSwish_WebGPU and MatMul2BitsWebGpu (12 operator tests) running
only on the internal path. Explains why the virtual-device tests are deliberately paired
rather than shared, and generalises the GCC -Werror guidance now that several successive
batches have appeared.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
When onnxruntime_providers_webgpu is built with the EP adapter headers in its precompiled header, GCC 14 at -O3 inlines the std::string move-concat chain in EmitGateActivationExpr and reports a false positive -Warray-bounds, which -Werror turns into a build failure on the Linux static_plugin CI leg.

Build the expression with ORT's MakeString instead. This is a single-site source fix and keeps -Warray-bounds active for the rest of the provider, unlike a target-scoped -Wno-array-bounds.

Verified with GCC 14.2.1 in an AlmaLinux 8 gcc-toolset-14 container: the unfixed source still errors under -Werror through the same harness, the fixed source compiles clean.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…on recipe

Closes the batch-at-a-time discovery loop: a single container build with --compile_no_warning_as_error shows that of ~340 warnings in the static_plugin build, exactly one belongs to ORT source. Documents the AlmaLinux 8 / gcc-toolset-14 reproduction, the single-object -Werror recheck, and the need for a negative control.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…ched CI runs

Records both halves of the array-bounds verification (single-object recheck with a negative control, plus a full -Werror build), the commit table through ef68884, and the three CI runs dispatched on it.

Also fixes a broken internal anchor: the heading 'GCC and -Werror' slugs to gcc-and--werror with a double hyphen, so every link to it was dead. Renamed the heading so it slugs unambiguously.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Builds and links WASM with --use_webgpu static_plugin, and verifies at the symbol level that ORT core's static plugin registration is live rather than compiled out. Also records that Linux WebGPU CI is green after the array-bounds fix.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…sign doc

Building the WebGPU EP into the WASM binary as a static plugin is only half
of moving ORT Web onto the plugin path. Document the two remaining gaps,
neither of which the linker can catch: ORT Web selects the EP by name and
that name resolves only to the internal EP, and no WebGPU OrtEpDevice exists
under Emscripten because the default device discovery reports a CPU only.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
A minimal build excludes core/session/plugin_ep from the session library, so
Environment::CreateAndRegisterStaticPluginEps is compiled out, but the WebGPU
provider is still built and linked. The combination produced a binary holding
the EP that never registered it, with no diagnostic at configure, build or run
time. Fail configure instead.

This is a temporary guard. Letting minimal builds use a static plugin EP is
worthwhile and needs the registration path to be available there first.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Ran the full js/web WebGPU operator suite (2152 tests) in Edge against a
WASM --use_webgpu static_plugin binary. All pass. Update the ORT Web
migration section to record what the prototype established for each step:
Emscripten OrtEpDevice synthesis, the three-place WASM export requirement,
EP option prefix equivalence between the name-based and V2 paths, the
canonical EP name change needed in session-options.ts, and the
test-runner-cli --webgpu-ep forwarding gap.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
…ists

Emscripten previously fell through to device_discovery_default.cc, which
reports only a CPU device, so no OrtEpDevice could ever be created for
WebGPU in a wasm build.

Add core/platform/emscripten/device_discovery.cc, selected by a new
Emscripten arm in onnxruntime_common.cmake. It reports the CPU device plus
a GPU OrtHardwareDevice when a synchronous EM_ASM_INT check finds
navigator.gpu. No factory change is needed: the existing loop in
Factory::GetSupportedDevicesImpl filters on OrtHardwareDeviceType_GPU, so
the discovered device flows through and picks up both allocator infos.

vendor_id/device_id are left at 0 because a browser will not identify the
GPU: requestAdapter() is async and unavailable at OrtEnv creation time, and
GPUAdapterInfo masks vendor details anyway. The device is deliberately not
tagged is_virtual, since it is backed by real hardware.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
GetAttr/GetAttrs were implemented as a try around the throwing Ort:: C++
wrappers, converting Ort::Exception into a Status. GetAttrOrDefault relies
on that non-OK Status to substitute the default, which makes a missing
optional attribute depend on catching an exception.

Emscripten builds using --enable_wasm_api_exception_catching compile only
the C API boundary translation units with exception catching enabled, so
the catch never matched and the exception escaped GetAttrOrDefault. This
showed up as 949 suite0 failures on a reduced-size WebGPU static_plugin
wasm build.

Call the non-throwing OrtApi::KernelInfoGetAttribute* functions directly
and convert the returned OrtStatus* instead.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Add OrtAppendExecutionProviderV2 to the wasm API, which selects an EP by
device rather than by built-in EP name, and route the 'webgpu' backend
through it so ORT Web uses the statically linked plugin EP.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 473dd356-5e09-4a65-9bf6-a6b768f01dd9
Franklin Moormann (ooples) pushed a commit to ooples/AiDotNet that referenced this pull request Oct 13, 2026
Updated
[Microsoft.ML.OnnxRuntime](https://github.com/Microsoft/onnxruntime)
from 1.30.0 to 1.31.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.ML.OnnxRuntime's
releases](https://github.com/Microsoft/onnxruntime/releases)._

## 1.31.0

ONNX Runtime 1.31.0 stabilizes model-package and EPContext data APIs,
improves CPU model loading and quantized MoE inference, expands
device-based execution-provider selection, and strengthens model-loading
and runtime reliability. These notes cover changes since ONNX Runtime
1.30.0. CUDA and WebGPU kernel updates are summarized here; detailed
provider notes are covered by their separate plugin EP releases.

## Highlights

- Promoted the model-package API and EPContext data callbacks to stable
C and C++ APIs, with EPContext callback support added across language
bindings
([#​33166](microsoft/onnxruntime#33166),
[#​32265](microsoft/onnxruntime#32265)).
- Reduced CPU session-initialization overhead by parallelizing eligible
weight prepacking, and accelerated block-wise INT4/INT8 QMoE experts
with MLAS QNBit kernels and grouped expert dispatch
([#​31691](microsoft/onnxruntime#31691),
[#​32644](microsoft/onnxruntime#32644),
[#​32668](microsoft/onnxruntime#32668)).
- Added x86 FP16 LayerNorm/RMSNorm acceleration, Arm KleidiAI SVE2.1
FP16 GEMM support, and additional RISC-V vector kernels
([#​32715](microsoft/onnxruntime#32715),
[#​32670](microsoft/onnxruntime#32670),
[#​32710](microsoft/onnxruntime#32710)).
- Enabled CoreML participation in device-based EP selection, including
Apple Neural Engine selection through `PREFER_NPU`
([#​31975](microsoft/onnxruntime#31975)).
- Added workspace-memory accounting and verification for
constrained-memory graph partitioning, alongside broader model, graph,
and tensor validation
([#​31962](microsoft/onnxruntime#31962),
[#​32189](microsoft/onnxruntime#32189)).

## Announcements & Compatibility

- [CUDA Plugin EP
v0.3.0](https://github.com/microsoft/onnxruntime/releases/tag/plugin-ep-cuda/v0.3.0)
and WebGPU Plugin EP v0.5.0 are matched with ONNX Runtime 1.31.0. For
**contrib-op compatibility**, core and the plugin must use the same
contributed-operator schemas; building both from the **same ONNX Runtime
revision** is recommended. Schema mismatches can cause incorrect
execution or crashes and may not be detected during plugin registration.
- **`GatherBlockQuantized` behavior change:** out-of-range indices now
produce zero output slices across CPU, CUDA, and WebGPU for both integer
and floating-point quantized formats. This deliberately differs from
ONNX `Gather` error semantics
([#​32480](microsoft/onnxruntime#32480)).
- **Experimental API migration:** model-package consumers should use
`OrtApi::GetModelPackageApi` and the stable `OrtModelPackageApi` table.
EPContext callback registration now uses stable APIs; the corresponding
experimental lookup entries were removed. The stable native callback
contract carries callback/state pointers, with payload limits enforced
by application callbacks, bindings, or EPs rather than a native
read-options policy
([#​33166](microsoft/onnxruntime#33166),
[#​32265](microsoft/onnxruntime#32265)).
- **ACL EP is deprecated** and will be removed in a future release.
Source builds using `--use_acl` now receive a deprecation warning
([#​32564](microsoft/onnxruntime#32564)).
- The ONNX dependency remains at **1.22.0**. The initial ONNX 1.23
integration was reverted pending upstream fixes; this release does not
ship that integration's new opset or FLOAT6 support
([#​33073](microsoft/onnxruntime#33073)).
- Supported native builds now default to **1DS telemetry**. Windows
TraceLogging remains selectable with `--use_windows_telemetry` or
`onnxruntime_USE_WINDOWS_TELEMETRY=ON`; telemetry can be disabled with
`--no_telemetry`
([#​32384](microsoft/onnxruntime#32384)).

## New Features

### Core APIs & Runtime

- Stabilized the model-package C and C++ APIs for loading packages,
selecting compatible model variants, and creating sessions
([#​33166](microsoft/onnxruntime#33166)).
- Stabilized named EPContext data read/write callbacks for
application-managed storage. Added EP support negotiation so registered
callbacks do not silently fall back to filesystem I/O
([#​32265](microsoft/onnxruntime#32265)).
- Extended the Compile API to write external initializers and EP context
data to buffers, enabling in-memory compilation workflows for models
larger than 2 GB
([#​31347](microsoft/onnxruntime#31347)).
- Added workspace-memory accounting, source reporting, and
post-partition reservation verification. Set
`session.strict_workspace_verification=1` to fail initialization on
workspace declaration overruns or nonzero orphaned reservations; strict
verification is not supported for ORT-format model loads
([#​31962](microsoft/onnxruntime#31962),
[#​32189](microsoft/onnxruntime#32189)).
- Added the opt-in source-build option
`onnxruntime_DISABLE_DEVICE_DISCOVERY=ON` to skip platform accelerator
probing and report only the CPU device
([#​32592](microsoft/onnxruntime#32592)).

### Shared Contrib Operators

These updates affect core operator schemas and cross-provider behavior,
not only the separately released GPU plugins.

- Extended `EngramGate` and `NGramHashMapping` for Qwen4-Exp, and added
`VarlenNGramHashMapping` for packed DeepSeek Engram batching with
request-local history. Packed hashing also supports Qwen4-Exp head
offsets, EOS resets, and segment boundaries
([#​32285](microsoft/onnxruntime#32285),
[#​32358](microsoft/onnxruntime#32358),
[#​32467](microsoft/onnxruntime#32467)).
- Added the `activation` attribute to `GatedRMSNorm` for SiLU, its Swish
alias, and Sigmoid gating across CPU, CUDA, and WebGPU. SiLU remains the
default
([#​32512](microsoft/onnxruntime#32512)).
- Added weightless hyper-connection operators `BranchwiseRMSNorm`,
`ScaledSiLU`, `HyperConnectionPreMix`, and `HyperConnectionPostMix`,
with CPU, CUDA, and WebGPU implementations
([#​32687](microsoft/onnxruntime#32687)).
- Extended `GatherBlockQuantized` to FP8/FP4 data, full-axis blocks, and
scale broadcasting, and improved CPU UINT8 dequantization. See the
out-of-range-index behavior change above
([#​32480](microsoft/onnxruntime#32480),
[#​32621](microsoft/onnxruntime#32621)).

### Plugin Execution Provider Infrastructure

- Added support for statically linked plugin EPs, with a static WebGPU
plugin build configuration
([#​32395](microsoft/onnxruntime#32395)).
- Preserved caller streams in single-tensor plugin data transfers and
handled null plugin allocator returns
([#​32666](microsoft/onnxruntime#32666),
[#​32683](microsoft/onnxruntime#32683)).
- Deduplicated AutoEP custom-op domains and corrected EP assignment
reporting after NHWC layout transformation
([#​32711](microsoft/onnxruntime#32711),
[#​33184](microsoft/onnxruntime#33184)).
- Added reference guidance for compiled-model compatibility validation,
including multi-device scenarios
([#​29168](microsoft/onnxruntime#29168)).

## Execution Provider Updates

### CUDA EP

CUDA updates include sparse attention and packed continuous batching,
expanded paged speculative decoding, INT2 and mixed-width QMoE
execution, opt-in MatMul auto-tuning, improved MXFP4 support on
Blackwell consumer GPUs, and reliability fixes.
 ... (truncated)

Commits viewable in [compare
view](microsoft/onnxruntime@v1.30.0...v1.31.0).
</details>

Updated
[Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
from 10.2.3 to 10.3.0.

<details>
<summary>Release notes</summary>

_Sourced from [Swashbuckle.AspNetCore's
releases](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)._

## 10.3.0

## What's Changed

* Change nullability handling for schemas with `anyOf`, `allOf`, `oneOf`
or `type = null` by @​ldeluigi in
domaindrivendev/Swashbuckle.AspNetCore#3976
* Handle leading slash on route prefix during index.html GET by
@​superstator in
domaindrivendev/Swashbuckle.AspNetCore#4084
* Move NRT handling to DataContractResolver by @​desjoerd in
domaindrivendev/Swashbuckle.AspNetCore#3998
* Clarify nullable behaviour by @​martincostello in
domaindrivendev/Swashbuckle.AspNetCore#4094
* Fix review issues for caching and encoding by @​martincostello in
domaindrivendev/Swashbuckle.AspNetCore#4093
* Support multiple response types per status code by @​DeagleGross in
domaindrivendev/Swashbuckle.AspNetCore#4100
* Add coverage for `AddServer` across multiple documents by
@​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4115
* Fix Swagger sort key fallback for empty endpoint tags metadata by
@​AleksaMCode in
domaindrivendev/Swashbuckle.AspNetCore#4125
* Fix parameter matching to consider location when names collide by
@​nonsoikem in
domaindrivendev/Swashbuckle.AspNetCore#4126
* Emit form encoding for properties of a complex form parameter by
@​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4128
* Keep a property's own summary when comments come from several XML
files by @​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4129
* Strip query string from relative document URLs in Swagger UI by
@​GabeSilvaDev in
domaindrivendev/Swashbuckle.AspNetCore#4152
* Document that System.Text.Json ignores `[EnumMember]` by
@​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4127
* Drop the regex route constraint from the default Swagger route by
@​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4130
* Serialize custom values in the UI `ConfigObject.AdditionalItems` by
@​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4132
* Use Minimal APIs JSON options when MVC is not registered by
@​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4116
* Resolve enum contracts against the underlying type under source
generation by @​RaphaelFakhri in
domaindrivendev/Swashbuckle.AspNetCore#4131

## New Contributors

* @​ldeluigi made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#3976
* @​superstator made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#4084
* @​desjoerd made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#3998
* @​RaphaelFakhri made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#4115
* @​AleksaMCode made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#4125
* @​nonsoikem made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#4126
* @​GabeSilvaDev made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#4152
* @​JulianThoms made their first contribution in
domaindrivendev/Swashbuckle.AspNetCore#4182

**Full Changelog**:
domaindrivendev/Swashbuckle.AspNetCore@v10.2.3...v10.3.0


Commits viewable in [compare
view](domaindrivendev/Swashbuckle.AspNetCore@v10.2.3...v10.3.0).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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.

4 participants