Skip to content

Commit 81107aa

Browse files
committed
Add constructor with AuthenticationPolicy to ChatClient
1 parent 5b5f6f6 commit 81107aa

File tree

4 files changed

+45
-12
lines changed

4 files changed

+45
-12
lines changed

api/OpenAI.net8.0.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,6 +1402,8 @@ public class ChatClient {
14021402
protected internal ChatClient(ClientPipeline pipeline, string model, OpenAIClientOptions options);
14031403
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options);
14041404
public ChatClient(string model, ApiKeyCredential credential);
1405+
public ChatClient(string model, AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options);
1406+
public ChatClient(string model, AuthenticationPolicy authenticationPolicy);
14051407
public ChatClient(string model, string apiKey);
14061408
public ClientPipeline Pipeline { get; }
14071409
public virtual ClientResult<ChatCompletion> CompleteChat(params ChatMessage[] messages);

api/OpenAI.netstandard2.0.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,8 @@ public class ChatClient {
12651265
protected internal ChatClient(ClientPipeline pipeline, string model, OpenAIClientOptions options);
12661266
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options);
12671267
public ChatClient(string model, ApiKeyCredential credential);
1268+
public ChatClient(string model, AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options);
1269+
public ChatClient(string model, AuthenticationPolicy authenticationPolicy);
12681270
public ChatClient(string model, string apiKey);
12691271
public ClientPipeline Pipeline { get; }
12701272
public virtual ClientResult<ChatCompletion> CompleteChat(params ChatMessage[] messages);

src/Custom/Chat/ChatClient.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,35 @@ public partial class ChatClient
6666
/// <param name="options"> The options to configure the client. </param>
6767
/// <exception cref="ArgumentNullException"> <paramref name="model"/> or <paramref name="credential"/> is null. </exception>
6868
/// <exception cref="ArgumentException"> <paramref name="model"/> is an empty string, and was expected to be non-empty. </exception>
69-
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options)
69+
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options) : this(model, OpenAIClient.CreateApiKeyAuthenticationPolicy(credential), options)
70+
{
71+
}
72+
73+
// CUSTOM: Added as a convenience.
74+
/// <summary> Initializes a new instance of <see cref="ChatClient"/>. </summary>
75+
/// <param name="model"> The name of the model to use in requests sent to the service. To learn more about the available models, see <see href="https://platform.openai.com/docs/models"/>. </param>
76+
/// <param name="authenticationPolicy"> The authentication policy used to authenticate with the service. </param>
77+
/// <exception cref="ArgumentNullException"> <paramref name="model"/> or <paramref name="authenticationPolicy"/> is null. </exception>
78+
/// <exception cref="ArgumentException"> <paramref name="model"/> is an empty string, and was expected to be non-empty. </exception>
79+
public ChatClient(string model, AuthenticationPolicy authenticationPolicy) : this(model, authenticationPolicy, new OpenAIClientOptions())
80+
{
81+
}
82+
83+
// CUSTOM: Added as a convenience.
84+
/// <summary> Initializes a new instance of <see cref="ChatClient"/>. </summary>
85+
/// <param name="model"> The name of the model to use in requests sent to the service. To learn more about the available models, see <see href="https://platform.openai.com/docs/models"/>. </param>
86+
/// <param name="authenticationPolicy"> The authentication policy used to authenticate with the service. </param>
87+
/// <param name="options"> The options to configure the client. </param>
88+
/// <exception cref="ArgumentNullException"> <paramref name="model"/> or <paramref name="authenticationPolicy"/> is null. </exception>
89+
/// <exception cref="ArgumentException"> <paramref name="model"/> is an empty string, and was expected to be non-empty. </exception>
90+
public ChatClient(string model, AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options)
7091
{
7192
Argument.AssertNotNullOrEmpty(model, nameof(model));
72-
Argument.AssertNotNull(credential, nameof(credential));
93+
Argument.AssertNotNull(authenticationPolicy, nameof(authenticationPolicy));
7394
options ??= new OpenAIClientOptions();
7495

7596
_model = model;
76-
Pipeline = OpenAIClient.CreatePipeline(credential, options);
97+
Pipeline = OpenAIClient.CreatePipeline(authenticationPolicy, options);
7798
_endpoint = OpenAIClient.GetEndpoint(options);
7899
_telemetry = new OpenTelemetrySource(model, _endpoint);
79100
}

src/Custom/OpenAIClient.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -316,18 +316,26 @@ protected internal OpenAIClient(ClientPipeline pipeline, OpenAIClientOptions opt
316316
[Experimental("OPENAI001")]
317317
public virtual ContainerClient GetContainerClient() => new(Pipeline, _options);
318318

319+
internal static AuthenticationPolicy CreateApiKeyAuthenticationPolicy(ApiKeyCredential credential)
320+
{
321+
Argument.AssertNotNull(credential, nameof(credential));
322+
return ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix);
323+
}
324+
319325
internal static ClientPipeline CreatePipeline(ApiKeyCredential credential, OpenAIClientOptions options)
326+
{
327+
return CreatePipeline(
328+
authenticationPolicy: ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix),
329+
options);
330+
}
331+
332+
internal static ClientPipeline CreatePipeline(AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options)
320333
{
321334
return ClientPipeline.Create(
322-
options,
323-
perCallPolicies: [
324-
CreateAddCustomHeadersPolicy(options),
325-
],
326-
perTryPolicies: [
327-
ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix)
328-
],
329-
beforeTransportPolicies: [
330-
]);
335+
options: options,
336+
perCallPolicies: [CreateAddCustomHeadersPolicy(options)],
337+
perTryPolicies: [authenticationPolicy],
338+
beforeTransportPolicies: []);
331339
}
332340

333341
internal static Uri GetEndpoint(OpenAIClientOptions options = null)

0 commit comments

Comments
 (0)