BotSharp/src/Infrastructure/BotSharp.Core/Infrastructures/LlmProviderService.cs

61 lines
2.1 KiB
C#
Raw Normal View History

2023-12-13 18:12:25 +00:00
using BotSharp.Abstraction.MLTasks;
using BotSharp.Abstraction.MLTasks.Settings;
using BotSharp.Abstraction.Settings;
2023-12-13 18:12:25 +00:00
namespace BotSharp.Core.Infrastructures;
public class LlmProviderService : ILlmProviderService
2023-12-13 18:12:25 +00:00
{
private readonly IServiceProvider _services;
private readonly ILogger _logger;
public LlmProviderService(IServiceProvider services, ILogger<LlmProviderService> logger)
2023-12-13 18:12:25 +00:00
{
_services = services;
_logger = logger;
}
public List<string> GetProviders()
{
var providers = new List<string>();
var services1 = _services.GetServices<ITextCompletion>();
providers.AddRange(services1.Select(x => x.Provider));
var services2 = _services.GetServices<IChatCompletion>();
providers.AddRange(services2.Select(x => x.Provider));
var services3 = _services.GetServices<ITextEmbedding>();
providers.AddRange(services3.Select(x => x.Provider));
return providers.Distinct().ToList();
}
public List<LlmModelSetting> GetProviderModels(string provider)
{
var settingService = _services.GetRequiredService<ISettingService>();
return settingService.Bind<List<LlmProviderSetting>>($"LlmProviders")
.FirstOrDefault(x => x.Provider.Equals(provider))
?.Models ?? new List<LlmModelSetting>();
}
2023-12-13 18:12:25 +00:00
public LlmModelSetting? GetSetting(string provider, string model)
{
var settings = _services.GetRequiredService<List<LlmProviderSetting>>();
var providerSetting = settings.FirstOrDefault(p => p.Provider.Equals(provider, StringComparison.CurrentCultureIgnoreCase));
if (providerSetting == null)
{
_logger.LogError($"Can't find provider settings for {provider}");
return null;
}
var modelSetting = providerSetting.Models.FirstOrDefault(m => m.Name.Equals(model, StringComparison.CurrentCultureIgnoreCase));
if (modelSetting == null)
{
_logger.LogError($"Can't find model settings for {provider}.{model}");
return null;
}
return modelSetting;
}
}