From 5136061a746b81d93223e261bf43a4bc76f41491 Mon Sep 17 00:00:00 2001 From: SergeyMenshykh Date: Sat, 11 Oct 2025 11:58:44 +0100 Subject: [PATCH 1/2] add internal overloads for GetResponse{Streaming}Async methods --- src/Custom/Responses/OpenAIResponseClient.cs | 28 +++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Custom/Responses/OpenAIResponseClient.cs b/src/Custom/Responses/OpenAIResponseClient.cs index 55c7db9ba..1b0cb366c 100644 --- a/src/Custom/Responses/OpenAIResponseClient.cs +++ b/src/Custom/Responses/OpenAIResponseClient.cs @@ -228,11 +228,21 @@ public virtual CollectionResult CreateResponseStreaming cancellationToken); } - public virtual async Task> GetResponseAsync(string responseId, CancellationToken cancellationToken = default) + public virtual Task> GetResponseAsync(string responseId, CancellationToken cancellationToken = default) + { + return GetResponseAsync(responseId, cancellationToken.ToRequestOptions() ?? new RequestOptions()); + } + + internal async Task> GetResponseAsync(string responseId, RequestOptions requestOptions) { Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + Argument.AssertNotNull(requestOptions, nameof(requestOptions)); + if (requestOptions.BufferResponse is false) + { + throw new InvalidOperationException("'requestOptions.BufferResponse' must be 'true' when calling 'GetResponseAsync'."); + } - ClientResult protocolResult = await GetResponseAsync(responseId, stream: null, startingAfter: null, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + ClientResult protocolResult = await GetResponseAsync(responseId, stream: null, startingAfter: null, requestOptions).ConfigureAwait(false); OpenAIResponse convenienceResult = (OpenAIResponse)protocolResult; return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); } @@ -247,13 +257,23 @@ public virtual ClientResult GetResponse(string responseId, Cance } public virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default) + { + return GetResponseStreamingAsync(responseId, cancellationToken.ToRequestOptions(streaming: true), startingAfter); + } + + internal virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, RequestOptions requestOptions, int? startingAfter = null) { Argument.AssertNotNull(responseId, nameof(responseId)); + Argument.AssertNotNull(requestOptions, nameof(requestOptions)); + if (requestOptions.BufferResponse is true) + { + throw new InvalidOperationException("'requestOptions.BufferResponse' must be 'false' when calling 'GetResponseStreamingAsync'."); + } return new AsyncSseUpdateCollection( - async () => await GetResponseAsync(responseId, stream: true, startingAfter, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + async () => await GetResponseAsync(responseId, stream: true, startingAfter, requestOptions).ConfigureAwait(false), StreamingResponseUpdate.DeserializeStreamingResponseUpdate, - cancellationToken); + requestOptions.CancellationToken); } public virtual CollectionResult GetResponseStreaming(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default) From e9c7dc101ae5322be0956faf8c36d3ea8db40703 Mon Sep 17 00:00:00 2001 From: SergeyMenshykh Date: Sat, 11 Oct 2025 12:06:01 +0100 Subject: [PATCH 2/2] remove async from internal GetResponseStreaming --- src/Custom/Responses/OpenAIResponseClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Custom/Responses/OpenAIResponseClient.cs b/src/Custom/Responses/OpenAIResponseClient.cs index 1b0cb366c..57183d55c 100644 --- a/src/Custom/Responses/OpenAIResponseClient.cs +++ b/src/Custom/Responses/OpenAIResponseClient.cs @@ -261,7 +261,7 @@ public virtual AsyncCollectionResult GetResponseStreami return GetResponseStreamingAsync(responseId, cancellationToken.ToRequestOptions(streaming: true), startingAfter); } - internal virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, RequestOptions requestOptions, int? startingAfter = null) + internal AsyncCollectionResult GetResponseStreamingAsync(string responseId, RequestOptions requestOptions, int? startingAfter = null) { Argument.AssertNotNull(responseId, nameof(responseId)); Argument.AssertNotNull(requestOptions, nameof(requestOptions));