BotSharp/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.Variation.cs

43 lines
1.6 KiB
C#
Raw Normal View History

2024-07-19 03:28:24 +00:00
using OpenAI.Images;
namespace BotSharp.Plugin.OpenAI.Providers.Image;
public partial class ImageCompletionProvider
{
public async Task<RoleDialogModel> GetImageVariation(Agent agent, RoleDialogModel message, Stream image, string imageFileName)
{
var client = ProviderHelper.GetClient(Provider, _model, _services);
2024-07-19 17:01:07 +00:00
var (imageCount, options) = PrepareVariationOptions();
2024-07-19 03:28:24 +00:00
var imageClient = client.GetImageClient(_model);
2024-07-19 03:51:52 +00:00
var response = imageClient.GenerateImageVariations(image, imageFileName, imageCount, options);
2024-07-19 17:01:07 +00:00
var images = response.Value;
2024-07-19 03:28:24 +00:00
2024-07-19 17:01:07 +00:00
var generatedImages = GetImageGenerations(images, options.ResponseFormat);
2024-07-19 03:28:24 +00:00
var content = string.Join("\r\n", generatedImages.Where(x => !string.IsNullOrWhiteSpace(x.Description)).Select(x => x.Description));
var responseMessage = new RoleDialogModel(AgentRole.Assistant, content)
{
CurrentAgentId = agent.Id,
MessageId = message?.MessageId ?? string.Empty,
GeneratedImages = generatedImages
};
return await Task.FromResult(responseMessage);
}
2024-07-19 17:01:07 +00:00
private (int, ImageVariationOptions) PrepareVariationOptions()
2024-07-19 03:28:24 +00:00
{
var state = _services.GetRequiredService<IConversationStateService>();
2024-07-19 03:49:24 +00:00
var size = GetImageSize(state.GetState("image_size"));
2024-08-28 17:06:23 +00:00
var format = GetImageFormat(state.GetState("image_response_format"));
2024-07-19 03:28:24 +00:00
var count = GetImageCount(state.GetState("image_count", "1"));
var options = new ImageVariationOptions
{
2024-07-19 03:49:24 +00:00
Size = size,
ResponseFormat = format
2024-07-19 03:28:24 +00:00
};
return (count, options);
}
}