using BotSharp.Abstraction.MLTasks;
using Microsoft.Extensions.AI;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BotSharp.Plugin.MicrosoftExtensionsAI;
///
/// Provides an implementation of for Microsoft.Extensions.AI.
///
public sealed class MicrosoftExtensionsAITextEmbeddingProvider : ITextEmbedding
{
private readonly IEmbeddingGenerator> _generator;
private string? _model;
private int? _dimensions;
///
/// Creates an instance of the class.
///
public MicrosoftExtensionsAITextEmbeddingProvider(IEmbeddingGenerator> generator) =>
_generator = generator;
///
public string Provider => "microsoft-extensions-ai";
public string Model => _model;
///
public async Task GetVectorAsync(string text) =>
(await _generator.GenerateVectorAsync(text, CreateOptions())).ToArray();
///
public async Task> GetVectorsAsync(List texts)
{
var embeddings = await _generator.GenerateAsync(texts, CreateOptions());
return embeddings.Select(e => e.Vector.ToArray()).ToList();
}
///
public void SetModelName(string model) => _model = model;
///
public void SetDimension(int dimension)
{
if (dimension > 0)
{
_dimensions = dimension;
}
}
///
public int GetDimension() => _dimensions ?? 0;
private EmbeddingGenerationOptions CreateOptions() =>
new()
{
ModelId = _model,
Dimensions = _dimensions,
};
}