Skip to content

Commit

Permalink
Merge pull request #316 from Almis90/master
Browse files Browse the repository at this point in the history
Add fallback method for HttpClient.Send on unsupported platforms
  • Loading branch information
kayhantolga authored Aug 6, 2023
2 parents e678e07 + 493865f commit d12a3bb
Showing 1 changed file with 26 additions and 5 deletions.
31 changes: 26 additions & 5 deletions OpenAI.SDK/Extensions/HttpclientExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,38 @@ public static HttpResponseMessage PostAsStreamAsync(this HttpClient client, stri

var content = JsonContent.Create(requestModel, null, settings);

using var request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
request.Content = content;
using var request = CreatePostEventStreamRequest(uri, content);

#if NET6_0_OR_GREATER
return client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
try
{
return client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
}
catch (PlatformNotSupportedException)
{
using var newRequest = CreatePostEventStreamRequest(uri, content);

return SendRequestPreNet6(client, newRequest, cancellationToken);
}
#else
return SendRequestPreNet6(client, request, cancellationToken);
#endif
}

private static HttpResponseMessage SendRequestPreNet6(HttpClient client, HttpRequestMessage request, CancellationToken cancellationToken)
{
var responseTask = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
var response = responseTask.GetAwaiter().GetResult();
return response;
#endif
}

private static HttpRequestMessage CreatePostEventStreamRequest(string uri, HttpContent content)
{
var request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
request.Content = content;

return request;
}

public static async Task<TResponse> PostFileAndReadAsAsync<TResponse>(this HttpClient client, string uri, HttpContent content, CancellationToken cancellationToken = default)
Expand Down

0 comments on commit d12a3bb

Please sign in to comment.