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

111 lines
3.6 KiB
C#
Raw Normal View History

2023-09-09 15:37:38 +00:00
using BotSharp.Abstraction.MLTasks;
2023-12-15 16:31:11 +00:00
using BotSharp.Abstraction.MLTasks.Settings;
2023-09-09 15:37:38 +00:00
namespace BotSharp.Core.Infrastructures;
public class CompletionProvider
{
2023-12-15 16:31:11 +00:00
public static object GetCompletion(IServiceProvider services, string? provider = null, string? model = null)
{
var state = services.GetRequiredService<IConversationStateService>();
if (string.IsNullOrEmpty(provider))
{
provider = state.GetState("provider", "azure-openai");
}
if (string.IsNullOrEmpty(model))
{
model = state.GetState("model", "gpt-35-turbo-instruct");
}
var settingsService = services.GetRequiredService<ILlmProviderSettingService>();
var settings = settingsService.GetSetting(provider, model);
if(settings.Type == LlmModelType.Text)
{
var completions = services.GetServices<ITextCompletion>();
var completer = completions.FirstOrDefault(x => x.Provider == provider);
if (completer == null)
{
var logger = services.GetRequiredService<ILogger<CompletionProvider>>();
logger.LogError($"Can't resolve text completion provider by {provider}");
}
completer.SetModelName(model);
return completer;
}
else
{
var completions = services.GetServices<IChatCompletion>();
var completer = completions.FirstOrDefault(x => x.Provider == provider);
if (completer == null)
{
var logger = services.GetRequiredService<ILogger<CompletionProvider>>();
logger.LogError($"Can't resolve chat completion provider by {provider}");
}
completer.SetModelName(model);
return completer;
}
}
public static IChatCompletion GetChatCompletion(IServiceProvider services, string? provider = null, string? model = null)
2023-09-09 15:37:38 +00:00
{
var completions = services.GetServices<IChatCompletion>();
2023-09-14 16:42:48 +00:00
2023-09-14 01:41:51 +00:00
var state = services.GetRequiredService<IConversationStateService>();
2023-09-20 22:08:14 +00:00
if (string.IsNullOrEmpty(provider))
2023-09-14 16:42:48 +00:00
{
2023-12-13 18:12:25 +00:00
provider = state.GetState("provider", "azure-openai");
2023-09-14 16:42:48 +00:00
}
2023-09-20 22:08:14 +00:00
if (string.IsNullOrEmpty(model))
{
2023-12-13 18:12:25 +00:00
model = state.GetState("model", "gpt-35-turbo-4k");
}
var completer = completions.FirstOrDefault(x => x.Provider == provider);
if (completer == null)
{
var logger = services.GetRequiredService<ILogger<CompletionProvider>>();
logger.LogError($"Can't resolve completion provider by {provider}");
}
completer.SetModelName(model);
return completer;
2023-09-09 15:37:38 +00:00
}
2023-10-09 22:28:17 +00:00
public static ITextCompletion GetTextCompletion(IServiceProvider services, string? provider = null, string? model = null)
{
var completions = services.GetServices<ITextCompletion>();
var state = services.GetRequiredService<IConversationStateService>();
if (string.IsNullOrEmpty(provider))
{
2023-12-13 18:12:25 +00:00
provider = state.GetState("provider", "azure-openai");
2023-10-09 22:28:17 +00:00
}
if (string.IsNullOrEmpty(model))
{
2023-12-13 18:12:25 +00:00
model = state.GetState("model", "gpt-35-turbo-instruct");
2023-10-09 22:28:17 +00:00
}
var completer = completions.FirstOrDefault(x => x.Provider == provider);
if (completer == null)
{
var logger = services.GetRequiredService<ILogger<CompletionProvider>>();
logger.LogError($"Can't resolve completion provider by {provider}");
}
completer.SetModelName(model);
return completer;
}
2023-09-09 15:37:38 +00:00
}