diff --git a/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIKernelBuilderExtensions.cs b/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIKernelBuilderExtensions.cs
new file mode 100644
index 000000000000..0a391e4693c0
--- /dev/null
+++ b/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIKernelBuilderExtensions.cs
@@ -0,0 +1,256 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Net.Http;
+using Azure;
+using Azure.AI.OpenAI;
+using Azure.Core;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Microsoft.SemanticKernel.ChatCompletion;
+using Microsoft.SemanticKernel.Connectors.AzureOpenAI;
+using Microsoft.SemanticKernel.Embeddings;
+using Microsoft.SemanticKernel.Http;
+using Microsoft.SemanticKernel.TextGeneration;
+
+#pragma warning disable IDE0039 // Use local function
+
+namespace Microsoft.SemanticKernel;
+
+///
+/// Provides extension methods for to configure Azure OpenAI connectors.
+///
+public static class AzureOpenAIKernelBuilderExtensions
+{
+ #region Chat Completion
+
+ ///
+ /// Adds the Azure OpenAI chat completion service to the list.
+ ///
+ /// The instance to augment.
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// Azure OpenAI API key, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// A local identifier for the given AI service
+ /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// The HttpClient to use with this service.
+ /// The same instance as .
+ public static IKernelBuilder AddAzureOpenAIChatCompletion(
+ this IKernelBuilder builder,
+ string deploymentName,
+ string endpoint,
+ string apiKey,
+ string? serviceId = null,
+ string? modelId = null,
+ HttpClient? httpClient = null)
+ {
+ Verify.NotNull(builder);
+ Verify.NotNullOrWhiteSpace(endpoint);
+ Verify.NotNullOrWhiteSpace(apiKey);
+
+ Func factory = (serviceProvider, _) =>
+ {
+ AzureOpenAIClient client = CreateAzureOpenAIClient(
+ endpoint,
+ new AzureKeyCredential(apiKey),
+ HttpClientProvider.GetHttpClient(httpClient, serviceProvider));
+
+ return new(deploymentName, client, modelId, serviceProvider.GetService());
+ };
+
+ builder.Services.AddKeyedSingleton(serviceId, factory);
+ builder.Services.AddKeyedSingleton(serviceId, factory);
+
+ return builder;
+ }
+
+ ///
+ /// Adds the Azure OpenAI chat completion service to the list.
+ ///
+ /// The instance to augment.
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// Token credentials, e.g. DefaultAzureCredential, ManagedIdentityCredential, EnvironmentCredential, etc.
+ /// A local identifier for the given AI service
+ /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// The HttpClient to use with this service.
+ /// The same instance as .
+ public static IKernelBuilder AddAzureOpenAIChatCompletion(
+ this IKernelBuilder builder,
+ string deploymentName,
+ string endpoint,
+ TokenCredential credentials,
+ string? serviceId = null,
+ string? modelId = null,
+ HttpClient? httpClient = null)
+ {
+ Verify.NotNull(builder);
+ Verify.NotNullOrWhiteSpace(endpoint);
+ Verify.NotNull(credentials);
+
+ Func factory = (serviceProvider, _) =>
+ {
+ AzureOpenAIClient client = CreateAzureOpenAIClient(
+ endpoint,
+ credentials,
+ HttpClientProvider.GetHttpClient(httpClient, serviceProvider));
+
+ return new(deploymentName, client, modelId, serviceProvider.GetService());
+ };
+
+ builder.Services.AddKeyedSingleton(serviceId, factory);
+ builder.Services.AddKeyedSingleton(serviceId, factory);
+
+ return builder;
+ }
+
+ ///
+ /// Adds the Azure OpenAI chat completion service to the list.
+ ///
+ /// The instance to augment.
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// to use for the service. If null, one must be available in the service provider when this service is resolved.
+ /// A local identifier for the given AI service
+ /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// The same instance as .
+ public static IKernelBuilder AddAzureOpenAIChatCompletion(
+ this IKernelBuilder builder,
+ string deploymentName,
+ AzureOpenAIClient? azureOpenAIClient = null,
+ string? serviceId = null,
+ string? modelId = null)
+ {
+ Verify.NotNull(builder);
+ Verify.NotNullOrWhiteSpace(deploymentName);
+
+ Func factory = (serviceProvider, _) =>
+ new(deploymentName, azureOpenAIClient ?? serviceProvider.GetRequiredService(), modelId, serviceProvider.GetService());
+
+ builder.Services.AddKeyedSingleton(serviceId, factory);
+ builder.Services.AddKeyedSingleton(serviceId, factory);
+
+ return builder;
+ }
+
+ #endregion
+
+ #region Text Embedding
+
+ ///
+ /// Adds an Azure OpenAI text embeddings service to the list.
+ ///
+ /// The instance to augment.
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// Azure OpenAI API key, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// A local identifier for the given AI service
+ /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// The HttpClient to use with this service.
+ /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
+ /// The same instance as .
+ [Experimental("SKEXP0010")]
+ public static IKernelBuilder AddAzureOpenAITextEmbeddingGeneration(
+ this IKernelBuilder builder,
+ string deploymentName,
+ string endpoint,
+ string apiKey,
+ string? serviceId = null,
+ string? modelId = null,
+ HttpClient? httpClient = null,
+ int? dimensions = null)
+ {
+ Verify.NotNull(builder);
+
+ builder.Services.AddKeyedSingleton(serviceId, (serviceProvider, _) =>
+ new AzureOpenAITextEmbeddingGenerationService(
+ deploymentName,
+ endpoint,
+ apiKey,
+ modelId,
+ HttpClientProvider.GetHttpClient(httpClient, serviceProvider),
+ serviceProvider.GetService(),
+ dimensions));
+
+ return builder;
+ }
+
+ ///
+ /// Adds an Azure OpenAI text embeddings service to the list.
+ ///
+ /// The instance to augment.
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// Token credentials, e.g. DefaultAzureCredential, ManagedIdentityCredential, EnvironmentCredential, etc.
+ /// A local identifier for the given AI service
+ /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// The HttpClient to use with this service.
+ /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
+ /// The same instance as .
+ [Experimental("SKEXP0010")]
+ public static IKernelBuilder AddAzureOpenAITextEmbeddingGeneration(
+ this IKernelBuilder builder,
+ string deploymentName,
+ string endpoint,
+ TokenCredential credential,
+ string? serviceId = null,
+ string? modelId = null,
+ HttpClient? httpClient = null,
+ int? dimensions = null)
+ {
+ Verify.NotNull(builder);
+ Verify.NotNull(credential);
+
+ builder.Services.AddKeyedSingleton(serviceId, (serviceProvider, _) =>
+ new AzureOpenAITextEmbeddingGenerationService(
+ deploymentName,
+ endpoint,
+ credential,
+ modelId,
+ HttpClientProvider.GetHttpClient(httpClient, serviceProvider),
+ serviceProvider.GetService(),
+ dimensions));
+
+ return builder;
+ }
+
+ ///
+ /// Adds an Azure OpenAI text embeddings service to the list.
+ ///
+ /// The instance to augment.
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// to use for the service. If null, one must be available in the service provider when this service is resolved.
+ /// A local identifier for the given AI service
+ /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
+ /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
+ /// The same instance as .
+ [Experimental("SKEXP0010")]
+ public static IKernelBuilder AddAzureOpenAITextEmbeddingGeneration(
+ this IKernelBuilder builder,
+ string deploymentName,
+ AzureOpenAIClient? azureOpenAIClient = null,
+ string? serviceId = null,
+ string? modelId = null,
+ int? dimensions = null)
+ {
+ Verify.NotNull(builder);
+
+ builder.Services.AddKeyedSingleton(serviceId, (serviceProvider, _) =>
+ new AzureOpenAITextEmbeddingGenerationService(
+ deploymentName,
+ azureOpenAIClient ?? serviceProvider.GetRequiredService(),
+ modelId,
+ serviceProvider.GetService(),
+ dimensions));
+
+ return builder;
+ }
+
+ #endregion
+
+ private static AzureOpenAIClient CreateAzureOpenAIClient(string endpoint, AzureKeyCredential credentials, HttpClient? httpClient) =>
+ new(new Uri(endpoint), credentials, ClientCore.GetAzureOpenAIClientOptions(httpClient));
+
+ private static AzureOpenAIClient CreateAzureOpenAIClient(string endpoint, TokenCredential credentials, HttpClient? httpClient) =>
+ new(new Uri(endpoint), credentials, ClientCore.GetAzureOpenAIClientOptions(httpClient));
+}
diff --git a/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIServiceCollectionExtensions.cs b/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIServiceCollectionExtensions.cs
index e25eac02789b..0c719ed8b249 100644
--- a/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIServiceCollectionExtensions.cs
+++ b/dotnet/src/Connectors/Connectors.AzureOpenAI/Extensions/AzureOpenAIServiceCollectionExtensions.cs
@@ -19,52 +19,12 @@
namespace Microsoft.SemanticKernel;
///
-/// Provides extension methods for and related classes to configure Azure OpenAI connectors.
+/// Provides extension methods for to configure Azure OpenAI connectors.
///
public static class AzureOpenAIServiceCollectionExtensions
{
#region Chat Completion
- ///
- /// Adds the Azure OpenAI chat completion service to the list.
- ///
- /// The instance to augment.
- /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
- /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// Azure OpenAI API key, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// A local identifier for the given AI service
- /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// The HttpClient to use with this service.
- /// The same instance as .
- public static IKernelBuilder AddAzureOpenAIChatCompletion(
- this IKernelBuilder builder,
- string deploymentName,
- string endpoint,
- string apiKey,
- string? serviceId = null,
- string? modelId = null,
- HttpClient? httpClient = null)
- {
- Verify.NotNull(builder);
- Verify.NotNullOrWhiteSpace(endpoint);
- Verify.NotNullOrWhiteSpace(apiKey);
-
- Func factory = (serviceProvider, _) =>
- {
- AzureOpenAIClient client = CreateAzureOpenAIClient(
- endpoint,
- new AzureKeyCredential(apiKey),
- HttpClientProvider.GetHttpClient(httpClient, serviceProvider));
-
- return new(deploymentName, client, modelId, serviceProvider.GetService());
- };
-
- builder.Services.AddKeyedSingleton(serviceId, factory);
- builder.Services.AddKeyedSingleton(serviceId, factory);
-
- return builder;
- }
-
///
/// Adds the Azure OpenAI chat completion service to the list.
///
@@ -103,46 +63,6 @@ public static IServiceCollection AddAzureOpenAIChatCompletion(
return services;
}
- ///
- /// Adds the Azure OpenAI chat completion service to the list.
- ///
- /// The instance to augment.
- /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
- /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// Token credentials, e.g. DefaultAzureCredential, ManagedIdentityCredential, EnvironmentCredential, etc.
- /// A local identifier for the given AI service
- /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// The HttpClient to use with this service.
- /// The same instance as .
- public static IKernelBuilder AddAzureOpenAIChatCompletion(
- this IKernelBuilder builder,
- string deploymentName,
- string endpoint,
- TokenCredential credentials,
- string? serviceId = null,
- string? modelId = null,
- HttpClient? httpClient = null)
- {
- Verify.NotNull(builder);
- Verify.NotNullOrWhiteSpace(endpoint);
- Verify.NotNull(credentials);
-
- Func factory = (serviceProvider, _) =>
- {
- AzureOpenAIClient client = CreateAzureOpenAIClient(
- endpoint,
- credentials,
- HttpClientProvider.GetHttpClient(httpClient, serviceProvider));
-
- return new(deploymentName, client, modelId, serviceProvider.GetService());
- };
-
- builder.Services.AddKeyedSingleton(serviceId, factory);
- builder.Services.AddKeyedSingleton(serviceId, factory);
-
- return builder;
- }
-
///
/// Adds the Azure OpenAI chat completion service to the list.
///
@@ -181,34 +101,6 @@ public static IServiceCollection AddAzureOpenAIChatCompletion(
return services;
}
- ///
- /// Adds the Azure OpenAI chat completion service to the list.
- ///
- /// The instance to augment.
- /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
- /// to use for the service. If null, one must be available in the service provider when this service is resolved.
- /// A local identifier for the given AI service
- /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// The same instance as .
- public static IKernelBuilder AddAzureOpenAIChatCompletion(
- this IKernelBuilder builder,
- string deploymentName,
- AzureOpenAIClient? azureOpenAIClient = null,
- string? serviceId = null,
- string? modelId = null)
- {
- Verify.NotNull(builder);
- Verify.NotNullOrWhiteSpace(deploymentName);
-
- Func factory = (serviceProvider, _) =>
- new(deploymentName, azureOpenAIClient ?? serviceProvider.GetRequiredService(), modelId, serviceProvider.GetService());
-
- builder.Services.AddKeyedSingleton(serviceId, factory);
- builder.Services.AddKeyedSingleton(serviceId, factory);
-
- return builder;
- }
-
///
/// Adds the Azure OpenAI chat completion service to the list.
///
@@ -241,44 +133,6 @@ public static IServiceCollection AddAzureOpenAIChatCompletion(
#region Text Embedding
- ///
- /// Adds an Azure OpenAI text embeddings service to the list.
- ///
- /// The instance to augment.
- /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
- /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// Azure OpenAI API key, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// A local identifier for the given AI service
- /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// The HttpClient to use with this service.
- /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
- /// The same instance as .
- [Experimental("SKEXP0010")]
- public static IKernelBuilder AddAzureOpenAITextEmbeddingGeneration(
- this IKernelBuilder builder,
- string deploymentName,
- string endpoint,
- string apiKey,
- string? serviceId = null,
- string? modelId = null,
- HttpClient? httpClient = null,
- int? dimensions = null)
- {
- Verify.NotNull(builder);
-
- builder.Services.AddKeyedSingleton(serviceId, (serviceProvider, _) =>
- new AzureOpenAITextEmbeddingGenerationService(
- deploymentName,
- endpoint,
- apiKey,
- modelId,
- HttpClientProvider.GetHttpClient(httpClient, serviceProvider),
- serviceProvider.GetService(),
- dimensions));
-
- return builder;
- }
-
///
/// Adds an Azure OpenAI text embeddings service to the list.
///
@@ -313,45 +167,6 @@ public static IServiceCollection AddAzureOpenAITextEmbeddingGeneration(
dimensions));
}
- ///
- /// Adds an Azure OpenAI text embeddings service to the list.
- ///
- /// The instance to augment.
- /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
- /// Azure OpenAI deployment URL, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// Token credentials, e.g. DefaultAzureCredential, ManagedIdentityCredential, EnvironmentCredential, etc.
- /// A local identifier for the given AI service
- /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// The HttpClient to use with this service.
- /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
- /// The same instance as .
- [Experimental("SKEXP0010")]
- public static IKernelBuilder AddAzureOpenAITextEmbeddingGeneration(
- this IKernelBuilder builder,
- string deploymentName,
- string endpoint,
- TokenCredential credential,
- string? serviceId = null,
- string? modelId = null,
- HttpClient? httpClient = null,
- int? dimensions = null)
- {
- Verify.NotNull(builder);
- Verify.NotNull(credential);
-
- builder.Services.AddKeyedSingleton(serviceId, (serviceProvider, _) =>
- new AzureOpenAITextEmbeddingGenerationService(
- deploymentName,
- endpoint,
- credential,
- modelId,
- HttpClientProvider.GetHttpClient(httpClient, serviceProvider),
- serviceProvider.GetService(),
- dimensions));
-
- return builder;
- }
-
///
/// Adds an Azure OpenAI text embeddings service to the list.
///
@@ -387,38 +202,6 @@ public static IServiceCollection AddAzureOpenAITextEmbeddingGeneration(
dimensions));
}
- ///
- /// Adds an Azure OpenAI text embeddings service to the list.
- ///
- /// The instance to augment.
- /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
- /// to use for the service. If null, one must be available in the service provider when this service is resolved.
- /// A local identifier for the given AI service
- /// Model identifier, see https://learn.microsoft.com/azure/cognitive-services/openai/quickstart
- /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
- /// The same instance as .
- [Experimental("SKEXP0010")]
- public static IKernelBuilder AddAzureOpenAITextEmbeddingGeneration(
- this IKernelBuilder builder,
- string deploymentName,
- AzureOpenAIClient? azureOpenAIClient = null,
- string? serviceId = null,
- string? modelId = null,
- int? dimensions = null)
- {
- Verify.NotNull(builder);
-
- builder.Services.AddKeyedSingleton(serviceId, (serviceProvider, _) =>
- new AzureOpenAITextEmbeddingGenerationService(
- deploymentName,
- azureOpenAIClient ?? serviceProvider.GetRequiredService(),
- modelId,
- serviceProvider.GetService(),
- dimensions));
-
- return builder;
- }
-
///
/// Adds an Azure OpenAI text embeddings service to the list.
///