diff --git a/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceCollectionExtensionsTests.cs b/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceCollectionExtensionsTests.cs
index 041cee3f3cc9..152a968a6bb1 100644
--- a/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceCollectionExtensionsTests.cs
+++ b/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceCollectionExtensionsTests.cs
@@ -12,7 +12,7 @@
namespace SemanticKernel.Connectors.AzureOpenAI.UnitTests.Extensions;
///
-/// Unit tests for class.
+/// Unit tests for the service collection extensions in the class.
///
public sealed class AzureOpenAIServiceCollectionExtensionsTests
{
diff --git a/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceKernelBuilderExtensionsTests.cs b/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceKernelBuilderExtensionsTests.cs
index 6025eb1d447f..13c5d31ce427 100644
--- a/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceKernelBuilderExtensionsTests.cs
+++ b/dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceKernelBuilderExtensionsTests.cs
@@ -12,7 +12,7 @@
namespace SemanticKernel.Connectors.AzureOpenAI.UnitTests.Extensions;
///
-/// Unit tests for class.
+/// Unit tests for the kernel builder extensions in the class.
///
public sealed class AzureOpenAIServiceKernelBuilderExtensionsTests
{
diff --git a/dotnet/src/Connectors/Connectors.AzureOpenAI/Connectors.AzureOpenAI.csproj b/dotnet/src/Connectors/Connectors.AzureOpenAI/Connectors.AzureOpenAI.csproj
index 35c31788610d..29fbd3da46d3 100644
--- a/dotnet/src/Connectors/Connectors.AzureOpenAI/Connectors.AzureOpenAI.csproj
+++ b/dotnet/src/Connectors/Connectors.AzureOpenAI/Connectors.AzureOpenAI.csproj
@@ -21,10 +21,18 @@
Semantic Kernel connectors for Azure OpenAI. Contains clients for text generation, chat completion, embedding and DALL-E text to image.
+
+
+
+
+
+
+
+
diff --git a/dotnet/src/Connectors/Connectors.AzureOpenAI/Services/AzureOpenAITextEmbeddingGenerationService.cs b/dotnet/src/Connectors/Connectors.AzureOpenAI/Services/AzureOpenAITextEmbeddingGenerationService.cs
new file mode 100644
index 000000000000..9119a9005939
--- /dev/null
+++ b/dotnet/src/Connectors/Connectors.AzureOpenAI/Services/AzureOpenAITextEmbeddingGenerationService.cs
@@ -0,0 +1,111 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Azure.AI.OpenAI;
+using Azure.Core;
+using Microsoft.Extensions.Logging;
+using Microsoft.SemanticKernel.Embeddings;
+using Microsoft.SemanticKernel.Services;
+
+namespace Microsoft.SemanticKernel.Connectors.AzureOpenAI;
+
+///
+/// Azure OpenAI text embedding service.
+///
+[Experimental("SKEXP0010")]
+public sealed class AzureOpenAITextEmbeddingGenerationService : ITextEmbeddingGenerationService
+{
+ private readonly AzureOpenAIClientCore _core;
+ private readonly int? _dimensions;
+
+ ///
+ /// Creates a new client instance using API Key auth.
+ ///
+ /// 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
+ /// Azure OpenAI model id, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Custom for HTTP requests.
+ /// The to use for logging. If null, no logging will be performed.
+ /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
+ public AzureOpenAITextEmbeddingGenerationService(
+ string deploymentName,
+ string endpoint,
+ string apiKey,
+ string? modelId = null,
+ HttpClient? httpClient = null,
+ ILoggerFactory? loggerFactory = null,
+ int? dimensions = null)
+ {
+ this._core = new(deploymentName, endpoint, apiKey, httpClient, loggerFactory?.CreateLogger(typeof(AzureOpenAITextEmbeddingGenerationService)));
+
+ this._core.AddAttribute(AIServiceExtensions.ModelIdKey, modelId);
+
+ this._dimensions = dimensions;
+ }
+
+ ///
+ /// Creates a new client instance supporting AAD auth.
+ ///
+ /// 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.
+ /// Azure OpenAI model id, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Custom for HTTP requests.
+ /// The to use for logging. If null, no logging will be performed.
+ /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
+ public AzureOpenAITextEmbeddingGenerationService(
+ string deploymentName,
+ string endpoint,
+ TokenCredential credential,
+ string? modelId = null,
+ HttpClient? httpClient = null,
+ ILoggerFactory? loggerFactory = null,
+ int? dimensions = null)
+ {
+ this._core = new(deploymentName, endpoint, credential, httpClient, loggerFactory?.CreateLogger(typeof(AzureOpenAITextEmbeddingGenerationService)));
+
+ this._core.AddAttribute(AIServiceExtensions.ModelIdKey, modelId);
+
+ this._dimensions = dimensions;
+ }
+
+ ///
+ /// Creates a new client.
+ ///
+ /// Azure OpenAI deployment name, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// Custom for HTTP requests.
+ /// Azure OpenAI model id, see https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
+ /// The to use for logging. If null, no logging will be performed.
+ /// The number of dimensions the resulting output embeddings should have. Only supported in "text-embedding-3" and later models.
+ public AzureOpenAITextEmbeddingGenerationService(
+ string deploymentName,
+ OpenAIClient openAIClient,
+ string? modelId = null,
+ ILoggerFactory? loggerFactory = null,
+ int? dimensions = null)
+ {
+ this._core = new(deploymentName, openAIClient, loggerFactory?.CreateLogger(typeof(AzureOpenAITextEmbeddingGenerationService)));
+
+ this._core.AddAttribute(AIServiceExtensions.ModelIdKey, modelId);
+
+ this._dimensions = dimensions;
+ }
+
+ ///
+ public IReadOnlyDictionary Attributes => this._core.Attributes;
+
+ ///
+ public Task>> GenerateEmbeddingsAsync(
+ IList data,
+ Kernel? kernel = null,
+ CancellationToken cancellationToken = default)
+ {
+ return this._core.GetEmbeddingsAsync(data, kernel, this._dimensions, cancellationToken);
+ }
+}