Skip to content

Prepare 9.4.x update for Microsoft.Extensions.AI #6409

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 25 commits into from
May 9, 2025

Conversation

jeffhandley
Copy link
Member

@jeffhandley jeffhandley commented May 9, 2025

This cherry-picks all updates to these libraries from main into the release/9.4 branch to prepare for another 9.4.x preview release.

Microsoft Reviewers: Open in CodeFlow

stephentoub and others added 17 commits May 9, 2025 12:57
Co-authored-by: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Also adds the Enable SensitiveData property to OpenTelemetryEmbeddingGenerators. This was missed when adding it to OpenTelemetryChatClient.
* Fix AIFunctionFactory handling of default struct arguments

* Extend testing to custom structs

* Use GetUninitializedObject instead of Activator
Refusals in OpenAI are errors reported when the service can't generate an output that matches the requested schema. Translate refusals to ErrorContent now that we have it.
* Rename useJsonSchema parameter

The `GetResponseAsync<T>` methods accept a `bool?` parameter currently called `useJsonSchema`. This is confusing, because the whole point of the method is to create and use a JSON schema from the `T`. The parameter actually controls _how_ that schema is used, whether it's included as part of the messages (false), as part of a ChatResponseFormat in the ChatOptions (true), or up to the system to decide.

I've clarified it by renaming it from `useJsonSchema` to `useJsonSchemaResponseFormat`. It's wordier, but it disambiguates the intent.

* Update src/Libraries/Microsoft.Extensions.AI/ChatCompletion/ChatClientStructuredOutputExtensions.cs

Co-authored-by: Eirik Tsarpalis <eirik.tsarpalis@gmail.com>

---------

Co-authored-by: Eirik Tsarpalis <eirik.tsarpalis@gmail.com>
)

* Add initial schema transformation functionality and incorporate into the OpenAI leaf client.

* Update all leaf client implementions, improve naming, add testing.

* Remove redundant suppressions

* Address feedback.
* Look for OpenAI.ChatCompletionOptions in top-level additional properties and stop looking for individually specific additional properties

* Add RawRepresentation to ChatOptions and use it in OpenAI and AzureAIInference

* Remove now unused locals

* Add [JsonIgnore] and update roundtrip tests

* Overwirte properties only if the underlying model don't specify it already

* Clone RawRepresentation

* Reflection workaround for ToolChoice not being cloned

* Style changes

* AI.Inference: Bring back propagation of additional properties

* Don't use 0.1f, it doesn't roundtrip properly in .NET Framework

* Add RawRepresentationFactory instead of object? property

* Augment remarks to discourage returning shared instances

* Documentation feedback

* AI.Inference: keep passing TopK as AdditionalProperty if not already there
Also fixed the name of the LoggingSpeechToTextClientBuilderExtensions type to conform to patterns used elsewhere in the library.
* Add BinaryEmbedding

Also:
- Renames the polymorphic discriminators to conform with typical lingo for these types.
- Adds an Embedding.Dimensions virtual property.
shyamnamboodiripad and others added 6 commits May 9, 2025 13:30
…ct metric names for Safety evaluators (#6361)

This was an unfortunate regression that was introduced during a recent refactoring.

The metrics returned from the Azure AI Foundry Evaluation service have different names than the ones we use in the Safety library. We translate the EvaluationMetric.Name of the metrics returned by the service to the more display friendly names used in the library before returning the metrics to the caller.

While the returned metrics were correctly patched up, the EvaluationResult.Metrics dictionary still stored these metrics by the original names returned from the service. Unfortunately, this meant EvaluationResult.Get would throw an exception when trying to fetch metric with name ViolenceEvaluator.ViolenceMetricName.

The fix in this commit fixes the keys in the dictionary as well. This commit also updates tests to cover the case being fixed.

Fixes #6360
`Azure AI Content Safety service` -> `Azure AI Foundry Evaluation service`
Details for this change are available in #6387.

Fixes #6387
In #6148, we disabled net9.0 TFM for the aieval tool to work around the race described in dotnet/sdk#47696. The underlying issue was subsequently fixed in the SDK (via dotnet/sdk#47788). However, this fix has not been backported to the dotnet 9 SDK yet.

The SDK team is working on backporting the fix (see discussion in dotnet/sdk#47788 (comment)). But in the meanwhile, we can add back the net9.0 TFM and continue to work around the race by disabling parallel build.

This would help users of the aieval tool sidestep errors such as the ones described in #6388 when they dont have dotnet8 installed on the machine.

We can remove this workaround, once the backported fix is available in the dotnet 9 SDK.

Fixes #6388
…erties on report (#6377)

* Add documentation around proper usage of IDistributedCache

* Add Content-Security-Policy to prevent page from calling into other sites.

* Remove remark about IDistributedCache usage

* Fix package-lock.json

* Remove <remarks> start tag.
* Rename IResultStore and IResponseCacheProvider

IResultStore -> IEvaluationResultStore and
IResponseCacheProvider -> IEvaluationResponseCacheProvider

* Include missing EvaluationContextConverter in AzureStorageJsonUtilities

Also use linked files to avoid the need to duplicate code.

* Reorder enum members

The new order goes from least desirable rating to most desirable.

* Refactor extension method overloads

Implement overloads that take ChatMessage by calling corresponding overloads that take ChatResponse.

* Refactor AddTurnDetails to support adding details for multiple turns

Adding single turns continues to be supported via a params array overload.

* Add missing parameter for timeToLiveForCacheEntries to DiskBasedReportingConfiguration

This was missed in an earlier PR that introduced the timeToLiveForCacheEntries on the constructor of DiskBasedResponseCacheProvider.

Also reorder constructor parameters for AzureStorageReportingConfiguration so that the parameters for caching apear next to each other and so that the parameter ordering is aligned with DiskBasedReportingConfiguration.

* Minor formatting changes
@jeffhandley jeffhandley changed the title Prepare 9.4.x update for Microsoft.Extensions.AI, Abstractions, Templates, OpenAI, AzureAIInference, and Ollama Prepare 9.4.x update for Microsoft.Extensions.AI May 9, 2025
…AI.Evaluation.Reporting/TypeScript (#6354)

* Bump vite

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.4
  dependency-type: direct:development
...

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

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Shyam Namboodiripad <gnamboo@microsoft.com>
@jeffhandley jeffhandley requested a review from Shyam-Gupta May 9, 2025 20:46
@jeffhandley jeffhandley merged commit 61dcce6 into release/9.4 May 9, 2025
6 checks passed
@jeffhandley jeffhandley deleted the jeffhandley/meai-main-to-9.4 branch May 9, 2025 22:25
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants