From 4790bdd85861141b0de634c45c451647b577adc7 Mon Sep 17 00:00:00 2001 From: SergeyMenshykh Date: Mon, 17 Nov 2025 16:05:32 +0000 Subject: [PATCH 1/2] Change type of ContinuationToken properties from object? to ResponseContinuationToken? --- .../ChatCompletion/ChatOptions.cs | 2 +- .../ChatCompletion/ChatResponse.cs | 2 +- .../ChatCompletion/ChatResponseUpdate.cs | 2 +- .../OpenAIResponsesContinuationToken.cs | 9 ++------- .../OpenAIResponseClientIntegrationTests.cs | 2 +- .../OpenAIResponseClientTests.cs | 9 ++------- 6 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatOptions.cs b/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatOptions.cs index 738f724dcd2..fe6ef70187c 100644 --- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatOptions.cs +++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatOptions.cs @@ -197,7 +197,7 @@ protected ChatOptions(ChatOptions? other) /// [Experimental("MEAI001")] [JsonIgnore] - public object? ContinuationToken { get; set; } + public ResponseContinuationToken? ContinuationToken { get; set; } /// /// Gets or sets a callback responsible for creating the raw representation of the chat options from an underlying implementation. diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponse.cs b/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponse.cs index 6f7ca4eeda2..1b535b3a244 100644 --- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponse.cs +++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponse.cs @@ -102,7 +102,7 @@ public IList Messages /// [Experimental("MEAI001")] [JsonIgnore] - public object? ContinuationToken { get; set; } + public ResponseContinuationToken? ContinuationToken { get; set; } /// Gets or sets the raw representation of the chat response from an underlying implementation. /// diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponseUpdate.cs b/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponseUpdate.cs index f1ad70cd22f..22f0dde1530 100644 --- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponseUpdate.cs +++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/ChatCompletion/ChatResponseUpdate.cs @@ -172,7 +172,7 @@ public IList Contents /// [Experimental("MEAI001")] [JsonIgnore] - public object? ContinuationToken { get; set; } + public ResponseContinuationToken? ContinuationToken { get; set; } /// Gets a object to display in the debugger display. [DebuggerBrowsable(DebuggerBrowsableState.Never)] diff --git a/src/Libraries/Microsoft.Extensions.AI.OpenAI/OpenAIResponsesContinuationToken.cs b/src/Libraries/Microsoft.Extensions.AI.OpenAI/OpenAIResponsesContinuationToken.cs index 229f8b40f69..8e6f5ffd71c 100644 --- a/src/Libraries/Microsoft.Extensions.AI.OpenAI/OpenAIResponsesContinuationToken.cs +++ b/src/Libraries/Microsoft.Extensions.AI.OpenAI/OpenAIResponsesContinuationToken.cs @@ -53,19 +53,14 @@ public override ReadOnlyMemory ToBytes() /// /// The token to create the from. /// A equivalent of the provided . - internal static OpenAIResponsesContinuationToken FromToken(object token) + internal static OpenAIResponsesContinuationToken FromToken(ResponseContinuationToken token) { if (token is OpenAIResponsesContinuationToken openAIResponsesContinuationToken) { return openAIResponsesContinuationToken; } - if (token is not ResponseContinuationToken) - { - Throw.ArgumentException(nameof(token), "Failed to create OpenAIResponsesResumptionToken from provided token because it is not of type ResponseContinuationToken."); - } - - ReadOnlyMemory data = ((ResponseContinuationToken)token).ToBytes(); + ReadOnlyMemory data = token.ToBytes(); if (data.Length == 0) { diff --git a/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientIntegrationTests.cs b/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientIntegrationTests.cs index 6a7f82302ea..830563a60e1 100644 --- a/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientIntegrationTests.cs +++ b/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientIntegrationTests.cs @@ -315,7 +315,7 @@ public async Task GetStreamingResponseAsync_BackgroundResponses_StreamResumption int updateNumber = 0; string responseText = ""; - object? continuationToken = null; + ResponseContinuationToken? continuationToken = null; await foreach (var update in ChatClient.GetStreamingResponseAsync("What is the capital of France?", chatOptions)) { diff --git a/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientTests.cs b/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientTests.cs index 299714141fa..0f033185878 100644 --- a/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientTests.cs +++ b/test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientTests.cs @@ -5151,19 +5151,14 @@ internal TestOpenAIResponsesContinuationToken(string responseId) /// Gets or sets the sequence number of a streamed update. internal int? SequenceNumber { get; set; } - internal static TestOpenAIResponsesContinuationToken FromToken(object token) + internal static TestOpenAIResponsesContinuationToken FromToken(ResponseContinuationToken token) { if (token is TestOpenAIResponsesContinuationToken testOpenAIResponsesContinuationToken) { return testOpenAIResponsesContinuationToken; } - if (token is not ResponseContinuationToken) - { - throw new ArgumentException("Failed to create OpenAIResponsesResumptionToken from provided token because it is not of type ResponseContinuationToken.", nameof(token)); - } - - ReadOnlyMemory data = ((ResponseContinuationToken)token).ToBytes(); + ReadOnlyMemory data = token.ToBytes(); Utf8JsonReader reader = new(data.Span); From b1480b9d2ecafda5f8f8504c228160356e717f42 Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Thu, 20 Nov 2025 21:50:31 -0500 Subject: [PATCH 2/2] Fix suppressions --- .../CompatibilitySuppressions.xml | 84 +++++ .../Microsoft.Extensions.AI.Abstractions.json | 354 +----------------- 2 files changed, 85 insertions(+), 353 deletions(-) diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/CompatibilitySuppressions.xml b/src/Libraries/Microsoft.Extensions.AI.Abstractions/CompatibilitySuppressions.xml index 8488d3969c4..993fd3d3ff0 100644 --- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/CompatibilitySuppressions.xml +++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/CompatibilitySuppressions.xml @@ -1,6 +1,27 @@  + + CP0002 + M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken + lib/net462/Microsoft.Extensions.AI.Abstractions.dll + lib/net462/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponse.get_ContinuationToken + lib/net462/Microsoft.Extensions.AI.Abstractions.dll + lib/net462/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponseUpdate.get_ContinuationToken + lib/net462/Microsoft.Extensions.AI.Abstractions.dll + lib/net462/Microsoft.Extensions.AI.Abstractions.dll + true + CP0002 M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers @@ -22,6 +43,27 @@ lib/net462/Microsoft.Extensions.AI.Abstractions.dll true + + CP0002 + M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken + lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll + lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponse.get_ContinuationToken + lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll + lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponseUpdate.get_ContinuationToken + lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll + lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll + true + CP0002 M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers @@ -43,6 +85,27 @@ lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll true + + CP0002 + M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken + lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll + lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponse.get_ContinuationToken + lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll + lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponseUpdate.get_ContinuationToken + lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll + lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll + true + CP0002 M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers @@ -64,6 +127,27 @@ lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll true + + CP0002 + M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken + lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll + lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponse.get_ContinuationToken + lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll + lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll + true + + + CP0002 + M:Microsoft.Extensions.AI.ChatResponseUpdate.get_ContinuationToken + lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll + lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll + true + CP0002 M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json b/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json index b5ef3774b45..26512c88a28 100644 --- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json +++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json @@ -1503,7 +1503,7 @@ }, { "Member": "override string Microsoft.Extensions.AI.DelegatingAIFunction.ToString();", - "Stage": "Experimental" + "Stage": "Stable" } ], "Properties": [ @@ -1609,42 +1609,6 @@ } ] }, - { - "Type": "class Microsoft.Extensions.AI.DelegatingSpeechToTextClient : Microsoft.Extensions.AI.ISpeechToTextClient, System.IDisposable", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.DelegatingSpeechToTextClient.DelegatingSpeechToTextClient(Microsoft.Extensions.AI.ISpeechToTextClient innerClient);", - "Stage": "Experimental" - }, - { - "Member": "void Microsoft.Extensions.AI.DelegatingSpeechToTextClient.Dispose();", - "Stage": "Experimental" - }, - { - "Member": "virtual void Microsoft.Extensions.AI.DelegatingSpeechToTextClient.Dispose(bool disposing);", - "Stage": "Experimental" - }, - { - "Member": "virtual object? Microsoft.Extensions.AI.DelegatingSpeechToTextClient.GetService(System.Type serviceType, object? serviceKey = null);", - "Stage": "Experimental" - }, - { - "Member": "virtual System.Collections.Generic.IAsyncEnumerable Microsoft.Extensions.AI.DelegatingSpeechToTextClient.GetStreamingTextAsync(System.IO.Stream audioSpeechStream, Microsoft.Extensions.AI.SpeechToTextOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - }, - { - "Member": "virtual System.Threading.Tasks.Task Microsoft.Extensions.AI.DelegatingSpeechToTextClient.GetTextAsync(System.IO.Stream audioSpeechStream, Microsoft.Extensions.AI.SpeechToTextOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - } - ], - "Properties": [ - { - "Member": "Microsoft.Extensions.AI.ISpeechToTextClient Microsoft.Extensions.AI.DelegatingSpeechToTextClient.InnerClient { get; }", - "Stage": "Experimental" - } - ] - }, { "Type": "class Microsoft.Extensions.AI.Embedding", "Stage": "Stable", @@ -2085,24 +2049,6 @@ } ] }, - { - "Type": "interface Microsoft.Extensions.AI.ISpeechToTextClient : System.IDisposable", - "Stage": "Experimental", - "Methods": [ - { - "Member": "object? Microsoft.Extensions.AI.ISpeechToTextClient.GetService(System.Type serviceType, object? serviceKey = null);", - "Stage": "Experimental" - }, - { - "Member": "System.Collections.Generic.IAsyncEnumerable Microsoft.Extensions.AI.ISpeechToTextClient.GetStreamingTextAsync(System.IO.Stream audioSpeechStream, Microsoft.Extensions.AI.SpeechToTextOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - }, - { - "Member": "System.Threading.Tasks.Task Microsoft.Extensions.AI.ISpeechToTextClient.GetTextAsync(System.IO.Stream audioSpeechStream, Microsoft.Extensions.AI.SpeechToTextOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - } - ] - }, { "Type": "sealed class Microsoft.Extensions.AI.NoneChatToolMode : Microsoft.Extensions.AI.ChatToolMode", "Stage": "Stable", @@ -2145,304 +2091,6 @@ } ] }, - { - "Type": "static class Microsoft.Extensions.AI.SpeechToTextClientExtensions", - "Stage": "Experimental", - "Methods": [ - { - "Member": "static TService? Microsoft.Extensions.AI.SpeechToTextClientExtensions.GetService(this Microsoft.Extensions.AI.ISpeechToTextClient client, object? serviceKey = null);", - "Stage": "Experimental" - }, - { - "Member": "static System.Collections.Generic.IAsyncEnumerable Microsoft.Extensions.AI.SpeechToTextClientExtensions.GetStreamingTextAsync(this Microsoft.Extensions.AI.ISpeechToTextClient client, Microsoft.Extensions.AI.DataContent audioSpeechContent, Microsoft.Extensions.AI.SpeechToTextOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - }, - { - "Member": "static System.Threading.Tasks.Task Microsoft.Extensions.AI.SpeechToTextClientExtensions.GetTextAsync(this Microsoft.Extensions.AI.ISpeechToTextClient client, Microsoft.Extensions.AI.DataContent audioSpeechContent, Microsoft.Extensions.AI.SpeechToTextOptions? options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - } - ] - }, - { - "Type": "class Microsoft.Extensions.AI.SpeechToTextClientMetadata", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.SpeechToTextClientMetadata.SpeechToTextClientMetadata(string? providerName = null, System.Uri? providerUri = null, string? defaultModelId = null);", - "Stage": "Experimental" - } - ], - "Properties": [ - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextClientMetadata.DefaultModelId { get; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextClientMetadata.ProviderName { get; }", - "Stage": "Experimental" - }, - { - "Member": "System.Uri? Microsoft.Extensions.AI.SpeechToTextClientMetadata.ProviderUri { get; }", - "Stage": "Experimental" - } - ] - }, - { - "Type": "class Microsoft.Extensions.AI.SpeechToTextOptions", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.SpeechToTextOptions.SpeechToTextOptions();", - "Stage": "Experimental" - }, - { - "Member": "virtual Microsoft.Extensions.AI.SpeechToTextOptions Microsoft.Extensions.AI.SpeechToTextOptions.Clone();", - "Stage": "Experimental" - } - ], - "Properties": [ - { - "Member": "Microsoft.Extensions.AI.AdditionalPropertiesDictionary? Microsoft.Extensions.AI.SpeechToTextOptions.AdditionalProperties { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextOptions.ModelId { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.Func? Microsoft.Extensions.AI.SpeechToTextOptions.RawRepresentationFactory { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextOptions.SpeechLanguage { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "int? Microsoft.Extensions.AI.SpeechToTextOptions.SpeechSampleRate { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextOptions.TextLanguage { get; set; }", - "Stage": "Experimental" - } - ] - }, - { - "Type": "class Microsoft.Extensions.AI.SpeechToTextResponse", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponse.SpeechToTextResponse();", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponse.SpeechToTextResponse(System.Collections.Generic.IList contents);", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponse.SpeechToTextResponse(string? content);", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdate[] Microsoft.Extensions.AI.SpeechToTextResponse.ToSpeechToTextResponseUpdates();", - "Stage": "Experimental" - }, - { - "Member": "override string Microsoft.Extensions.AI.SpeechToTextResponse.ToString();", - "Stage": "Experimental" - } - ], - "Properties": [ - { - "Member": "Microsoft.Extensions.AI.AdditionalPropertiesDictionary? Microsoft.Extensions.AI.SpeechToTextResponse.AdditionalProperties { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.Collections.Generic.IList Microsoft.Extensions.AI.SpeechToTextResponse.Contents { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.TimeSpan? Microsoft.Extensions.AI.SpeechToTextResponse.EndTime { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextResponse.ModelId { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "object? Microsoft.Extensions.AI.SpeechToTextResponse.RawRepresentation { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextResponse.ResponseId { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.TimeSpan? Microsoft.Extensions.AI.SpeechToTextResponse.StartTime { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string Microsoft.Extensions.AI.SpeechToTextResponse.Text { get; }", - "Stage": "Experimental" - } - ] - }, - { - "Type": "class Microsoft.Extensions.AI.SpeechToTextResponseUpdate", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdate.SpeechToTextResponseUpdate();", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdate.SpeechToTextResponseUpdate(System.Collections.Generic.IList contents);", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdate.SpeechToTextResponseUpdate(string? content);", - "Stage": "Experimental" - }, - { - "Member": "override string Microsoft.Extensions.AI.SpeechToTextResponseUpdate.ToString();", - "Stage": "Experimental" - } - ], - "Properties": [ - { - "Member": "Microsoft.Extensions.AI.AdditionalPropertiesDictionary? Microsoft.Extensions.AI.SpeechToTextResponseUpdate.AdditionalProperties { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.Collections.Generic.IList Microsoft.Extensions.AI.SpeechToTextResponseUpdate.Contents { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.TimeSpan? Microsoft.Extensions.AI.SpeechToTextResponseUpdate.EndTime { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdate.Kind { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextResponseUpdate.ModelId { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "object? Microsoft.Extensions.AI.SpeechToTextResponseUpdate.RawRepresentation { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string? Microsoft.Extensions.AI.SpeechToTextResponseUpdate.ResponseId { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "System.TimeSpan? Microsoft.Extensions.AI.SpeechToTextResponseUpdate.StartTime { get; set; }", - "Stage": "Experimental" - }, - { - "Member": "string Microsoft.Extensions.AI.SpeechToTextResponseUpdate.Text { get; }", - "Stage": "Experimental" - } - ] - }, - { - "Type": "static class Microsoft.Extensions.AI.SpeechToTextResponseUpdateExtensions", - "Stage": "Experimental", - "Methods": [ - { - "Member": "static Microsoft.Extensions.AI.SpeechToTextResponse Microsoft.Extensions.AI.SpeechToTextResponseUpdateExtensions.ToSpeechToTextResponse(this System.Collections.Generic.IEnumerable updates);", - "Stage": "Experimental" - }, - { - "Member": "static System.Threading.Tasks.Task Microsoft.Extensions.AI.SpeechToTextResponseUpdateExtensions.ToSpeechToTextResponseAsync(this System.Collections.Generic.IAsyncEnumerable updates, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));", - "Stage": "Experimental" - } - ] - }, - { - "Type": "readonly struct Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind : System.IEquatable", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.SpeechToTextResponseUpdateKind(string value);", - "Stage": "Experimental" - }, - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.SpeechToTextResponseUpdateKind();", - "Stage": "Experimental" - }, - { - "Member": "override bool Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Equals(object? obj);", - "Stage": "Experimental" - }, - { - "Member": "bool Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Equals(Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind other);", - "Stage": "Experimental" - }, - { - "Member": "override int Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.GetHashCode();", - "Stage": "Experimental" - }, - { - "Member": "static bool Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.operator ==(Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind left, Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind right);", - "Stage": "Experimental" - }, - { - "Member": "static bool Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.operator !=(Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind left, Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind right);", - "Stage": "Experimental" - }, - { - "Member": "override string Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.ToString();", - "Stage": "Experimental" - } - ], - "Properties": [ - { - "Member": "static Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Error { get; }", - "Stage": "Experimental" - }, - { - "Member": "static Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.SessionClose { get; }", - "Stage": "Experimental" - }, - { - "Member": "static Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.SessionOpen { get; }", - "Stage": "Experimental" - }, - { - "Member": "static Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.TextUpdated { get; }", - "Stage": "Experimental" - }, - { - "Member": "static Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.TextUpdating { get; }", - "Stage": "Experimental" - }, - { - "Member": "string Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Value { get; }", - "Stage": "Experimental" - } - ] - }, - { - "Type": "sealed class Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Converter", - "Stage": "Experimental", - "Methods": [ - { - "Member": "Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Converter.Converter();", - "Stage": "Experimental" - }, - { - "Member": "override Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Converter.Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options);", - "Stage": "Experimental" - }, - { - "Member": "override void Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind.Converter.Write(System.Text.Json.Utf8JsonWriter writer, Microsoft.Extensions.AI.SpeechToTextResponseUpdateKind value, System.Text.Json.JsonSerializerOptions options);", - "Stage": "Experimental" - } - ] - }, { "Type": "sealed class Microsoft.Extensions.AI.TextContent : Microsoft.Extensions.AI.AIContent", "Stage": "Stable",