Cleanup SimdUtils#2654
Conversation
| int remainder; | ||
| if (Avx2.IsSupported) | ||
|
|
||
| if (Avx512BW.IsSupported) |
There was a problem hiding this comment.
This one's probably ok, but you'll want to consider bypassing the AVX-512 path on older hardware like Skylake-X, because of the well-known downclocking issues.
Vector512.IsHardwareAccelerated will return false on these processors, even though they support the AVX-512 instructions, so you can check both conditions to make sure the code only runs where AVX-512 is supported and fast.
There was a problem hiding this comment.
Foot meet gun!
I'll add the additional checks.
| result = AdvSimd.Insert(result, 3, AdvSimd.Extract(vector, (byte)((control >> 6) & 0x3))); | ||
| #pragma warning restore CA1857 // A constant is expected for the parameter | ||
| return result; | ||
| } |
There was a problem hiding this comment.
This is going to be a perf killer in most cases. It'll be worth testing any path that uses this to make sure it doesn't regress to slower than scalar when Arm starts taking a SIMD path it skipped before.
There was a problem hiding this comment.
I tossed a coin over this one. My thought was I was making enough savings elsewhere in calling method to justify the cost here. I need to see what the codegen is like, but I have no means to do so currently.
There was a problem hiding this comment.
🤮I'll um, i'll remove that then.
There was a problem hiding this comment.
I wish that you could define constants from a value given a parameter is a constant. I bet the codegen would be much better then.
- public static Vector128<float> Shuffle(Vector128<float> vector, [ConstantExpected] byte control)
+ public static Vector128<float> Shuffle(Vector128<float> vector, const byte control)Then...
const byte w = (byte)((control >> 6) & 0x3)There was a problem hiding this comment.
I would have thought the fact that it's inlined and the control byte is a constant would have been enough, so I'm quite surprised at that codegen. I'll have a look in the morning and see if I can figure out what's up.
There was a problem hiding this comment.
Looks to be an issue with where the constant folding happens.
The inlininer is happening and the operands seen are effectively:
[000000] ----------- arg0 +--* LCL_VAR simd16<System.Runtime.Intrinsics.Vector128`1> V00 arg0
[000006] ----------- arg1 +--* CNS_INT int 0
[000007] ----------- arg2 +--* LCL_VAR simd16<System.Runtime.Intrinsics.Vector128`1> V00 arg0
[000010] ----------- arg3 \--* AND int
[000008] ----------- +--* CNS_INT int 228
[000009] ----------- \--* CNS_INT int 3
We're likely missing an attempt to constant fold AND which is blocking it, which is unfortunate.
There was a problem hiding this comment.
Going to see if its a trivial fix I can get in...
There was a problem hiding this comment.
dotnet/runtime#97901 fixes this case (and similar scenarios) in particular
| /// <param name="vector">The value to convert.</param> | ||
| /// <returns>The <see cref="Vector256{Int32}"/>.</returns> | ||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||
| public static Vector256<int> ConvertToInt32RoundToEven(Vector256<float> vector) |
There was a problem hiding this comment.
Personally, I'd avoid helpers like this for now. As of .NET 8, only AVX hardware supports hardware-accelerated Vector256 at all, so this is just that with more steps. You may be able to expand that when Arm SVE becomes available in .NET 9 (or 10 if you stick to the current pattern of targeting LTS), but one would hope by that time, you'll have a BCL-provided xplat helper you can use to replace any explicit AVX calls.
That is to say, at the time this becomes actually useful, you'll have to make changes anyway.
Same goes for Vector512, ofc.
There was a problem hiding this comment.
The hope is that bythe time 10 comes out I can replace Vector256Utilities.XX with Vector256.XX and it will be a simple job to refactor. Plus, the consistency feeds my soul.
There was a problem hiding this comment.
the consistency feeds my soul
I feel this 😄
My concern would be that the fallback code here is either
- Never used, so just a maintenance burden with no payoff, or
- Used accidentally, resulting in a perf drop over the optimized
Vector128path
Perhaps if you really do want to hide all intrinsics behind helpers like this, it would be better to throw PNSE outside the one optimized implementation. Be aware, though, adding these extra layers over intrinsics can hinder inlining when they're used in larger methods.
When refactoring time comes, most of these will hopefully just be Avx2.XX -> Vector256.XX anyway.
| DebugGuard.IsTrue(source.Length == destination.Length, nameof(source), "Input spans must be of same length!"); | ||
|
|
||
| if (Avx2.IsSupported || Sse2.IsSupported) | ||
| if (Avx512BW.IsSupported || Avx2.IsSupported || Sse2.IsSupported || AdvSimd.IsSupported) |
There was a problem hiding this comment.
| if (Avx512BW.IsSupported || Avx2.IsSupported || Sse2.IsSupported || AdvSimd.IsSupported) | |
| if (Sse2.IsSupported || AdvSimd.IsSupported) |
Avx512BW.IsSupported and Avx2.IsSupported strictly imply Sse2.IsSupported, so this is redundant.
| } | ||
|
|
||
| Vector512<float> sign = vector & Vector512.Create(-0.0f); | ||
| Vector512<float> val_2p23_f32 = sign | Vector512.Create(8388608.0f); |
There was a problem hiding this comment.
Can you make 8388608.0f a named constant and use that in the other VectorXyzUtilities too?
So it's defined three times.
There was a problem hiding this comment.
I'll have a look. Not sure where to put it.
There was a problem hiding this comment.
Worth noting that 8388608 is 2^23, which is the boundary value at which fractional data can no longer be represented (only whole integers at or above this boundary).
There was a problem hiding this comment.
Never found a place to put this.
Co-authored-by: Clinton Ingram <clinton.ingram@outlook.com>
…ageSharp into js/xplat-intrinsics
saucecontrol
left a comment
There was a problem hiding this comment.
Looks good aside from the tangle of IsSupported checks 👍
| if ((Vector512.IsHardwareAccelerated && Avx512F.IsSupported) || | ||
| Avx2.IsSupported || | ||
| Sse2.IsSupported || | ||
| AdvSimd.IsSupported) |
There was a problem hiding this comment.
| if ((Vector512.IsHardwareAccelerated && Avx512F.IsSupported) || | |
| Avx2.IsSupported || | |
| Sse2.IsSupported || | |
| AdvSimd.IsSupported) | |
| if (Vector128.IsHardwareAccelerated) |
The check as written won't prevent you running the AVX-512 code on the slow processors, because those will still pass the Avx2.IsSupported check and enter this block, where they'll also pass the Avx512F.IsSupported check below and use Vector512 anyway.
This entire expression boils down to the lowest common denominator, which is Sse2.IsSupported || AdvSimd.IsSupported. That would seem to be unnecessarily restrictive though, because your Vector128 path is 100% xplat intrinsics. I don't know if Vector128.IsHardwareAccelerated reports true for wasm on .NET 8, but if it does now or in .NET 9, you'd be getting that for free if you loosen this check to just Vector128.IsHardwareAccelerated.
There was a problem hiding this comment.
Ah yeah, this is much smarter, nice to know about wasm too.
| { | ||
| int remainder; | ||
| if (Avx2.IsSupported) | ||
| if (Avx512F.IsSupported) |
There was a problem hiding this comment.
| if (Avx512F.IsSupported) | |
| if (Vector512.IsHardwareAccelerated && Avx512F.IsSupported) |
There was a problem hiding this comment.
BTW, I'm not 100% sure you want to include the Vector512.IsHardwareAccelerated restriction on all of these. You do have the option of restricting on IsSupported only and telling users who don't want to use AVX-512 on the slower hardware to disable it with DOTNET_EnableAVX512F=0, though that does also disable the new instructions on narrower vectors (AVX-512 VL) as well. I haven't made this decision for my own libs yet.
There was a problem hiding this comment.
I think I'll stick and include the check. I want my users to get no surprises.
| Span<float> destination) | ||
| { | ||
| fixed (byte* sourceBase = source) | ||
| if (Avx512F.IsSupported) |
There was a problem hiding this comment.
| if (Avx512F.IsSupported) | |
| if (Vector512.IsHardwareAccelerated && Avx512F.IsSupported) |
| Unsafe.Add(ref d, 3) = f3; | ||
| } | ||
| } | ||
| else if (Sse2.IsSupported || AdvSimd.IsSupported) |
There was a problem hiding this comment.
| else if (Sse2.IsSupported || AdvSimd.IsSupported) | |
| else |
| if ((Vector512.IsHardwareAccelerated && Avx512BW.IsSupported) || | ||
| (Vector256.IsHardwareAccelerated && Avx2.IsSupported) || | ||
| (Vector128.IsHardwareAccelerated && (Sse2.IsSupported || AdvSimd.IsSupported))) |
There was a problem hiding this comment.
| if ((Vector512.IsHardwareAccelerated && Avx512BW.IsSupported) || | |
| (Vector256.IsHardwareAccelerated && Avx2.IsSupported) || | |
| (Vector128.IsHardwareAccelerated && (Sse2.IsSupported || AdvSimd.IsSupported))) | |
| if (Sse2.IsSupported || AdvSimd.IsSupported) |
Edit: Oops, this one doesn't have xplat fallback for saturated narrowing. Need to keep the platform checks.
There was a problem hiding this comment.
Is there one I can add? Would be great to do so.
There was a problem hiding this comment.
There's Vector128.Narrow (truncating), plus Min and Max, so you could put something together. It's a bit awkward because you really want to go int->byte, and splitting the helpers to plug in for each of the narrowing steps separately would be a lot of extra codegen. A single clamp to byte range followed by double narrow would be slightly cleaner.
There was a problem hiding this comment.
Thanks. I think I'll leave it for now. Don't want to spend too long figuring it out.
| int remainder; | ||
| if (Avx2.IsSupported) | ||
|
|
||
| if (Avx512BW.IsSupported) |
There was a problem hiding this comment.
| if (Avx512BW.IsSupported) | |
| if (Vector512.IsHardwareAccelerated && Avx512BW.IsSupported) |
| Span<byte> destination) | ||
| { | ||
| if (Avx2.IsSupported) | ||
| if (Avx512BW.IsSupported) |
There was a problem hiding this comment.
| if (Avx512BW.IsSupported) | |
| if (Vector512.IsHardwareAccelerated && Avx512BW.IsSupported) |
gfoidl
left a comment
There was a problem hiding this comment.
Modulo some minor things and the feedback from @saucecontrol: LGTM
|
|
||
| for (int i = 0; i < source.Length; i++) | ||
| { | ||
| Unsafe.Add(ref dBase, i) = Unsafe.Add(ref sBase, i) / 255f; |
There was a problem hiding this comment.
| Unsafe.Add(ref dBase, i) = Unsafe.Add(ref sBase, i) / 255f; | |
| Unsafe.Add(ref dBase, (uint)i) = Unsafe.Add(ref sBase, (uint)i) / 255f; |
| ref byte dBase = ref MemoryMarshal.GetReference(destination); | ||
| for (int i = 0; i < source.Length; i++) |
There was a problem hiding this comment.
| ref byte dBase = ref MemoryMarshal.GetReference(destination); | |
| for (int i = 0; i < source.Length; i++) | |
| ref byte dBase = ref MemoryMarshal.GetReference(destination); | |
| for (int i = 0; i < source.Length; i++) |
For code style to have the same blank line as above.
| ref byte dBase = ref MemoryMarshal.GetReference(destination); | ||
| for (int i = 0; i < source.Length; i++) | ||
| { | ||
| Unsafe.Add(ref dBase, i) = ConvertToByte(Unsafe.Add(ref sBase, i)); |
There was a problem hiding this comment.
| Unsafe.Add(ref dBase, i) = ConvertToByte(Unsafe.Add(ref sBase, i)); | |
| Unsafe.Add(ref dBase, (uint)i) = ConvertToByte(Unsafe.Add(ref sBase, (uint)i)); |
|
Thanks for the review chaps. I've actioned the lot now. Will merge on successful build. |
|
Stating to see some improvement in numbers here.
|
Updated [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp) from 3.1.12 to 4.0.0. <details> <summary>Release notes</summary> _Sourced from [SixLabors.ImageSharp's releases](https://github.com/SixLabors/ImageSharp/releases)._ ## 4.0.0 ## What's Changed * Update to net8 by @stefannikolei in SixLabors/ImageSharp#2583 * Handle dedup of local palette of 256 length - Main by @JimBobSquarePants in SixLabors/ImageSharp#2607 * Replace custom Crc32 by @JimBobSquarePants in SixLabors/ImageSharp#2611 * Sync 3.1 DrawImage fixes by @tocsoft in SixLabors/ImageSharp#2612 * Fix handling gif encoding for global palettes - Main by @JimBobSquarePants in SixLabors/ImageSharp#2615 * Bump actions/setup-dotnet from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2613 * Adjusted the casing of the Webp format name by @jscarle in SixLabors/ImageSharp#2623 * Fix Paeth Filter decode on platforms that do not support Ssse3 - Main by @JimBobSquarePants in SixLabors/ImageSharp#2620 * Fix WebP animation speed bug by @marklagendijk in SixLabors/ImageSharp#2624 * Promote PixelTypeInfo to Pixel by @stefannikolei in SixLabors/ImageSharp#2601 * TGA: Treat 32 bit True Color images always as transparent by @brianpopow in SixLabors/ImageSharp#2643 * Modernize and optimize pixel format operations across platforms. by @JimBobSquarePants in SixLabors/ImageSharp#2645 * Cleanup SimdUtils by @JimBobSquarePants in SixLabors/ImageSharp#2654 * Bump actions/cache from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2648 * Bump codecov/codecov-action from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2657 * Bump NuGet/setup-nuget from 1 to 2 by @dependabot[bot] in SixLabors/ImageSharp#2658 * Add v3.1.x fixes #2673 and #2674 into main. by @JimBobSquarePants in SixLabors/ImageSharp#2675 * Add fixes 2668, 2676, and 2677 to main by @JimBobSquarePants in SixLabors/ImageSharp#2678 * Merge 2681 to v4 Main by @JimBobSquarePants in SixLabors/ImageSharp#2690 * Add JPEG COM marker support by @RobertMut in SixLabors/ImageSharp#2641 * Bump actions/upload-artifact from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2625 * Only exit JPEG scan decoding after multiple EOF hits by @JimBobSquarePants in SixLabors/ImageSharp#2701 * V4 Ensure VP8X alpha flag is updated correctly. by @JimBobSquarePants in SixLabors/ImageSharp#2703 * Fix animated png handling (issue #2708) by @SpaceCheetah in SixLabors/ImageSharp#2710 * Merge latest release from v3 by @JimBobSquarePants in SixLabors/ImageSharp#2720 * Fix MacOS jobs by @antonfirsov in SixLabors/ImageSharp#2728 * Fix async-over-sync issue in Image.DecodeAsync() by @kroymann in SixLabors/ImageSharp#2725 * Fix overflow in MemoryAllocator.Create(options) by @antonfirsov in SixLabors/ImageSharp#2730 * GifDecoder: Limit lzw bits to a maximum of 12 bits by @brianpopow in SixLabors/ImageSharp#2744 * GifDecoder : Allow skipping bad metadata using identify by @JimBobSquarePants in SixLabors/ImageSharp#2749 * Add ICO and CUR file decoder. by @frg2089 in SixLabors/ImageSharp#2579 * v4 - Fix off-by-one error when centering a transform. by @JimBobSquarePants in SixLabors/ImageSharp#2761 * v4 Fix 2758 by @JimBobSquarePants in SixLabors/ImageSharp#2764 * Simplify Color Space Conversion APIs by @JimBobSquarePants in SixLabors/ImageSharp#2739 * Webp: Fix Issue 2763 by @brianpopow in SixLabors/ImageSharp#2767 * V4 Correctly break during Png decoding by @JimBobSquarePants in SixLabors/ImageSharp#2773 * V4 : Fix filtering on PNG encode. by @JimBobSquarePants in SixLabors/ImageSharp#2778 * Fix #2779 buffer overrun by @KirillAldashkin in SixLabors/ImageSharp#2780 * Fix ImageMetadata docs typo by @lofcz in SixLabors/ImageSharp#2781 * Add API for metadata conversion between formats. by @JimBobSquarePants in SixLabors/ImageSharp#2751 * Tiff decoder: Fix issue 2679 by @brianpopow in SixLabors/ImageSharp#2789 * Replace PngCrcChunkHandling by @JimBobSquarePants in SixLabors/ImageSharp#2786 * Add tagname to debugger visualization for Exif- and Iptc-values, to facilitate easier debugging and discovery by @lassevk in SixLabors/ImageSharp#2787 * V4 - Correctly handle transform spaces when building transform matrices. by @JimBobSquarePants in SixLabors/ImageSharp#2795 * Allow decoding Tiff of different frame size. by @JimBobSquarePants in SixLabors/ImageSharp#2788 * Add progressive JPEG encoder by @ardabada in SixLabors/ImageSharp#2740 * Fix using dither in BmpEncoder when bit per pixel is <= 4 by @mistoll in SixLabors/ImageSharp#2819 * Add QuadDistortion to ProjectiveTransformBuilder by @Socolin in SixLabors/ImageSharp#2748 * WEBP : Use Correct Width With AlphaDecoder by @JimBobSquarePants in SixLabors/ImageSharp#2823 ... (truncated) Commits viewable in [compare view](SixLabors/ImageSharp@v3.1.12...v4.0.0). </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: WarperSan <leumas.ecole@gmail.com>
Updated [Aspire.Hosting.Redis](https://github.com/microsoft/aspire) from 13.3.0 to 13.3.3. <details> <summary>Release notes</summary> _Sourced from [Aspire.Hosting.Redis's releases](https://github.com/microsoft/aspire/releases)._ ## 13.3.3 ## What's New in Aspire 13.3.3 Patch release for Aspire 13.3 with fixes for debug log level leaking into user resources, Keycloak HTTPS endpoint token invalidation, and endpoint materialization in `HostResourceWithEndpoints`. ### 🐛 Fixes - 🔇 **Debug log level leaking into user resources** — `Logging__LogLevel__Default=Debug` set by the app host was being inherited by all user resources, silently changing their logging verbosity. The app host now uses `ASPIRE_APPHOST_LOGLEVEL` instead, which is scoped to Aspire processes only. (#17071, backported via #17078) - 🔑 **Keycloak HTTPS primary endpoint** — Fixed a regression where Keycloak tokens became invalid after an app host restart because the HTTPS endpoint port was dynamic. When developer certificates are enabled, Keycloak's primary endpoint is now upgraded to HTTPS directly, and the endpoint name is set to `http` to enable standard `http+https://` service discovery URLs. (#17058, backported via #17063) - 🔌 **Endpoint materialization in `HostResourceWithEndpoints`** — Endpoints configured via `HostResourceWithEndpoints` are now correctly materialized, ensuring endpoint resolution and service discovery work as expected. (#17091, backported via #17092) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.5 → 0.23.6 — includes fixes for Kubernetes OpenAPI generator types that caused `[SHOULD NOT HAPPEN] failed to update managedFields` errors. (#17070) - 🚀 Bumped branding to 13.3.3 (#17088) --- *Full commit: [a4615e7c6def6cba4703cdbd84009cd3da9a261b](microsoft/aspire@a4615e7c6def6cba4703cdbd84009cd3da9a261b)* ## 13.3.2 ## What's New in Aspire 13.3.2 Patch release for Aspire 13.3 with a fix for container tunnel startup when tunnel-dependent containers use `WaitFor()`. ### 🐛 Fixes - 🚇 Fix `WaitFor()` for tunnel-dependent containers — The container tunnel implementation that shipped in Aspire 13.3 deadlocked at startup when tunnel-using containers waited on other resources, because resource waits blocked `ResourceStarting` before the tunnel initialization could complete. Container and tunnel startup have been refactored to cooperate correctly, and additional tunnel-dependent containers can now be started at any point during the application lifecycle. Also improves error reporting for container tunnel failures. (#16988, backported via #16993) ### 🏷️ Housekeeping - 🚀 Bumped branding to 13.3.2 (#17053) ## 13.3.1 # Aspire 13.3.1 ## What's New in Aspire 13.3.1 Patch release for Aspire 13.3 with a regression fix for `aspire run` and a DCP bump. ### 🐛 Fixes - 🏃 **`aspire run` compute environment validation** — Skip compute environment validation in run mode so customers no longer hit `Resource '<name>' is configured to publish as an Azure Container App, but there are no 'AzureContainerAppEnvironmentResource' resources. Ensure you have added one by calling 'AddAzureContainerAppEnvironment'.` errors during local runs. The check is now only performed in publish mode, matching pre-13.3 behavior. (#16945, backported via #16952) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.4 → 0.23.5 (#16944) - 🌐 Updated localization resources (#16602) - 🚀 Bumped branding to 13.3.1 (#16951) Commits viewable in [compare view](microsoft/aspire@v13.3.0...v13.3.3). </details> Updated [Aspire.Hosting.Testing](https://github.com/microsoft/aspire) from 13.3.0 to 13.3.3. <details> <summary>Release notes</summary> _Sourced from [Aspire.Hosting.Testing's releases](https://github.com/microsoft/aspire/releases)._ ## 13.3.3 ## What's New in Aspire 13.3.3 Patch release for Aspire 13.3 with fixes for debug log level leaking into user resources, Keycloak HTTPS endpoint token invalidation, and endpoint materialization in `HostResourceWithEndpoints`. ### 🐛 Fixes - 🔇 **Debug log level leaking into user resources** — `Logging__LogLevel__Default=Debug` set by the app host was being inherited by all user resources, silently changing their logging verbosity. The app host now uses `ASPIRE_APPHOST_LOGLEVEL` instead, which is scoped to Aspire processes only. (#17071, backported via #17078) - 🔑 **Keycloak HTTPS primary endpoint** — Fixed a regression where Keycloak tokens became invalid after an app host restart because the HTTPS endpoint port was dynamic. When developer certificates are enabled, Keycloak's primary endpoint is now upgraded to HTTPS directly, and the endpoint name is set to `http` to enable standard `http+https://` service discovery URLs. (#17058, backported via #17063) - 🔌 **Endpoint materialization in `HostResourceWithEndpoints`** — Endpoints configured via `HostResourceWithEndpoints` are now correctly materialized, ensuring endpoint resolution and service discovery work as expected. (#17091, backported via #17092) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.5 → 0.23.6 — includes fixes for Kubernetes OpenAPI generator types that caused `[SHOULD NOT HAPPEN] failed to update managedFields` errors. (#17070) - 🚀 Bumped branding to 13.3.3 (#17088) --- *Full commit: [a4615e7c6def6cba4703cdbd84009cd3da9a261b](microsoft/aspire@a4615e7c6def6cba4703cdbd84009cd3da9a261b)* ## 13.3.2 ## What's New in Aspire 13.3.2 Patch release for Aspire 13.3 with a fix for container tunnel startup when tunnel-dependent containers use `WaitFor()`. ### 🐛 Fixes - 🚇 Fix `WaitFor()` for tunnel-dependent containers — The container tunnel implementation that shipped in Aspire 13.3 deadlocked at startup when tunnel-using containers waited on other resources, because resource waits blocked `ResourceStarting` before the tunnel initialization could complete. Container and tunnel startup have been refactored to cooperate correctly, and additional tunnel-dependent containers can now be started at any point during the application lifecycle. Also improves error reporting for container tunnel failures. (#16988, backported via #16993) ### 🏷️ Housekeeping - 🚀 Bumped branding to 13.3.2 (#17053) ## 13.3.1 # Aspire 13.3.1 ## What's New in Aspire 13.3.1 Patch release for Aspire 13.3 with a regression fix for `aspire run` and a DCP bump. ### 🐛 Fixes - 🏃 **`aspire run` compute environment validation** — Skip compute environment validation in run mode so customers no longer hit `Resource '<name>' is configured to publish as an Azure Container App, but there are no 'AzureContainerAppEnvironmentResource' resources. Ensure you have added one by calling 'AddAzureContainerAppEnvironment'.` errors during local runs. The check is now only performed in publish mode, matching pre-13.3 behavior. (#16945, backported via #16952) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.4 → 0.23.5 (#16944) - 🌐 Updated localization resources (#16602) - 🚀 Bumped branding to 13.3.1 (#16951) Commits viewable in [compare view](microsoft/aspire@v13.3.0...v13.3.3). </details> Updated [Aspire.MongoDB.Driver](https://github.com/microsoft/aspire) from 13.3.0 to 13.3.3. <details> <summary>Release notes</summary> _Sourced from [Aspire.MongoDB.Driver's releases](https://github.com/microsoft/aspire/releases)._ ## 13.3.3 ## What's New in Aspire 13.3.3 Patch release for Aspire 13.3 with fixes for debug log level leaking into user resources, Keycloak HTTPS endpoint token invalidation, and endpoint materialization in `HostResourceWithEndpoints`. ### 🐛 Fixes - 🔇 **Debug log level leaking into user resources** — `Logging__LogLevel__Default=Debug` set by the app host was being inherited by all user resources, silently changing their logging verbosity. The app host now uses `ASPIRE_APPHOST_LOGLEVEL` instead, which is scoped to Aspire processes only. (#17071, backported via #17078) - 🔑 **Keycloak HTTPS primary endpoint** — Fixed a regression where Keycloak tokens became invalid after an app host restart because the HTTPS endpoint port was dynamic. When developer certificates are enabled, Keycloak's primary endpoint is now upgraded to HTTPS directly, and the endpoint name is set to `http` to enable standard `http+https://` service discovery URLs. (#17058, backported via #17063) - 🔌 **Endpoint materialization in `HostResourceWithEndpoints`** — Endpoints configured via `HostResourceWithEndpoints` are now correctly materialized, ensuring endpoint resolution and service discovery work as expected. (#17091, backported via #17092) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.5 → 0.23.6 — includes fixes for Kubernetes OpenAPI generator types that caused `[SHOULD NOT HAPPEN] failed to update managedFields` errors. (#17070) - 🚀 Bumped branding to 13.3.3 (#17088) --- *Full commit: [a4615e7c6def6cba4703cdbd84009cd3da9a261b](microsoft/aspire@a4615e7c6def6cba4703cdbd84009cd3da9a261b)* ## 13.3.2 ## What's New in Aspire 13.3.2 Patch release for Aspire 13.3 with a fix for container tunnel startup when tunnel-dependent containers use `WaitFor()`. ### 🐛 Fixes - 🚇 Fix `WaitFor()` for tunnel-dependent containers — The container tunnel implementation that shipped in Aspire 13.3 deadlocked at startup when tunnel-using containers waited on other resources, because resource waits blocked `ResourceStarting` before the tunnel initialization could complete. Container and tunnel startup have been refactored to cooperate correctly, and additional tunnel-dependent containers can now be started at any point during the application lifecycle. Also improves error reporting for container tunnel failures. (#16988, backported via #16993) ### 🏷️ Housekeeping - 🚀 Bumped branding to 13.3.2 (#17053) ## 13.3.1 # Aspire 13.3.1 ## What's New in Aspire 13.3.1 Patch release for Aspire 13.3 with a regression fix for `aspire run` and a DCP bump. ### 🐛 Fixes - 🏃 **`aspire run` compute environment validation** — Skip compute environment validation in run mode so customers no longer hit `Resource '<name>' is configured to publish as an Azure Container App, but there are no 'AzureContainerAppEnvironmentResource' resources. Ensure you have added one by calling 'AddAzureContainerAppEnvironment'.` errors during local runs. The check is now only performed in publish mode, matching pre-13.3 behavior. (#16945, backported via #16952) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.4 → 0.23.5 (#16944) - 🌐 Updated localization resources (#16602) - 🚀 Bumped branding to 13.3.1 (#16951) Commits viewable in [compare view](microsoft/aspire@v13.3.0...v13.3.3). </details> Updated [Aspire.StackExchange.Redis](https://github.com/microsoft/aspire) from 13.3.0 to 13.3.3. <details> <summary>Release notes</summary> _Sourced from [Aspire.StackExchange.Redis's releases](https://github.com/microsoft/aspire/releases)._ ## 13.3.3 ## What's New in Aspire 13.3.3 Patch release for Aspire 13.3 with fixes for debug log level leaking into user resources, Keycloak HTTPS endpoint token invalidation, and endpoint materialization in `HostResourceWithEndpoints`. ### 🐛 Fixes - 🔇 **Debug log level leaking into user resources** — `Logging__LogLevel__Default=Debug` set by the app host was being inherited by all user resources, silently changing their logging verbosity. The app host now uses `ASPIRE_APPHOST_LOGLEVEL` instead, which is scoped to Aspire processes only. (#17071, backported via #17078) - 🔑 **Keycloak HTTPS primary endpoint** — Fixed a regression where Keycloak tokens became invalid after an app host restart because the HTTPS endpoint port was dynamic. When developer certificates are enabled, Keycloak's primary endpoint is now upgraded to HTTPS directly, and the endpoint name is set to `http` to enable standard `http+https://` service discovery URLs. (#17058, backported via #17063) - 🔌 **Endpoint materialization in `HostResourceWithEndpoints`** — Endpoints configured via `HostResourceWithEndpoints` are now correctly materialized, ensuring endpoint resolution and service discovery work as expected. (#17091, backported via #17092) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.5 → 0.23.6 — includes fixes for Kubernetes OpenAPI generator types that caused `[SHOULD NOT HAPPEN] failed to update managedFields` errors. (#17070) - 🚀 Bumped branding to 13.3.3 (#17088) --- *Full commit: [a4615e7c6def6cba4703cdbd84009cd3da9a261b](microsoft/aspire@a4615e7c6def6cba4703cdbd84009cd3da9a261b)* ## 13.3.2 ## What's New in Aspire 13.3.2 Patch release for Aspire 13.3 with a fix for container tunnel startup when tunnel-dependent containers use `WaitFor()`. ### 🐛 Fixes - 🚇 Fix `WaitFor()` for tunnel-dependent containers — The container tunnel implementation that shipped in Aspire 13.3 deadlocked at startup when tunnel-using containers waited on other resources, because resource waits blocked `ResourceStarting` before the tunnel initialization could complete. Container and tunnel startup have been refactored to cooperate correctly, and additional tunnel-dependent containers can now be started at any point during the application lifecycle. Also improves error reporting for container tunnel failures. (#16988, backported via #16993) ### 🏷️ Housekeeping - 🚀 Bumped branding to 13.3.2 (#17053) ## 13.3.1 # Aspire 13.3.1 ## What's New in Aspire 13.3.1 Patch release for Aspire 13.3 with a regression fix for `aspire run` and a DCP bump. ### 🐛 Fixes - 🏃 **`aspire run` compute environment validation** — Skip compute environment validation in run mode so customers no longer hit `Resource '<name>' is configured to publish as an Azure Container App, but there are no 'AzureContainerAppEnvironmentResource' resources. Ensure you have added one by calling 'AddAzureContainerAppEnvironment'.` errors during local runs. The check is now only performed in publish mode, matching pre-13.3 behavior. (#16945, backported via #16952) ### 🏷️ Housekeeping - ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.4 → 0.23.5 (#16944) - 🌐 Updated localization resources (#16602) - 🚀 Bumped branding to 13.3.1 (#16951) Commits viewable in [compare view](microsoft/aspire@v13.3.0...v13.3.3). </details> Updated [Auth0.ManagementApi](https://github.com/auth0/auth0.net) from 8.2.0 to 8.3.0. <details> <summary>Release notes</summary> _Sourced from [Auth0.ManagementApi's releases](https://github.com/auth0/auth0.net/releases)._ ## 8.3.0 **Added** - Added `UserDateSchemaExtensions` with `ToDateTime(this UserDateSchema?)` and `ToDateTime(this UserDateSchema?, TimeZoneInfo)` extension methods to convert user date fields (e.g. `created_at`, `last_login`) to `DateTime?` [\#1009](auth0/auth0.net#1009) ([kailash-b](https://github.com/kailash-b)) - Resource Servers: Added `AllowOnlineAccessWithEphemeralSessions` (`bool?`) property to `ResourceServer`, `CreateResourceServerRequestContent`, `UpdateResourceServerRequestContent`, `GetResourceServerResponseContent`, `CreateResourceServerResponseContent`, and `UpdateResourceServerResponseContent` for ephemeral session support [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) - Refresh Tokens: Added `Audience` (`string`) property to `RevokeRefreshTokensRequestContent` to scope bulk token revocation by resource server identifier [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) - User Authentication Methods: Added passkey-specific properties (`Aaguid`, `CredentialDeviceType`, `CredentialBackedUp`, `IdentityUserId`, `UserAgent`, `UserHandle`, `Transports`) to `CreateUserAuthenticationMethodRequestContent` [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) - User Authentication Methods: Added `UserHandle` and `Transports` properties to `GetUserAuthenticationMethodResponseContent` and `UserAuthenticationMethod` response types [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) - User Authentication Methods: Added new `CredentialDeviceTypeEnum` type with `single_device` and `multi_device` values [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) - Error handling: Added new structured error schema types `BadRequestSchema`, `ForbiddenSchema`, `UnauthorizedSchema`, and `TooManyRequestsSchema` with associated `*Error` enum types [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) **Fixed** - Error handling: Added `400 BadRequest` and `404 NotFound` error handling to `Users.Roles` client [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) **Changed** - Connections: Made `id` and `name` fields `required` (non-nullable) on all `ConnectionResponseContent*` types and `ConnectionResponseCommon` [\#1007](auth0/auth0.net#1007) ([fern-api[bot]](https://github.com/apps/fern-api)) Commits viewable in [compare view](auth0/auth0.net@mgmt-8.2.0...mgmt-8.3.0). </details> Updated [FluentAssertions](https://github.com/fluentassertions/fluentassertions) from 8.9.0 to 8.10.0. <details> <summary>Release notes</summary> _Sourced from [FluentAssertions's releases](https://github.com/fluentassertions/fluentassertions/releases)._ ## 8.10.0 <!-- Release notes generated using configuration in .github/release.yml at main --> ## What's Changed ### Improvements * Fail with a descriptive error when path-based rules are used on value-semantic types by @dennisdoomen in fluentassertions/fluentassertions#3187 * Significantly speed up BeEquivalentTo for large unordered collections by @dennisdoomen in fluentassertions/fluentassertions#3188 * Add ComparingNullCollectionsAsEmpty and ComparingNullStringsAsEmpty options to BeEquivalentTo by @dennisdoomen in fluentassertions/fluentassertions#3202 * Include original index in extraneous item failure messages by @dennisdoomen in fluentassertions/fluentassertions#3203 ### Documentation * Reroute the docs link to Xceed by @dennisdoomen in fluentassertions/fluentassertions#3183 * Fix typo in release notes by @jnyrup in fluentassertions/fluentassertions#3194 * Fix typos in docs by @jnyrup in fluentassertions/fluentassertions#3197 ### Others * Bump flatted from 3.4.1 to 3.4.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in fluentassertions/fluentassertions#3184 * Add AI assistant instruction file (agents.md) for Copilot, Claude, and JetBrains Junie by @Copilot in fluentassertions/fluentassertions#3176 * Bump smol-toml from 1.6.0 to 1.6.1 in the npm_and_yarn group across 1 directory by @dependabot[bot] in fluentassertions/fluentassertions#3185 * Bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in fluentassertions/fluentassertions#3186 * Bump cspell from 9.7.0 to 10.0.0 by @dependabot[bot] in fluentassertions/fluentassertions#3189 * Update nugets by @jnyrup in fluentassertions/fluentassertions#3192 * Fixup Qodana issues by @jnyrup in fluentassertions/fluentassertions#3193 * Fix Qodana argument separator by @jnyrup in fluentassertions/fluentassertions#3195 * Use new Qodana linter option by @jnyrup in fluentassertions/fluentassertions#3196 * Fix flaky BeLessThanOrEqualTo execution time test by @Copilot in fluentassertions/fluentassertions#3200 * Bump JetBrains/qodana-action from 2025.3 to 2026.1 by @dependabot[bot] in fluentassertions/fluentassertions#3201 * Use long for hashCode in ReferentialComparer to avoid overflow by @dennisdoomen in fluentassertions/fluentassertions#3204 **Full Changelog**: fluentassertions/fluentassertions@8.9.0...8.10.0 Commits viewable in [compare view](fluentassertions/fluentassertions@8.9.0...8.10.0). </details> Updated [Microsoft.AspNetCore.Mvc.Testing](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.Mvc.Testing's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.AspNetCore.OpenApi](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.OpenApi's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.AspNetCore.SignalR.Client](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.AspNetCore.SignalR.Client's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Caching.StackExchangeRedis](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Caching.StackExchangeRedis's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.Abstractions](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.Abstractions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.Binder](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.Binder's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.DependencyInjection](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.DependencyInjection's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.DependencyInjection.Abstractions](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.DependencyInjection.Abstractions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Http.Resilience](https://github.com/dotnet/extensions) from 10.5.0 to 10.6.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Http.Resilience's releases](https://github.com/dotnet/extensions/releases)._ ## 10.6.0 Version 10.6.0 stabilizes the response continuation token and background-response APIs in Microsoft.Extensions.AI.Abstractions. Most other AI work for May shipped in 10.5.1; this monthly release rolls those changes up alongside dependency updates and a small Resource Monitoring cleanup. ## Experimental API Changes ### Now Stable * ResponseContinuationToken and background-response APIs are now stable (previously `MEAI001`) #7512 ## What's Changed ### AI * Stabilize ResponseContinuationToken / background-response APIs #7512 by @jozkee (co-authored by @Copilot) ## Repository Infrastructure Updates * Update version to 10.6.0 #7458 by @jeffhandley * [main] Update dependencies from dotnet/arcade #7451 * Bump follow-redirects from 1.15.11 to 1.16.0 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript/azure-devops-report/tasks/PublishAIEvaluationReport #7469 * Merge release/10.5 into main #7470 by @jeffhandley * Bump microsoft.visualstudio.slngen.tool from 12.0.13 to 12.0.32 #7484 * Bump postcss from 8.5.9 to 8.5.12 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7494 * Bump dotnet-reportgenerator-globaltool from 5.5.7 to 5.5.9 #7504 * Rename release-notes skill to write-release-notes #7511 by @jeffhandley (co-authored by @Copilot) ## Acknowledgements * @wtgodbe @tarekgh @peterwald @JeremyLikness @eiriktsarpalis @ericstj @evgenyfedorov2 reviewed pull requests **Full Changelog**: dotnet/extensions@v10.5.2...v10.6.0 ## 10.5.2 This patch release ships a single fix to `Microsoft.Extensions.VectorData.Abstractions`, correcting `StorageName` resolution when external serialization is enabled. `Microsoft.Extensions.VectorData.ConformanceTests`, `Microsoft.Extensions.AI.Abstractions`, `Microsoft.Extensions.AI`, and `Microsoft.Extensions.AI.OpenAI` are published alongside it for version coherency — they contain no code changes from 10.5.1. ## Packages in this release | Package | Version | | --- | --- | | Microsoft.Extensions.VectorData.Abstractions | 10.5.2 | | Microsoft.Extensions.VectorData.ConformanceTests | 10.5.2 | | Microsoft.Extensions.AI.Abstractions | 10.5.2 | | Microsoft.Extensions.AI | 10.5.2 | | Microsoft.Extensions.AI.OpenAI | 10.5.2 | ## What's Changed ### Microsoft.Extensions.VectorData.Abstractions - Minor fixes to MEVD.Abstractions: correct `StorageName` behavior when external serialization is enabled, and disable a warning for `net462`. (by @roji in [#7475](dotnet/extensions#7475)) **Full Changelog**: dotnet/extensions@v10.5.1...v10.5.2 ## 10.5.1 Version 10.5.1 of the Microsoft.Extensions.AI packages stabilizes CodeInterpreter, WebSearch, and ImageGeneration tool content types. The release adds new experimental tool search and OpenAI request policy hooks. And the OpenTelemetry gen-ai semantic conventions are updated to align with v1.41. The 'aiagent-webapi' project template in Microsoft.Agents.AI.ProjectTemplates is updated to align with v1.3.0 of Agent Framework, updating the OpenTelemetry dependencies within the template projects as well. ## Packages in this release | Package | Version | |---------|---------| | Microsoft.Extensions.AI | 10.5.1 | | Microsoft.Extensions.AI.Abstractions | 10.5.1 | | Microsoft.Extensions.AI.OpenAI | 10.5.1 | | Microsoft.Extensions.AI.Templates | 10.5.1-preview.3.26251.3 | | Microsoft.Agents.AI.ProjectTemplates | 1.3.0-preview.1.26251.3 | ## Experimental API Changes ### Now Stable The following types previously emitted the `MEAI001` experimental diagnostic and are now stable. * CodeInterpreter and WebSearch tool content types are now stable #7493 * `CodeInterpreterToolCallContent` * `CodeInterpreterToolResultContent` * `WebSearchToolCallContent` * `WebSearchToolResultContent` * ImageGeneration tool content types and tool are now stable #7476 * `ImageGenerationToolCallContent` * `ImageGenerationToolResultContent` * `HostedImageGenerationTool` * `ImageGenerationOptions` * `ImageGenerationResponseFormat` (the `Hosted` enum value remains experimental) * `IImageGenerator` and the rest of the image generation infrastructure also remain experimental ### New Experimental APIs The following new APIs emit the `MEAI001` experimental diagnostic. * New experimental API: `HostedToolSearchTool` with `DeferredTools` for tool-search-driven deferred tool loading #7471 * New experimental API: `OpenAIRequestPolicies` extension hook for appending `System.ClientModel.PipelinePolicy` instances to outgoing OpenAI requests #7495 ### Breaking Changes to Experimental APIs * `WebSearchToolResultContent.Results` was renamed to `Outputs` as part of the stabilization in #7493, aligning with `CodeInterpreterToolResultContent.Outputs`. The original `Results` property was included in version 10.4.0 and 10.5.0; this is a binary breaking change and consumers need to update to consume the updated property. ```diff WebSearchToolResultContent content = ...; - IList<AIContent>? items = content.Results; + IList<AIContent>? items = content.Outputs; ``` ... (truncated) Commits viewable in [compare view](dotnet/extensions@v10.5.0...v10.6.0). </details> Updated [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Logging.Abstractions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Options](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Options's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Options.ConfigurationExtensions](https://github.com/dotnet/dotnet) from 10.0.7 to 10.0.8. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Options.ConfigurationExtensions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.ServiceDiscovery](https://github.com/dotnet/extensions) from 10.5.0 to 10.6.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.ServiceDiscovery's releases](https://github.com/dotnet/extensions/releases)._ ## 10.6.0 Version 10.6.0 stabilizes the response continuation token and background-response APIs in Microsoft.Extensions.AI.Abstractions. Most other AI work for May shipped in 10.5.1; this monthly release rolls those changes up alongside dependency updates and a small Resource Monitoring cleanup. ## Experimental API Changes ### Now Stable * ResponseContinuationToken and background-response APIs are now stable (previously `MEAI001`) #7512 ## What's Changed ### AI * Stabilize ResponseContinuationToken / background-response APIs #7512 by @jozkee (co-authored by @Copilot) ## Repository Infrastructure Updates * Update version to 10.6.0 #7458 by @jeffhandley * [main] Update dependencies from dotnet/arcade #7451 * Bump follow-redirects from 1.15.11 to 1.16.0 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript/azure-devops-report/tasks/PublishAIEvaluationReport #7469 * Merge release/10.5 into main #7470 by @jeffhandley * Bump microsoft.visualstudio.slngen.tool from 12.0.13 to 12.0.32 #7484 * Bump postcss from 8.5.9 to 8.5.12 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7494 * Bump dotnet-reportgenerator-globaltool from 5.5.7 to 5.5.9 #7504 * Rename release-notes skill to write-release-notes #7511 by @jeffhandley (co-authored by @Copilot) ## Acknowledgements * @wtgodbe @tarekgh @peterwald @JeremyLikness @eiriktsarpalis @ericstj @evgenyfedorov2 reviewed pull requests **Full Changelog**: dotnet/extensions@v10.5.2...v10.6.0 ## 10.5.2 This patch release ships a single fix to `Microsoft.Extensions.VectorData.Abstractions`, correcting `StorageName` resolution when external serialization is enabled. `Microsoft.Extensions.VectorData.ConformanceTests`, `Microsoft.Extensions.AI.Abstractions`, `Microsoft.Extensions.AI`, and `Microsoft.Extensions.AI.OpenAI` are published alongside it for version coherency — they contain no code changes from 10.5.1. ## Packages in this release | Package | Version | | --- | --- | | Microsoft.Extensions.VectorData.Abstractions | 10.5.2 | | Microsoft.Extensions.VectorData.ConformanceTests | 10.5.2 | | Microsoft.Extensions.AI.Abstractions | 10.5.2 | | Microsoft.Extensions.AI | 10.5.2 | | Microsoft.Extensions.AI.OpenAI | 10.5.2 | ## What's Changed ### Microsoft.Extensions.VectorData.Abstractions - Minor fixes to MEVD.Abstractions: correct `StorageName` behavior when external serialization is enabled, and disable a warning for `net462`. (by @roji in [#7475](dotnet/extensions#7475)) **Full Changelog**: dotnet/extensions@v10.5.1...v10.5.2 ## 10.5.1 Version 10.5.1 of the Microsoft.Extensions.AI packages stabilizes CodeInterpreter, WebSearch, and ImageGeneration tool content types. The release adds new experimental tool search and OpenAI request policy hooks. And the OpenTelemetry gen-ai semantic conventions are updated to align with v1.41. The 'aiagent-webapi' project template in Microsoft.Agents.AI.ProjectTemplates is updated to align with v1.3.0 of Agent Framework, updating the OpenTelemetry dependencies within the template projects as well. ## Packages in this release | Package | Version | |---------|---------| | Microsoft.Extensions.AI | 10.5.1 | | Microsoft.Extensions.AI.Abstractions | 10.5.1 | | Microsoft.Extensions.AI.OpenAI | 10.5.1 | | Microsoft.Extensions.AI.Templates | 10.5.1-preview.3.26251.3 | | Microsoft.Agents.AI.ProjectTemplates | 1.3.0-preview.1.26251.3 | ## Experimental API Changes ### Now Stable The following types previously emitted the `MEAI001` experimental diagnostic and are now stable. * CodeInterpreter and WebSearch tool content types are now stable #7493 * `CodeInterpreterToolCallContent` * `CodeInterpreterToolResultContent` * `WebSearchToolCallContent` * `WebSearchToolResultContent` * ImageGeneration tool content types and tool are now stable #7476 * `ImageGenerationToolCallContent` * `ImageGenerationToolResultContent` * `HostedImageGenerationTool` * `ImageGenerationOptions` * `ImageGenerationResponseFormat` (the `Hosted` enum value remains experimental) * `IImageGenerator` and the rest of the image generation infrastructure also remain experimental ### New Experimental APIs The following new APIs emit the `MEAI001` experimental diagnostic. * New experimental API: `HostedToolSearchTool` with `DeferredTools` for tool-search-driven deferred tool loading #7471 * New experimental API: `OpenAIRequestPolicies` extension hook for appending `System.ClientModel.PipelinePolicy` instances to outgoing OpenAI requests #7495 ### Breaking Changes to Experimental APIs * `WebSearchToolResultContent.Results` was renamed to `Outputs` as part of the stabilization in #7493, aligning with `CodeInterpreterToolResultContent.Outputs`. The original `Results` property was included in version 10.4.0 and 10.5.0; this is a binary breaking change and consumers need to update to consume the updated property. ```diff WebSearchToolResultContent content = ...; - IList<AIContent>? items = content.Results; + IList<AIContent>? items = content.Outputs; ``` ... (truncated) Commits viewable in [compare view](dotnet/extensions@v10.5.0...v10.6.0). </details> Updated [MongoDB.Bson](https://github.com/mongodb/mongo-csharp-driver) from 3.8.0 to 3.8.1. <details> <summary>Release notes</summary> _Sourced from [MongoDB.Bson's releases](https://github.com/mongodb/mongo-csharp-driver/releases)._ ## 3.8.1 This is a patch release that addresses a security issue: - [CSHARP-6034](https://jira.mongodb.org/browse/CSHARP-6034): Update Snappier to fix a security issue ([GHSA-pggp-6c3x-2xmx](GHSA-pggp-6c3x-2xmx)) ### Known warning when restoring: SharpCompress NU1902 When restoring a project that references this driver with the .NET 8 SDK or newer, NuGet may emit the `NU1902` audit warning for the transitive `SharpCompress 0.30.1` dependency ([GHSA-6c8g-7p36-r338](GHSA-6c8g-7p36-r338) — directory traversal via `IArchive.WriteToDirectory()`). The driver does not use that API; `SharpCompress` is only used for in-memory ZLib stream compression of MongoDB wire-protocol messages, so the driver's usage does not expose consumers to this advisory. This issue will be addressed in an upcoming release ([CSHARP-6037](https://jira.mongodb.org/browse/CSHARP-6037)). Documentation on the .NET driver can be found [here](https://www.mongodb.com/docs/drivers/csharp/v3.8/). Commits viewable in [compare view](mongodb/mongo-csharp-driver@v3.8.0...v3.8.1). </details> Updated [MongoDB.Driver](https://github.com/mongodb/mongo-csharp-driver) from 3.8.0 to 3.8.1. <details> <summary>Release notes</summary> _Sourced from [MongoDB.Driver's releases](https://github.com/mongodb/mongo-csharp-driver/releases)._ ## 3.8.1 This is a patch release that addresses a security issue: - [CSHARP-6034](https://jira.mongodb.org/browse/CSHARP-6034): Update Snappier to fix a security issue ([GHSA-pggp-6c3x-2xmx](GHSA-pggp-6c3x-2xmx)) ### Known warning when restoring: SharpCompress NU1902 When restoring a project that references this driver with the .NET 8 SDK or newer, NuGet may emit the `NU1902` audit warning for the transitive `SharpCompress 0.30.1` dependency ([GHSA-6c8g-7p36-r338](GHSA-6c8g-7p36-r338) — directory traversal via `IArchive.WriteToDirectory()`). The driver does not use that API; `SharpCompress` is only used for in-memory ZLib stream compression of MongoDB wire-protocol messages, so the driver's usage does not expose consumers to this advisory. This issue will be addressed in an upcoming release ([CSHARP-6037](https://jira.mongodb.org/browse/CSHARP-6037)). Documentation on the .NET driver can be found [here](https://www.mongodb.com/docs/drivers/csharp/v3.8/). Commits viewable in [compare view](mongodb/mongo-csharp-driver@v3.8.0...v3.8.1). </details> Updated [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp) from 3.1.12 to 4.0.0. <details> <summary>Release notes</summary> _Sourced from [SixLabors.ImageSharp's releases](https://github.com/SixLabors/ImageSharp/releases)._ ## 4.0.0 ## What's Changed * Update to net8 by @stefannikolei in SixLabors/ImageSharp#2583 * Handle dedup of local palette of 256 length - Main by @JimBobSquarePants in SixLabors/ImageSharp#2607 * Replace custom Crc32 by @JimBobSquarePants in SixLabors/ImageSharp#2611 * Sync 3.1 DrawImage fixes by @tocsoft in SixLabors/ImageSharp#2612 * Fix handling gif encoding for global palettes - Main by @JimBobSquarePants in SixLabors/ImageSharp#2615 * Bump actions/setup-dotnet from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2613 * Adjusted the casing of the Webp format name by @jscarle in SixLabors/ImageSharp#2623 * Fix Paeth Filter decode on platforms that do not support Ssse3 - Main by @JimBobSquarePants in SixLabors/ImageSharp#2620 * Fix WebP animation speed bug by @marklagendijk in SixLabors/ImageSharp#2624 * Promote PixelTypeInfo to Pixel by @stefannikolei in SixLabors/ImageSharp#2601 * TGA: Treat 32 bit True Color images always as transparent by @brianpopow in SixLabors/ImageSharp#2643 * Modernize and optimize pixel format operations across platforms. by @JimBobSquarePants in SixLabors/ImageSharp#2645 * Cleanup SimdUtils by @JimBobSquarePants in SixLabors/ImageSharp#2654 * Bump actions/cache from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2648 * Bump codecov/codecov-action from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2657 * Bump NuGet/setup-nuget from 1 to 2 by @dependabot[bot] in SixLabors/ImageSharp#2658 * Add v3.1.x fixes #2673 and #2674 into main. by @JimBobSquarePants in SixLabors/ImageSharp#2675 * Add fixes 2668, 2676, and 2677 to main by @JimBobSquarePants in SixLabors/ImageSharp#2678 * Merge 2681 to v4 Main by @JimBobSquarePants in SixLabors/ImageSharp#2690 * Add JPEG COM marker support by @RobertMut in SixLabors/ImageSharp#2641 * Bump actions/upload-artifact from 3 to 4 by @dependabot[bot] in SixLabors/ImageSharp#2625 * Only exit JPEG scan decoding after multiple EOF hits by @JimBobSquarePants in SixLabors/ImageSharp#2701 * V4 Ensure VP8X alpha flag is updated correctly. by @JimBobSquarePants in SixLabors/ImageSharp#2703 * Fix animated png handling (issue #2708) by @SpaceCheetah in SixLabors/ImageSharp#2710 * Merge latest release from v3 by @JimBobSquarePants in SixLabors/ImageSharp#2720 * Fix MacOS jobs by @antonfirsov in SixLabors/ImageSharp#2728 * Fix async-over-sync issue in Image.DecodeAsync() by @kroymann in SixLabors/ImageSharp#2725 * Fix overflow in MemoryAllocator.Create(options) by @antonfirsov in SixLabors/ImageSharp#2730 * GifDecoder: Limit lzw bits to a maximum of 12 bits by @brianpopow in SixLabors/ImageSharp#2744 * GifDecoder : Allow skipping bad metadata using identify by @JimBobSquarePants in SixLabors/ImageSharp#2749 * Add ICO and CUR file decoder. by @frg2089 in SixLabors/ImageSharp#2579 * v4 - Fix off-by-one error when centering a transform. by @JimBobSquarePants in SixLabors/ImageSharp#2761 * v4 Fix 2758 by @JimBobSquarePants in SixLabors/ImageSharp#2764 * Simplify Color Space Conversion APIs by @JimBobSquarePants in SixLabors/ImageSharp#2739 * Webp: Fix Issue 2763 by @brianpopow in SixLabors/ImageSharp#2767 * V4 Correctly break during Png decoding by @JimBobSquarePants in SixLabors/ImageSharp#2773 * V4 : Fix filtering on PNG encode. by @JimBobSquarePants in SixLabors/ImageSharp#2778 * Fix #2779 buffer overrun by @KirillAldashkin in SixLabors/ImageSharp#2780 * Fix ImageMetadata docs typo by @lofcz in SixLabors/ImageSharp#2781 * Add API for metadata conversion between formats. by @JimBobSquarePants in SixLabors/ImageSharp#2751 * Tiff decoder: Fix issue 2679 by @brianpopow in SixLabors/ImageSharp#2789 * Replace PngCrcChunkHandling by @JimBobSquarePants in SixLabors/ImageSharp#2786 * Add tagname to debugger visualization for Exif- and Iptc-values, to facilitate easier debugging and discovery by @lassevk in SixLabors/ImageSharp#2787 * V4 - Correctly handle transform spaces when building transform matrices. by @JimBobSquarePants in SixLabors/ImageSharp#2795 * Allow decoding Tiff of different frame size. by @JimBobSquarePants in SixLabors/ImageSharp#2788 * Add progressive JPEG encoder by @ardabada in SixLabors/ImageSharp#2740 * Fix using dither in BmpEncoder when bit per pixel is <= 4 by @mistoll in SixLabors/ImageSharp#2819 * Add QuadDistortion to ProjectiveTransformBuilder by @Socolin in SixLabors/ImageSharp#2748 * WEBP : Use Correct Width With AlphaDecoder by @JimBobSquarePants in SixLabors/ImageSharp#2823 ... (truncated) Commits viewable in [compare view](SixLabors/ImageSharp@v3.1.12...v4.0.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> Co-authored-by: mpaulosky <60372079+mpaulosky@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Prerequisites
Description
The plan here is to be able to remove
ExtendedIntrinsicsandFallbackIntrinsics128by normalizing theHwIntrinsicsimplementation addingVector512support and extendingVector128support to include ARM.Any and all input is welcome.
CC @tannergooding @saucecontrol @gfoidl @br3aker