Repository navigation
[Plugin EP] Preserve streams in single-tensor data transfers - #32666
Merged
Xiaofei Han (xiaofeihan1) merged 1 commit intoSep 17, 2026
Conversation
Forward the caller's stream through CopyTensorImpl, matching the existing batch path while preserving null streams for synchronous copies. Add focused callback regression coverage for async, sync, and batch copies. Fixes microsoft#32643 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The focused fix matches existing batched behavior and is adequately covered by regression tests.
Pull request overview
Forwards execution streams through Plugin EP single-tensor transfers, preserving asynchronous operation ordering.
Changes:
- Passes the supplied stream to the Plugin EP callback.
- Adds regression coverage for asynchronous, synchronous, and batched copies.
- No actionable issues identified.
File summaries
| File | Description |
|---|---|
onnxruntime/core/framework/plugin_data_transfer.cc |
Forwards the stream in single-tensor copies. |
onnxruntime/test/framework/data_transfer_manager_test.cc |
Verifies stream forwarding across copy paths. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 0
- Review effort level: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Xiaofei Han (xiaofeihan1)
requested review from
Edward Chen (edgchen1),
Scott McKay (skottmckay) and
Tianlei Wu (tianleiwu)
September 17, 2026 05:22
Tianlei Wu (tianleiwu)
approved these changes
Sep 17, 2026
34 of 50 tasks
adrastogi
pushed a commit
that referenced
this pull request
Sep 28, 2026
### Description Forward the caller's stream through the Plugin EP single-tensor `CopyTensorImpl` path. This matches the existing batched-copy behavior while preserving a null stream for synchronous copies. Adds focused callback regression coverage for asynchronous, synchronous, and batched copies. ### Motivation and Context The single-tensor Plugin EP data-transfer path discarded the supplied stream, preventing asynchronous copies from receiving the execution stream. Fixes #32643 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> (cherry picked from commit 5899c7c)
Tianlei Wu (tianleiwu)
added a commit
that referenced
this pull request
Sep 29, 2026
This cherry-picks the following commits for the release: * #32610 * #32633 * #32641 * #32611 * #32609 * #32607 * #32679 * #32681 * #32666 CI fixes: * #32491 (installs `uuid-dev` for the Linux minimal-build CoreML job; that check also fails on the `rel-1.28.3` base) * Raise the Android minimal baseline binary-size threshold from 1,440,768 to 1,443,840 bytes (release branch only). The checks added by these fixes grow the minimal build from 1,440,538 to 1,443,098 bytes (+2,560). All picks except #32607 applied cleanly with `git cherry-pick -x`, in the order they merged into main (#32666 was added afterward). #32607 required a manual backport because `bert_defs.cc` has diverged on main since 1.28 branched: - `GroupQueryAttention` / `SparseAttention`: backported as-is (`total_sequence_length_index` of 6 / 7, plus the single-element check). The GQA call site in 1.28 has no `sliding_window_cache`, so it only gets the new argument. - `CausalConvWithState`: the 1.28 schema predates `channels_last`, `state_window`, and `dilation`. Only the `ndim` in [1, 3] check and the `weight`/`input` rank == `ndim + 2` checks are backported. These match what the 1.28 CPU kernel already enforces. `ChannelsLastInputRankBelowThreeIsRejected` is dropped. - `GatedDeltaNet`: this op does not exist on 1.28.3, so its hunk and test are dropped. Validation (Windows x64, CPU EP, RelWithDebInfo): - All 14 regression tests added by these PRs pass. - `onnxruntime_test_all`: 1848 tests (including #32666's `PluginCopiesForwardStreams`), 0 failures. - `onnxruntime_provider_test`: 5370 tests, 0 failures. --------- Co-authored-by: Wei Wang <wei4.wang@intel.com> Co-authored-by: shiyi <shiyi.zou@intel.com> Co-authored-by: Bin Miao <bin.miao@intel.com> Co-authored-by: Bryan B <bryan.bernhart@intel.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: tianleiwu <30328909+tianleiwu@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: Xiaofei Han <xiaofeihan@microsoft.com>
This was referenced Oct 5, 2026
This was referenced Oct 9, 2026
Xiaofei Han (xiaofeihan1)
added a commit
that referenced
this pull request
Oct 10, 2026
…and serialized execution (#33082) ### Description <!-- Describe your changes. --> Restore WebGPU plugin compatibility starting with **ORT 1.24.4**, while retaining **Session-owned command recording in both execution modes**. The additional real-host matrix below found an unresolved **ORT 1.26.0 host-side rejection**; this is not a claim that every intervening release currently works. - Each Session exclusively owns its recording through `unique_ptr`; there is no context-owned shared legacy recording. - Select the older-host compatibility policy with `UseSerializedExecutionMode()` and `ShouldUseSerializedExecutionMode()`, now isolated in `ep/runtime_compatibility.h/.cc` rather than the stream implementation. - In serialized mode, Session `Alloc` and matching `AllocOnStream` use `!IsRunActive()` to submit cached-buffer clears outside Run and defer them during Run. Kernel scratch uses ordinary Tensor allocation through the same allocator, without an `AllocForKernel` API or the unavailable old-host `KernelContext_GetSyncStream`. - Env allocations and concurrent-mode ordinary Session allocations retain independent, immediately submitted clears. Cached-buffer clearing and kernel dispatch batching remain enabled. - For streamless framework copies, submit pending active-Session work before recording the copy independently. The context borrows a non-owning pointer to that recording; it does not own or share the command state. Session teardown discards only that Session's pending entries. - Remove the context-wide Run gate and rely on the required caller-serialization contract. `SerialRunsAfterRejectedStreamOverride` covers a rejected stream override followed by successful serial Runs on both the affected Session and another Session. | Host ORT version | Default execution mode | | --- | --- | | 1.26.0 | Currently blocked by the host's plugin-version check; see validation below | | 1.28.x starting at 1.28.3 | Concurrent independent Sessions | | 1.30.x starting at 1.30.1 | Concurrent independent Sessions | | 1.31 and later | Concurrent independent Sessions | | Other supported versions, including all 1.29.x | Serialized compatibility | Set `ORT_WEBGPU_EP_FORCE_LEGACY=1` **before plugin registration** to force serialized compatibility. The existing override and `onnxruntime_webgpu_legacy_test` CTest name are retained for compatibility; neither implies shared recording. The override cannot enable concurrency on an unsupported host. **Serialized mode requires callers to serialize all WebGPU operations on the same device**, including Session creation/destruction, Run, allocation, I/O binding, and Env transfers. Use sequential graph execution. This is not a fixed-CPU-thread requirement, and the plugin neither detects nor serializes overlapping operations. Callback reentry remains unsupported. #### Input/output copy ordering ORT 1.24.4 forwards supplied streams through batched `CopyTensors`; its separate single-tensor wrapper drops the stream. `BindInput` uses a single-input copy, and mixed source/destination device pairs can make a batch fall back to individual copies. | Path | Ordering mechanism | | --- | --- | | `BindInput` outside Run, CPU to GPU | Allocation submits any cached-buffer clear before returning, including through `AllocOnStream`. A subsequent streamless upload is ordered after it on the device queue; no active Run pointer is needed. | | Input copy during Run, CPU to GPU | With a stream, the clear and upload use the same Session recording. Without a stream, flush the active Session first, then upload using a local recording. | | Output copy during Run, GPU to CPU | Submit the producer before readback, either through its explicit stream or the active-Session pre-copy flush. This does not depend on `OnRunEnd`, which occurs after output copies. | | Mixed-direction inputs/outputs | Each streamless copy follows the same submission boundary if the old host falls back to individual copies. | | Streamless GPU-to-GPU copy within one context | Submit preceding active Session work, then submit the local copy before returning. Cross-context copies remain unsupported. | These are submission boundaries, not per-kernel CPU waits. Readback retains its existing completion wait. Compared with a shared recording, a streamless copy with pending Session work can require an additional queue submission; performance equivalence has not been established. ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. --> Allow independently distributed WebGPU plugins to support older applications without requiring the host-side single-copy stream-forwarding fix in #32666. Builds on #32874. Following review, the implementation now keeps Session-owned recording rather than introducing a second ownership model for old hosts. A real ORT 1.24.4 mixed-output repro demonstrated the missing submission boundary: an independent GPU Neg branch fetched to CPU returned 0 instead of -1 when the Session's pending computation was not submitted before a streamless readback. The other independent CPU branch was fetched to GPU, triggering mixed-direction single-copy fallback. Both targets and the GPU input were preallocated. Adding the boundary makes both output orderings pass; this shows the need for ordering coordination, not shared recording ownership. The alternative developed in #33228 has been incorporated here, and that duplicate PR is closed. This revision includes upstream `main` at `e19a9ae831`. **Scope:** Removing the context-wide gate avoids permanently blocking other Sessions when a host error skips `OnRunEnd`. It does not guarantee recovery of all unfinished Run/capture state. Clarifying the host's `OnRunStart`/`OnRunEnd` error-path contract and complete failed-replay recovery remain separate follow-up work. ### Validation Validated commit **`20ff4e2f63`** on Windows x64 Release with the shared WebGPU plugin and EP API adapters. Current-host tests use ORT **1.32.0**. `W:` was a temporary mapping to this worktree and was removed afterward. **Build: passed.** ```powershell cmake --build W:\build\WebGpuCompat\Release --config Release --target onnxruntime_providers_webgpu onnxruntime_provider_test --parallel 8 -- /nologo /verbosity:minimal ``` **Serialized compatibility: 41 executed tests passed, no failures or skips.** CTest sets `ORT_WEBGPU_EP_FORCE_LEGACY=1` before loading the plugin and selects serial-safe cases. ```powershell Set-Location W:\build\WebGpuCompat\Release ctest -C Release -R '^onnxruntime_webgpu_legacy_test$' --output-on-failure ``` **Concurrent-mode selection: 57 executed tests passed, no failures or skips.** Two pre-existing disabled diagnostic tests were not enabled in either selection. ```powershell Set-Location W:\build\WebGpuCompat\Release\Release $env:ORT_UNIT_TEST_MAIN_DYNAMIC_PLUGIN_EP_CONFIG_JSON='{"ep_library_registration_name":"WebGPU_PluginEP","ep_library_path":"onnxruntime_providers_webgpu.dll","selected_ep_name":"WebGpuExecutionProvider"}' $env:ORT_WEBGPU_EP_FORCE_LEGACY='0' .\onnxruntime_provider_test.exe '--gtest_filter=WebGpuPluginRecordingModeTest.*:WebGpuPluginSharedAllocatorRegistrationTest.*:WebGpuPluginSharedAllocatorTest.*:WebGpuSessionAllocatorDeathTest.*:PluginEpWebGpuConcurrency.*' ``` Coverage includes version boundaries, allocation-clear submission, scratch batching, serial and concurrent capture/replay, mixed feeds/fetches, and serial Runs after a rejected stream override. **Actual ORT 1.24.4: all 9 local-harness scenarios passed, 20 iterations each.** The standalone API-24 C++ probe loaded the official 1.24.4 DLL and the plugin rebuilt from this commit; profiles confirmed CPU/WebGPU node placement. Cases cover CPU I/O, dirty-buffer BindInput, mixed-direction inputs and outputs in both orders, GPU-to-CPU-to-GPU graph execution, scratch reuse, and capture-enabled execution. The following invocation used the existing local `recording-ownership-probe` directory (`$probe`); this harness is not part of the repository or CI: ```powershell $variant='serialized-policy-20ff4e2f63' $dest=Join-Path $probe $variant $env:ORT_WEBGPU_EP_FORCE_LEGACY='1' python "$probe\run_probe.py" $variant "$dest\onnxruntime_providers_webgpu.dll" ``` **Capture limitation:** the actual 1.24.4 run exercised initial capture and its internal replay. Its subsequent Runs did not exercise host-driven replay, because that host lacks the plugin capture/replay callbacks. Repeated host-driven replay was covered by the current-host tests above. Other operating systems and performance benchmarks were not tested in the above `20ff4e2f63` validation. #### Additional local validation at `62e3504c2e` Removed only the redundant pre-capture `OnRunStart` flush. `CaptureBegin` still flushes before entering capture; streamless-copy, Run-end, and standalone replay submission boundaries are unchanged. The plugin rebuilt successfully, and the three focused serialized capture tests passed: ```powershell $env:ORT_UNIT_TEST_MAIN_DYNAMIC_PLUGIN_EP_CONFIG_JSON='{"ep_library_registration_name":"WebGPU_PluginEP","ep_library_path":"onnxruntime_providers_webgpu.dll","selected_ep_name":"WebGpuExecutionProvider"}' $env:ORT_WEBGPU_EP_FORCE_LEGACY='1' .\onnxruntime_provider_test.exe '--gtest_filter=PluginEpWebGpuConcurrency.SerialGraphCaptureWithCpuFeedsAndFetches:PluginEpWebGpuConcurrency.SerialSingleSessionMultipleGraphCaptureIds:PluginEpWebGpuConcurrency.GraphCaptureReplayInterleavedWithIdleSessionCpuBindInput' ``` A separate local matrix used **one unchanged plugin DLL** with official Windows x64 cores 1.24.4, 1.25.1, 1.26.0, 1.27.1, 1.28.3, 1.29.1, and 1.30.0, plus the local 1.32.0 Release core. Loaded module paths, actual core versions, and plugin hashes were checked. - **Native copy/allocation/capture probe: 63 scenarios passed, 9 failed**, with 20 iterations per scenario. All nine scenarios passed on every tested core except 1.26.0. That core rejects `OrtEp::ort_version_supported=32` because its kernel-creation check requires a value no greater than 26. This host restriction remains unresolved; forcing serialized mode does not address it. - **Capture support differs from execution-mode eligibility.** In the simple native capture probe, 1.24.4 and 1.25.1 performed one initial internal replay; the other passing cores performed repeated host-driven replay. - **Local Phi-4 workload, capture OFF:** all seven usable cores passed fresh-generator repeatability, serially interleaved-generator checks, multi-turn checks, and a repeated exact 1024-input/300-output-token workload. An isolated GenAI build compiled against API 24 was held fixed across cores; the normal installed package requires API 29. Performance measurements used two warmups and five measured runs, generator reuse and shared KV buffers, with profiling disabled. - **Capture ON is not valid for this model graph.** It contains an `If` node. Tested cores from 1.26 onward reject capture at Session initialization. On 1.24.4 and 1.25.1, initialization succeeds but generated tokens differ after rewinding and repeating the same prompt. This also reproduces without profiling and with the pre-cleanup `20ff4e2f63` plugin, so it was not introduced by removing the redundant flush. No capture-ON throughput is reported for this model. - **Performance interpretation:** default core graph optimizations were retained; newer cores use additional MLP fusion. Cross-version throughput is therefore not an isolated measurement of serialized-mode overhead. Generated tokens were repeatable within each core but not identical between the older and newer optimizer groups. The matrix scripts and model are session-local, not checked into the repository or run by CI. `$matrix` below refers to the isolated `phi4-core-matrix` artifact directory: ```powershell python "$matrix\run_native.py" # failed overall: 63 passed, 9 failed on 1.26.0 python "$matrix\run_phi4.py" --phase smoke # failed overall: 7 passed, 9 unsupported/failing combinations python "$matrix\run_phi4.py" --phase correctness # passed: 21 checks; failing smoke combinations excluded python "$matrix\run_phi4.py" --phase benchmark # completed: 7 capture-OFF configurations; failing smoke combinations excluded ``` --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: b6fbaacb-9846-4330-8fb3-2f0b13737d48 Copilot-Session: 8ca4e5fc-8c08-46bd-82a9-5cff5108efed
This was referenced Oct 10, 2026
This was referenced Oct 12, 2026
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>
This was referenced Oct 13, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Forward the caller's stream through the Plugin EP single-tensor
CopyTensorImplpath. This matches the existing batched-copy behavior while preserving a null stream for synchronous copies.Adds focused callback regression coverage for asynchronous, synchronous, and batched copies.
Motivation and Context
The single-tensor Plugin EP data-transfer path discarded the supplied stream, preventing asynchronous copies from receiving the execution stream.
Fixes #32643