BotSharp/src/Plugins/BotSharp.Plugin.KnowledgeBase/Helpers/KnowledgeSettingHelper.cs
2024-09-11 16:07:17 -05:00

46 lines
1.6 KiB
C#

namespace BotSharp.Plugin.KnowledgeBase.Helpers;
public static class KnowledgeSettingHelper
{
public static ITextEmbedding GetTextEmbeddingSetting(IServiceProvider services, string collectionName)
{
var settings = services.GetRequiredService<KnowledgeBaseSettings>();
var db = services.GetRequiredService<IBotSharpRepository>();
var configs = db.GetKnowledgeCollectionConfigs(new VectorCollectionConfigFilter
{
CollectionNames = [collectionName],
VectorStroageProviders = [settings.VectorDb.Provider]
});
var found = configs?.FirstOrDefault()?.TextEmbedding;
var provider = found?.Provider ?? string.Empty;
var model = found?.Model ?? string.Empty;
var dimension = found?.Dimension ?? 0;
if (found == null)
{
provider = settings.Default.TextEmbedding.Provider;
model = settings.Default.TextEmbedding.Model;
dimension = settings.Default.TextEmbedding.Dimension;
}
var embedding = services.GetServices<ITextEmbedding>().FirstOrDefault(x => x.Provider == provider);
if (dimension <= 0)
{
dimension = GetLlmTextEmbeddingDimension(services, provider, model);
}
embedding.SetModelName(model);
embedding.SetDimension(dimension);
return embedding;
}
private static int GetLlmTextEmbeddingDimension(IServiceProvider services, string provider, string model)
{
var settings = services.GetRequiredService<ILlmProviderService>();
var found = settings.GetSetting(provider, model);
return found?.Dimension ?? 0;
}
}