diff --git a/dotnet/src/dotnetcore/GxClasses/Domain/GxEmbedding.cs b/dotnet/src/dotnetcore/GxClasses/Domain/GxEmbedding.cs index 479e661d7..df7686798 100644 --- a/dotnet/src/dotnetcore/GxClasses/Domain/GxEmbedding.cs +++ b/dotnet/src/dotnetcore/GxClasses/Domain/GxEmbedding.cs @@ -13,19 +13,27 @@ public class GxEmbedding public GxEmbedding() { } + public GxEmbedding(string model, int dimensions) + { + Model = model; + Dimensions = dimensions; + } internal GxEmbedding(IReadOnlyList embedding) { _embedding = embedding; } - public GxEmbedding GenerateEmbedding(string text, string model, string dimensions) + public static GxEmbedding GenerateEmbedding(GxEmbedding embeddingInfo, string text) { - IReadOnlyList embedding = EmbeddingService.Instance.GenerateEmbeddingAsync(model, text).GetAwaiter().GetResult(); + IReadOnlyList embedding = EmbeddingService.Instance.GenerateEmbeddingAsync(embeddingInfo.Model, embeddingInfo.Dimensions, text).GetAwaiter().GetResult(); return new GxEmbedding(embedding); } + + public string Model { get; set; } + public int Dimensions { get; set; } } internal interface IEmbeddingService { - Task> GenerateEmbeddingAsync(string model, string input); + Task> GenerateEmbeddingAsync(string model, int dimensions, string input); } internal class EmbeddingService : IEmbeddingService @@ -65,14 +73,14 @@ internal static EmbeddingService Instance } } - public async Task> GenerateEmbeddingAsync(string model, string input) + public async Task> GenerateEmbeddingAsync(string model, int dimensions, string input) { - IReadOnlyList data = await GenerateEmbeddingAsync(model, new List { input }); + IReadOnlyList data = await GenerateEmbeddingAsync(model, dimensions, new List { input }); return data.First().Embedding; } - public async Task> GenerateEmbeddingAsync(string model, IEnumerable input) + public async Task> GenerateEmbeddingAsync(string model, int dimensions, IEnumerable input) { - EmbeddingsRequest embeddingRequest = new EmbeddingsRequest(input, model); + EmbeddingsRequest embeddingRequest = new EmbeddingsRequest(input, model, null, dimensions); EmbeddingsResponse embeddingResponse = await _openAIClient.EmbeddingsEndpoint.CreateEmbeddingAsync(embeddingRequest); return embeddingResponse.Data; } diff --git a/dotnet/src/dotnetframework/GxClasses/Core/GXUtilsCommon.cs b/dotnet/src/dotnetframework/GxClasses/Core/GXUtilsCommon.cs index 3106475bf..d0f7e1b00 100644 --- a/dotnet/src/dotnetframework/GxClasses/Core/GXUtilsCommon.cs +++ b/dotnet/src/dotnetframework/GxClasses/Core/GXUtilsCommon.cs @@ -612,6 +612,12 @@ public static string BoolToStr(bool value) { return (value ? "true" : "false"); } +#if NETCORE + public static string EmbeddingToStr(GxEmbedding value) + { + return value!=null ? value.ToString() : string.Empty; + } +#endif public static string BoolToStr(short value) { return (value == 1 ? "true" : "false");