Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions api/OpenAI.net8.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1402,6 +1402,8 @@ public class ChatClient {
protected internal ChatClient(ClientPipeline pipeline, string model, OpenAIClientOptions options);
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options);
public ChatClient(string model, ApiKeyCredential credential);
public ChatClient(string model, AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options);
public ChatClient(string model, AuthenticationPolicy authenticationPolicy);
public ChatClient(string model, string apiKey);
public ClientPipeline Pipeline { get; }
public virtual ClientResult<ChatCompletion> CompleteChat(params ChatMessage[] messages);
Expand Down
2 changes: 2 additions & 0 deletions api/OpenAI.netstandard2.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1265,6 +1265,8 @@ public class ChatClient {
protected internal ChatClient(ClientPipeline pipeline, string model, OpenAIClientOptions options);
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options);
public ChatClient(string model, ApiKeyCredential credential);
public ChatClient(string model, AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options);
public ChatClient(string model, AuthenticationPolicy authenticationPolicy);
public ChatClient(string model, string apiKey);
public ClientPipeline Pipeline { get; }
public virtual ClientResult<ChatCompletion> CompleteChat(params ChatMessage[] messages);
Expand Down
27 changes: 24 additions & 3 deletions src/Custom/Chat/ChatClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,35 @@ public partial class ChatClient
/// <param name="options"> The options to configure the client. </param>
/// <exception cref="ArgumentNullException"> <paramref name="model"/> or <paramref name="credential"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="model"/> is an empty string, and was expected to be non-empty. </exception>
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options)
public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options) : this(model, OpenAIClient.CreateApiKeyAuthenticationPolicy(credential), options)
{
}

// CUSTOM: Added as a convenience.
/// <summary> Initializes a new instance of <see cref="ChatClient"/>. </summary>
/// <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>
/// <param name="authenticationPolicy"> The authentication policy used to authenticate with the service. </param>
/// <exception cref="ArgumentNullException"> <paramref name="model"/> or <paramref name="authenticationPolicy"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="model"/> is an empty string, and was expected to be non-empty. </exception>
public ChatClient(string model, AuthenticationPolicy authenticationPolicy) : this(model, authenticationPolicy, new OpenAIClientOptions())
{
}

// CUSTOM: Added as a convenience.
/// <summary> Initializes a new instance of <see cref="ChatClient"/>. </summary>
/// <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>
/// <param name="authenticationPolicy"> The authentication policy used to authenticate with the service. </param>
/// <param name="options"> The options to configure the client. </param>
/// <exception cref="ArgumentNullException"> <paramref name="model"/> or <paramref name="authenticationPolicy"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="model"/> is an empty string, and was expected to be non-empty. </exception>
public ChatClient(string model, AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options)
{
Argument.AssertNotNullOrEmpty(model, nameof(model));
Argument.AssertNotNull(credential, nameof(credential));
Argument.AssertNotNull(authenticationPolicy, nameof(authenticationPolicy));
options ??= new OpenAIClientOptions();

_model = model;
Pipeline = OpenAIClient.CreatePipeline(credential, options);
Pipeline = OpenAIClient.CreatePipeline(authenticationPolicy, options);
_endpoint = OpenAIClient.GetEndpoint(options);
_telemetry = new OpenTelemetrySource(model, _endpoint);
}
Expand Down
26 changes: 17 additions & 9 deletions src/Custom/OpenAIClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -316,18 +316,26 @@ protected internal OpenAIClient(ClientPipeline pipeline, OpenAIClientOptions opt
[Experimental("OPENAI001")]
public virtual ContainerClient GetContainerClient() => new(Pipeline, _options);

internal static AuthenticationPolicy CreateApiKeyAuthenticationPolicy(ApiKeyCredential credential)
{
Argument.AssertNotNull(credential, nameof(credential));
return ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix);
}

internal static ClientPipeline CreatePipeline(ApiKeyCredential credential, OpenAIClientOptions options)
{
return CreatePipeline(
authenticationPolicy: ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix),
options);
}

internal static ClientPipeline CreatePipeline(AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options)
{
return ClientPipeline.Create(
options,
perCallPolicies: [
CreateAddCustomHeadersPolicy(options),
],
perTryPolicies: [
ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix)
],
beforeTransportPolicies: [
]);
options: options,
perCallPolicies: [CreateAddCustomHeadersPolicy(options)],
perTryPolicies: [authenticationPolicy],
beforeTransportPolicies: []);
}

internal static Uri GetEndpoint(OpenAIClientOptions options = null)
Expand Down