openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.0.0-beta.7

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/Custom/Internal/ClientPipelineExtensions.cs

70lines · modecode

1using System.ClientModel;
2using System.ClientModel.Primitives;
3using System.Threading.Tasks;
4
5namespace OpenAI;
6
7internal static partial class ClientPipelineExtensions
8{
9 // CUSTOM:
10 // - Supplemented exception body with deserialized OpenAI error details
11
12 public static async ValueTask<PipelineResponse> ProcessMessageAsync(
13 this ClientPipeline pipeline,
14 PipelineMessage message,
15 RequestOptions options)
16 {
17 await pipeline.SendAsync(message).ConfigureAwait(false);
18
19 if (message.Response.IsError && (options?.ErrorOptions & ClientErrorBehaviors.NoThrow) != ClientErrorBehaviors.NoThrow)
20 {
21 throw await TryBufferResponseAndCreateErrorAsync(message).ConfigureAwait(false) switch
22 {
23 string errorMessage when !string.IsNullOrEmpty(errorMessage)
24 => new ClientResultException(errorMessage, message.Response),
25 _ => new ClientResultException(message.Response),
26 };
27 }
28
29 return message.BufferResponse ?
30 message.Response :
31 message.ExtractResponse();
32 }
33
34 public static PipelineResponse ProcessMessage(
35 this ClientPipeline pipeline,
36 PipelineMessage message,
37 RequestOptions options)
38 {
39 pipeline.Send(message);
40
41 if (message.Response.IsError && (options?.ErrorOptions & ClientErrorBehaviors.NoThrow) != ClientErrorBehaviors.NoThrow)
42 {
43 throw TryBufferResponseAndCreateError(message) switch
44 {
45 string errorMessage when !string.IsNullOrEmpty(errorMessage)
46 => new ClientResultException(errorMessage, message.Response),
47 _ => new ClientResultException(message.Response),
48 };
49 }
50
51 return message.BufferResponse ?
52 message.Response :
53 message.ExtractResponse();
54 }
55
56 private static string TryBufferResponseAndCreateError(PipelineMessage message)
57 {
58 message.Response.BufferContent();
59 return TryCreateErrorMessageFromResponse(message.Response);
60 }
61
62 private static async Task<string> TryBufferResponseAndCreateErrorAsync(PipelineMessage message)
63 {
64 await message.Response.BufferContentAsync().ConfigureAwait(false);
65 return TryCreateErrorMessageFromResponse(message.Response);
66 }
67
68 private static string TryCreateErrorMessageFromResponse(PipelineResponse response)
69 => Internal.OpenAIError.TryCreateFromResponse(response)?.ToExceptionMessage(response.Status);
70}