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 async Task GetVectorAsync(string text) => (await _generator.GenerateEmbeddingVectorAsync(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, }; }