Skip to content
Closed
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
5eaeaf8
Add support for custom headers in HostedMcpServerTool
echapmanFromBunnings Nov 17, 2025
00acd8a
Update API baselines for .NET 10 and add new AI libraries
echapmanFromBunnings Nov 17, 2025
2af4dba
Remove NLP evaluation baseline and update API files
echapmanFromBunnings Nov 18, 2025
64bb9ae
Remove Safety API contract JSON file
echapmanFromBunnings Nov 18, 2025
e24cbf4
Remove experimental evaluator classes from API JSON
echapmanFromBunnings Nov 18, 2025
6d9ec47
Mark GetCacheKey methods as Experimental
echapmanFromBunnings Nov 18, 2025
b240f4b
Merge branch 'main' into headersOnMcpTools
echapmanFromBunnings Nov 19, 2025
a321623
Merge branch 'main' into headersOnMcpTools
echapmanFromBunnings Nov 20, 2025
6703fab
Mark cache key methods as experimental
echapmanFromBunnings Nov 20, 2025
ed5deb6
Merge branch 'main' into headersOnMcpTools
echapmanFromBunnings Nov 20, 2025
1a16923
Merge branch 'main' into headersOnMcpTools
echapmanFromBunnings Nov 20, 2025
6a1d0e0
Remove IBufferedLogger interface from FakeLogger
echapmanFromBunnings Nov 20, 2025
dc6f8e9
Merge branch 'main' into headersOnMcpTools
echapmanFromBunnings Nov 21, 2025
7ee0ba9
Mark Snapshot property as obsolete and remove Experimental attribute
echapmanFromBunnings Nov 21, 2025
eb379b5
Remove Experimental attribute from resource monitoring API
echapmanFromBunnings Nov 21, 2025
e99b439
Mark resource monitoring APIs as obsolete
echapmanFromBunnings Nov 21, 2025
de2fef7
Add CP0002 baseline suppressions for .NET 10.0 APIs
echapmanFromBunnings Nov 21, 2025
44fcee2
Merge branch 'main' into headersOnMcpTools
echapmanFromBunnings Nov 21, 2025
4940271
Add missing using directives to ISnapshotProvider
echapmanFromBunnings Nov 21, 2025
5db45c7
Merge branch 'headersOnMcpTools' of https://github.com/echapmanFromBu…
echapmanFromBunnings Nov 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions scripts/MakeApiBaselines.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Write-Output "Installing required toolset"
InitializeDotNetCli -install $true | Out-Null

$Project = $PSScriptRoot + "/../eng/Tools/ApiChief/ApiChief.csproj"
$Command = $PSScriptRoot + "/../artifacts/bin/ApiChief/Debug/net9.0/ApiChief.dll"
$Command = $PSScriptRoot + "/../artifacts/bin/ApiChief/Debug/net10.0/ApiChief.dll"
$LibrariesFolder = $PSScriptRoot + "/../src/Libraries"

Write-Output "Building ApiChief tool"
Expand All @@ -28,7 +28,7 @@ Write-Output "Creating API baseline files in the src/Libraries folder"
Get-ChildItem -Path $LibrariesFolder -Depth 1 -Include *.csproj | ForEach-Object `
{
$name = Split-Path $_.FullName -LeafBase
$path = "$PSScriptRoot\..\artifacts\bin\$name\Debug\net9.0\$name.dll"
$path = "$PSScriptRoot\..\artifacts\bin\$name\Debug\net10.0\$name.dll"
Write-Host " Processing" $name
dotnet $Command $path emit baseline -o "$LibrariesFolder/$name/$name.json"
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.AspNetCore.AsyncState, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.AspNetCore.AsyncState, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class Microsoft.Extensions.DependencyInjection.AsyncStateHttpContextExtensions",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.AspNetCore.Diagnostics.Middleware, Version=9.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.AspNetCore.Diagnostics.Middleware, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class Microsoft.Extensions.DependencyInjection.HttpLoggingServiceCollectionExtensions",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.AspNetCore.HeaderParsing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.AspNetCore.HeaderParsing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class Microsoft.AspNetCore.HeaderParsing.CommonHeaders",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.AspNetCore.Testing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.AspNetCore.Testing, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class Microsoft.Extensions.Hosting.ServiceFakesHostExtensions",
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,9 @@ private static string ValidateUrl(Uri serverUrl)
/// </para>
/// </remarks>
public HostedMcpServerToolApprovalMode? ApprovalMode { get; set; }

/// <summary>
/// Gets or sets additional headers to include in requests to the remote MCP server.
/// </summary>
public IDictionary<string, string>? Headers { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"Name": "Microsoft.Extensions.AI.AzureAIInference, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class Microsoft.Extensions.AI.AzureAIInferenceExtensions",
"Stage": "Stable",
"Methods": [
{
"Member": "static Microsoft.Extensions.AI.IChatClient Microsoft.Extensions.AI.AzureAIInferenceExtensions.AsIChatClient(this Azure.AI.Inference.ChatCompletionsClient chatCompletionsClient, string? modelId = null);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IEmbeddingGenerator<string, Microsoft.Extensions.AI.Embedding<float>> Microsoft.Extensions.AI.AzureAIInferenceExtensions.AsIEmbeddingGenerator(this Azure.AI.Inference.EmbeddingsClient embeddingsClient, string? defaultModelId = null, int? defaultModelDimensions = null);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IEmbeddingGenerator<Microsoft.Extensions.AI.DataContent, Microsoft.Extensions.AI.Embedding<float>> Microsoft.Extensions.AI.AzureAIInferenceExtensions.AsIEmbeddingGenerator(this Azure.AI.Inference.ImageEmbeddingsClient imageEmbeddingsClient, string? defaultModelId = null, int? defaultModelDimensions = null);",
"Stage": "Stable"
}
]
}
]
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"Name": "Microsoft.Extensions.AI.Evaluation.Console, Version=9.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.Extensions.AI.Evaluation.Console, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": []
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.Extensions.AI.Evaluation.Quality, Version=9.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.Extensions.AI.Evaluation.Quality, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "sealed class Microsoft.Extensions.AI.Evaluation.Quality.CoherenceEvaluator : Microsoft.Extensions.AI.Evaluation.IEvaluator",
Expand Down Expand Up @@ -275,11 +275,11 @@
"Stage": "Stable",
"Methods": [
{
"Member": "Microsoft.Extensions.AI.Evaluation.Quality.RetrievalEvaluatorContext.RetrievalEvaluatorContext(System.Collections.Generic.IEnumerable<string> retrievedContextChunks);",
"Member": "Microsoft.Extensions.AI.Evaluation.Quality.RetrievalEvaluatorContext.RetrievalEvaluatorContext(params string[] retrievedContextChunks);",
"Stage": "Stable"
},
{
"Member": "Microsoft.Extensions.AI.Evaluation.Quality.RetrievalEvaluatorContext.RetrievalEvaluatorContext(params string[] retrievedContextChunks);",
"Member": "Microsoft.Extensions.AI.Evaluation.Quality.RetrievalEvaluatorContext.RetrievalEvaluatorContext(System.Collections.Generic.IEnumerable<string> retrievedContextChunks);",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like a bug in the tool and should probably be switched back to the params syntax.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its there, that is member, not the type. There is a params method, and an enumerable method in that array.

"Stage": "Stable"
}
],
Expand All @@ -295,4 +295,4 @@
]
}
]
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.Extensions.AI.Evaluation.Reporting.Azure, Version=9.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.Extensions.AI.Evaluation.Reporting.Azure, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class Microsoft.Extensions.AI.Evaluation.Reporting.Storage.AzureStorageReportingConfiguration",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Name": "Microsoft.Extensions.AI.Evaluation, Version=9.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Name": "Microsoft.Extensions.AI.Evaluation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "sealed class Microsoft.Extensions.AI.Evaluation.BooleanMetric : Microsoft.Extensions.AI.Evaluation.EvaluationMetric<bool?>",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
{
"Name": "Microsoft.Extensions.AI.OpenAI, Version=10.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "static class OpenAI.Assistants.MicrosoftExtensionsAIAssistantsExtensions",
"Stage": "Stable",
"Methods": [
{
"Member": "static OpenAI.Assistants.FunctionToolDefinition OpenAI.Assistants.MicrosoftExtensionsAIAssistantsExtensions.AsOpenAIAssistantsFunctionToolDefinition(this Microsoft.Extensions.AI.AIFunctionDeclaration function);",
"Stage": "Stable"
}
]
},
{
"Type": "static class OpenAI.Chat.MicrosoftExtensionsAIChatExtensions",
"Stage": "Stable",
"Methods": [
{
"Member": "static System.Collections.Generic.IEnumerable<Microsoft.Extensions.AI.ChatMessage> OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsChatMessages(this System.Collections.Generic.IEnumerable<OpenAI.Chat.ChatMessage> messages);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.ChatResponse OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsChatResponse(this OpenAI.Chat.ChatCompletion chatCompletion, OpenAI.Chat.ChatCompletionOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static System.Collections.Generic.IAsyncEnumerable<Microsoft.Extensions.AI.ChatResponseUpdate> OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsChatResponseUpdatesAsync(this System.Collections.Generic.IAsyncEnumerable<OpenAI.Chat.StreamingChatCompletionUpdate> chatCompletionUpdates, OpenAI.Chat.ChatCompletionOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Chat.ChatCompletion OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsOpenAIChatCompletion(this Microsoft.Extensions.AI.ChatResponse response);",
"Stage": "Stable"
},
{
"Member": "static System.Collections.Generic.IEnumerable<OpenAI.Chat.ChatMessage> OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsOpenAIChatMessages(this System.Collections.Generic.IEnumerable<Microsoft.Extensions.AI.ChatMessage> messages, Microsoft.Extensions.AI.ChatOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Chat.ChatResponseFormat? OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsOpenAIChatResponseFormat(this Microsoft.Extensions.AI.ChatResponseFormat? format, Microsoft.Extensions.AI.ChatOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Chat.ChatTool OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsOpenAIChatTool(this Microsoft.Extensions.AI.AIFunctionDeclaration function);",
"Stage": "Stable"
},
{
"Member": "static System.Collections.Generic.IAsyncEnumerable<OpenAI.Chat.StreamingChatCompletionUpdate> OpenAI.Chat.MicrosoftExtensionsAIChatExtensions.AsOpenAIStreamingChatCompletionUpdatesAsync(this System.Collections.Generic.IAsyncEnumerable<Microsoft.Extensions.AI.ChatResponseUpdate> responseUpdates, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));",
"Stage": "Stable"
}
]
},
{
"Type": "static class OpenAI.Realtime.MicrosoftExtensionsAIRealtimeExtensions",
"Stage": "Stable",
"Methods": [
{
"Member": "static OpenAI.Realtime.ConversationFunctionTool OpenAI.Realtime.MicrosoftExtensionsAIRealtimeExtensions.AsOpenAIConversationFunctionTool(this Microsoft.Extensions.AI.AIFunctionDeclaration function);",
"Stage": "Stable"
}
]
},
{
"Type": "static class OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions",
"Stage": "Stable",
"Methods": [
{
"Member": "static void OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.Add(this System.Collections.Generic.IList<Microsoft.Extensions.AI.AITool> tools, OpenAI.Responses.ResponseTool tool);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.AITool OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsAITool(this OpenAI.Responses.ResponseTool tool);",
"Stage": "Stable"
},
{
"Member": "static System.Collections.Generic.IEnumerable<Microsoft.Extensions.AI.ChatMessage> OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsChatMessages(this System.Collections.Generic.IEnumerable<OpenAI.Responses.ResponseItem> items);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.ChatResponse OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsChatResponse(this OpenAI.Responses.OpenAIResponse response, OpenAI.Responses.ResponseCreationOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static System.Collections.Generic.IAsyncEnumerable<Microsoft.Extensions.AI.ChatResponseUpdate> OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsChatResponseUpdatesAsync(this System.Collections.Generic.IAsyncEnumerable<OpenAI.Responses.StreamingResponseUpdate> responseUpdates, OpenAI.Responses.ResponseCreationOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Responses.OpenAIResponse OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsOpenAIResponse(this Microsoft.Extensions.AI.ChatResponse response, Microsoft.Extensions.AI.ChatOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static System.Collections.Generic.IEnumerable<OpenAI.Responses.ResponseItem> OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsOpenAIResponseItems(this System.Collections.Generic.IEnumerable<Microsoft.Extensions.AI.ChatMessage> messages, Microsoft.Extensions.AI.ChatOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Responses.ResponseTextFormat? OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsOpenAIResponseTextFormat(this Microsoft.Extensions.AI.ChatResponseFormat? format, Microsoft.Extensions.AI.ChatOptions? options = null);",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Responses.FunctionTool OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsOpenAIResponseTool(this Microsoft.Extensions.AI.AIFunctionDeclaration function);",
"Stage": "Stable"
},
{
"Member": "static OpenAI.Responses.ResponseTool? OpenAI.Responses.MicrosoftExtensionsAIResponsesExtensions.AsOpenAIResponseTool(this Microsoft.Extensions.AI.AITool tool);",
"Stage": "Stable"
}
]
},
{
"Type": "static class Microsoft.Extensions.AI.OpenAIClientExtensions",
"Stage": "Stable",
"Methods": [
{
"Member": "static Microsoft.Extensions.AI.IChatClient Microsoft.Extensions.AI.OpenAIClientExtensions.AsIChatClient(this OpenAI.Chat.ChatClient chatClient);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IChatClient Microsoft.Extensions.AI.OpenAIClientExtensions.AsIChatClient(this OpenAI.Responses.OpenAIResponseClient responseClient);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IChatClient Microsoft.Extensions.AI.OpenAIClientExtensions.AsIChatClient(this OpenAI.Assistants.AssistantClient assistantClient, string assistantId, string? threadId = null);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IChatClient Microsoft.Extensions.AI.OpenAIClientExtensions.AsIChatClient(this OpenAI.Assistants.AssistantClient assistantClient, OpenAI.Assistants.Assistant assistant, string? threadId = null);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IEmbeddingGenerator<string, Microsoft.Extensions.AI.Embedding<float>> Microsoft.Extensions.AI.OpenAIClientExtensions.AsIEmbeddingGenerator(this OpenAI.Embeddings.EmbeddingClient embeddingClient, int? defaultModelDimensions = null);",
"Stage": "Stable"
},
{
"Member": "static Microsoft.Extensions.AI.IImageGenerator Microsoft.Extensions.AI.OpenAIClientExtensions.AsIImageGenerator(this OpenAI.Images.ImageClient imageClient);",
"Stage": "Experimental"
},
{
"Member": "static Microsoft.Extensions.AI.ISpeechToTextClient Microsoft.Extensions.AI.OpenAIClientExtensions.AsISpeechToTextClient(this OpenAI.Audio.AudioClient audioClient);",
"Stage": "Experimental"
}
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -537,12 +537,12 @@ void IDisposable.Dispose()
mcpTool.ServerName,
url,
mcpTool.AuthorizationToken,
mcpTool.ServerDescription) :
mcpTool.ServerDescription, mcpTool.Headers) :
ResponseTool.CreateMcpTool(
mcpTool.ServerName,
new McpToolConnectorId(mcpTool.ServerAddress),
mcpTool.AuthorizationToken,
mcpTool.ServerDescription);
mcpTool.ServerDescription, mcpTool.Headers);

if (mcpTool.AllowedTools is not null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -147,6 +148,7 @@ private async IAsyncEnumerable<ChatResponseUpdate> GetCachedStreamingResponseAsy
/// <param name="options">The <see cref="ChatOptions"/> to inform the key.</param>
/// <param name="additionalValues">Any other values to inform the key.</param>
/// <returns>The computed key.</returns>
[Experimental("MEAI001")]
protected abstract string GetCacheKey(IEnumerable<ChatMessage> messages, ChatOptions? options, params ReadOnlySpan<object?> additionalValues);

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text.Json;
using System.Threading;
Expand Down Expand Up @@ -132,6 +133,7 @@ protected override async Task WriteCacheStreamingAsync(string key, IReadOnlyList
/// The generated cache key is not guaranteed to be stable across releases of the library.
/// </para>
/// </remarks>
[Experimental("MEAI001")]
protected override string GetCacheKey(IEnumerable<ChatMessage> messages, ChatOptions? options, params ReadOnlySpan<object?> additionalValues)
{
const int FixedValuesCount = 3;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -114,6 +115,7 @@ public override async Task<GeneratedEmbeddings<TEmbedding>> GenerateAsync(
/// <summary>Computes a cache key for the specified values.</summary>
/// <param name="values">The values to inform the key.</param>
/// <returns>The computed key.</returns>
[Experimental("MEAI001")]
protected abstract string GetCacheKey(params ReadOnlySpan<object?> values);

/// <summary>Returns a previously cached <see cref="Embedding{TEmbedding}"/>, if available.</summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
Expand Down Expand Up @@ -108,6 +109,7 @@ protected override async Task WriteCacheAsync(string key, TEmbedding value, Canc
/// The generated cache key is not guaranteed to be stable across releases of the library.
/// </para>
/// </remarks>
[Experimental("MEAI001")]
protected override string GetCacheKey(params ReadOnlySpan<object?> values)
{
const int FixedValuesCount = 1;
Expand Down
Loading
Loading