BotSharp/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Embedding/TextEmbeddingProvider.cs

77 lines
2.2 KiB
C#
Raw Normal View History

2024-07-01 02:14:02 +00:00
using OpenAI.Embeddings;
namespace BotSharp.Plugin.AzureOpenAI.Providers.Embedding;
public class TextEmbeddingProvider : ITextEmbedding
{
protected readonly AzureOpenAiSettings _settings;
protected readonly IServiceProvider _services;
protected readonly ILogger<TextEmbeddingProvider> _logger;
private const int DEFAULT_DIMENSION = 1536;
2024-07-01 02:14:02 +00:00
protected string _model;
2024-08-22 20:23:22 +00:00
protected int _dimension;
2024-07-01 02:14:02 +00:00
public virtual string Provider => "azure-openai";
2025-03-05 23:22:46 +00:00
public string Model => _model;
2024-07-01 02:14:02 +00:00
public TextEmbeddingProvider(
AzureOpenAiSettings settings,
ILogger<TextEmbeddingProvider> logger,
IServiceProvider services)
{
_settings = settings;
_logger = logger;
_services = services;
}
public async Task<float[]> GetVectorAsync(string text)
{
var client = ProviderHelper.GetClient(Provider, _model, _services);
var embeddingClient = client.GetEmbeddingClient(_model);
var options = PrepareOptions();
var response = await embeddingClient.GenerateEmbeddingAsync(text, options);
var value = response.Value;
2024-10-02 18:00:23 +00:00
return value.ToFloats().ToArray();
2024-07-01 02:14:02 +00:00
}
public async Task<List<float[]>> GetVectorsAsync(List<string> texts)
{
var client = ProviderHelper.GetClient(Provider, _model, _services);
var embeddingClient = client.GetEmbeddingClient(_model);
var options = PrepareOptions();
var response = await embeddingClient.GenerateEmbeddingsAsync(texts, options);
var value = response.Value;
2024-10-02 18:00:23 +00:00
return value.Select(x => x.ToFloats().ToArray()).ToList();
2024-07-01 02:14:02 +00:00
}
public void SetModelName(string model)
{
_model = model;
}
2025-03-05 23:22:46 +00:00
2024-08-22 20:23:22 +00:00
public void SetDimension(int dimension)
{
_dimension = dimension > 0 ? dimension : DEFAULT_DIMENSION;
}
public int GetDimension()
{
return _dimension;
}
2024-07-01 02:14:02 +00:00
private EmbeddingGenerationOptions PrepareOptions()
{
return new EmbeddingGenerationOptions
{
2024-08-22 20:23:22 +00:00
Dimensions = GetDimensionOption()
2024-07-01 02:14:02 +00:00
};
}
2024-08-22 20:23:22 +00:00
private int GetDimensionOption()
2024-07-01 02:14:02 +00:00
{
2024-08-22 20:23:22 +00:00
return _dimension > 0 ? _dimension : DEFAULT_DIMENSION;
2024-07-01 02:14:02 +00:00
}
}