refine image model settings
This commit is contained in:
parent
62e82afb81
commit
2bf4210485
|
|
@ -57,6 +57,11 @@ public class LlmModelSetting
|
|||
/// </summary>
|
||||
public WebSearchSetting? WebSearch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Settings for images
|
||||
/// </summary>
|
||||
public ImageSetting? Image { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Settings for llm cost
|
||||
/// </summary>
|
||||
|
|
@ -79,6 +84,41 @@ public class WebSearchSetting
|
|||
public string? SearchContextSize { get; set; }
|
||||
}
|
||||
|
||||
public class ImageSetting
|
||||
{
|
||||
public ImageGenerationSetting? Generation { get; set; }
|
||||
public ImageEditSetting? Edit { get; set; }
|
||||
public ImageVariationSetting? Variation { get; set; }
|
||||
}
|
||||
|
||||
public class ImageGenerationSetting
|
||||
{
|
||||
public ModelSettingBase? Style { get; set; }
|
||||
public ModelSettingBase? Size { get; set; }
|
||||
public ModelSettingBase? Quality { get; set; }
|
||||
public ModelSettingBase? ResponseFormat { get; set; }
|
||||
}
|
||||
|
||||
public class ImageEditSetting
|
||||
{
|
||||
public ModelSettingBase? Size { get; set; }
|
||||
public ModelSettingBase? ResponseFormat { get; set; }
|
||||
}
|
||||
|
||||
public class ImageVariationSetting
|
||||
{
|
||||
public ModelSettingBase? Size { get; set; }
|
||||
public ModelSettingBase? ResponseFormat { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class ModelSettingBase
|
||||
{
|
||||
public string? Default { get; set; }
|
||||
public IEnumerable<string>? Options { get; set; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Cost per 1K tokens
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ public class GenerateImageFn : IFunctionCallback
|
|||
private void SetImageOptions()
|
||||
{
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
state.SetState("image_response_format", "bytes");
|
||||
state.SetState("image_count", "1");
|
||||
state.SetState("image_quality", "medium");
|
||||
}
|
||||
|
||||
private async Task<string> GetImageGeneration(Agent agent, RoleDialogModel message, string? description)
|
||||
|
|
|
|||
|
|
@ -51,16 +51,27 @@ public partial class ImageCompletionProvider
|
|||
{
|
||||
var prompt = message?.Payload ?? message?.Content ?? string.Empty;
|
||||
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
var size = GetImageSize(state.GetState("image_size"));
|
||||
var format = GetImageFormat(state.GetState("image_response_format"));
|
||||
var count = GetImageCount(state.GetState("image_count", "1"));
|
||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||
var settings = settingsService.GetSetting(Provider, _model)?.Image?.Edit;
|
||||
|
||||
var options = new ImageEditOptions
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
var size = state.GetState("image_size");
|
||||
var responseFormat = state.GetState("image_response_format");
|
||||
|
||||
size = settings?.Size != null ? VerifyImageParameter(size, settings.Size.Default, settings.Size.Options) : null;
|
||||
responseFormat = settings?.ResponseFormat != null ? VerifyImageParameter(responseFormat, settings.ResponseFormat.Default, settings.ResponseFormat.Options) : null;
|
||||
|
||||
var options = new ImageEditOptions();
|
||||
if (!string.IsNullOrEmpty(size))
|
||||
{
|
||||
Size = size,
|
||||
ResponseFormat = format
|
||||
};
|
||||
options.Size = GetImageSize(size);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(responseFormat))
|
||||
{
|
||||
options.ResponseFormat = GetImageResponseFormat(responseFormat);
|
||||
}
|
||||
|
||||
var count = GetImageCount(state.GetState("image_count", "1"));
|
||||
return (prompt, count, options);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,18 +29,39 @@ public partial class ImageCompletionProvider
|
|||
{
|
||||
var prompt = message?.Payload ?? message?.Content ?? string.Empty;
|
||||
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
var size = GetImageSize(state.GetState("image_size"));
|
||||
var quality = GetImageQuality(state.GetState("image_quality"));
|
||||
var style = GetImageStyle(state.GetState("image_style"));
|
||||
var format = GetImageFormat(state.GetState("image_response_format"));
|
||||
var count = GetImageCount(state.GetState("image_count", "1"));
|
||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||
var settings = settingsService.GetSetting(Provider, _model)?.Image?.Generation;
|
||||
|
||||
var options = new ImageGenerationOptions
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
var size = state.GetState("image_size");
|
||||
var quality = state.GetState("image_quality");
|
||||
var style = state.GetState("image_style");
|
||||
var responseFormat = state.GetState("image_response_format");
|
||||
|
||||
size = settings?.Size != null ? VerifyImageParameter(size, settings.Size.Default, settings.Size.Options) : null;
|
||||
quality = settings?.Quality != null ? VerifyImageParameter(quality, settings.Quality.Default, settings.Quality.Options) : null;
|
||||
style = settings?.Style != null ? VerifyImageParameter(style, settings.Style.Default, settings.Style.Options) : null;
|
||||
responseFormat = settings?.ResponseFormat != null ? VerifyImageParameter(responseFormat, settings.ResponseFormat.Default, settings.ResponseFormat.Options) : null;
|
||||
|
||||
var options = new ImageGenerationOptions();
|
||||
if (!string.IsNullOrEmpty(size))
|
||||
{
|
||||
Quality = new GeneratedImageQuality("medium"),
|
||||
Size = GeneratedImageSize.W1024xH1024
|
||||
};
|
||||
options.Size = GetImageSize(size);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(quality))
|
||||
{
|
||||
options.Quality = GetImageQuality(quality);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(style))
|
||||
{
|
||||
options.Style = GetImageStyle(style);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(responseFormat))
|
||||
{
|
||||
options.ResponseFormat = GetImageResponseFormat(responseFormat);
|
||||
}
|
||||
|
||||
var count = GetImageCount(state.GetState("image_count", "1"));
|
||||
return (prompt, count, options);
|
||||
}
|
||||
}
|
||||
|
|
@ -27,16 +27,27 @@ public partial class ImageCompletionProvider
|
|||
|
||||
private (int, ImageVariationOptions) PrepareVariationOptions()
|
||||
{
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
var size = GetImageSize(state.GetState("image_size"));
|
||||
var format = GetImageFormat(state.GetState("image_response_format"));
|
||||
var count = GetImageCount(state.GetState("image_count", "1"));
|
||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||
var settings = settingsService.GetSetting(Provider, _model)?.Image?.Variation;
|
||||
|
||||
var options = new ImageVariationOptions
|
||||
var state = _services.GetRequiredService<IConversationStateService>();
|
||||
var size = state.GetState("image_size");
|
||||
var responseFormat = state.GetState("image_response_format");
|
||||
|
||||
size = settings?.Size != null ? VerifyImageParameter(size, settings.Size.Default, settings.Size.Options) : null;
|
||||
responseFormat = settings?.ResponseFormat != null ? VerifyImageParameter(responseFormat, settings.ResponseFormat.Default, settings.ResponseFormat.Options) : null;
|
||||
|
||||
var options = new ImageVariationOptions();
|
||||
if (!string.IsNullOrEmpty(size))
|
||||
{
|
||||
Size = size,
|
||||
ResponseFormat = format
|
||||
};
|
||||
options.Size = GetImageSize(size);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(responseFormat))
|
||||
{
|
||||
options.ResponseFormat = GetImageResponseFormat(responseFormat);
|
||||
}
|
||||
|
||||
var count = GetImageCount(state.GetState("image_count", "1"));
|
||||
return (count, options);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
#pragma warning disable OPENAI001
|
||||
using OpenAI.Images;
|
||||
|
||||
namespace BotSharp.Plugin.OpenAI.Providers.Image;
|
||||
|
|
@ -60,9 +61,9 @@ public partial class ImageCompletionProvider : IImageCompletion
|
|||
return generatedImages;
|
||||
}
|
||||
|
||||
private GeneratedImageSize GetImageSize(string size)
|
||||
private GeneratedImageSize GetImageSize(string? size)
|
||||
{
|
||||
var value = !string.IsNullOrEmpty(size) ? size : "1024x1024";
|
||||
var value = !string.IsNullOrEmpty(size) ? size : "auto";
|
||||
|
||||
GeneratedImageSize retSize;
|
||||
switch (value)
|
||||
|
|
@ -79,33 +80,54 @@ public partial class ImageCompletionProvider : IImageCompletion
|
|||
case "1792x1024":
|
||||
retSize = GeneratedImageSize.W1792xH1024;
|
||||
break;
|
||||
default:
|
||||
case "1024x1024":
|
||||
retSize = GeneratedImageSize.W1024xH1024;
|
||||
break;
|
||||
case "1024x1536":
|
||||
retSize = GeneratedImageSize.W1024xH1536;
|
||||
break;
|
||||
case "1536x1024":
|
||||
retSize = GeneratedImageSize.W1536xH1024;
|
||||
break;
|
||||
default:
|
||||
retSize = GeneratedImageSize.Auto;
|
||||
break;
|
||||
}
|
||||
|
||||
return retSize;
|
||||
}
|
||||
|
||||
private GeneratedImageQuality GetImageQuality(string quality)
|
||||
private GeneratedImageQuality GetImageQuality(string? quality)
|
||||
{
|
||||
var value = !string.IsNullOrEmpty(quality) ? quality : "standard";
|
||||
var value = !string.IsNullOrEmpty(quality) ? quality : "auto";
|
||||
|
||||
GeneratedImageQuality retQuality;
|
||||
switch (value)
|
||||
{
|
||||
case "hd":
|
||||
case "low":
|
||||
retQuality = GeneratedImageQuality.Low;
|
||||
break;
|
||||
case "medium":
|
||||
retQuality = GeneratedImageQuality.Medium;
|
||||
break;
|
||||
case "high":
|
||||
retQuality = GeneratedImageQuality.High;
|
||||
break;
|
||||
default:
|
||||
case "standard":
|
||||
retQuality = GeneratedImageQuality.Standard;
|
||||
break;
|
||||
case "hd":
|
||||
retQuality = new GeneratedImageQuality("hd");
|
||||
break;
|
||||
default:
|
||||
retQuality = GeneratedImageQuality.Auto;
|
||||
break;
|
||||
}
|
||||
|
||||
return retQuality;
|
||||
}
|
||||
|
||||
private GeneratedImageStyle GetImageStyle(string style)
|
||||
private GeneratedImageStyle GetImageStyle(string? style)
|
||||
{
|
||||
var value = !string.IsNullOrEmpty(style) ? style : "natural";
|
||||
|
||||
|
|
@ -123,7 +145,7 @@ public partial class ImageCompletionProvider : IImageCompletion
|
|||
return retStyle;
|
||||
}
|
||||
|
||||
private GeneratedImageFormat GetImageFormat(string format)
|
||||
private GeneratedImageFormat GetImageResponseFormat(string? format)
|
||||
{
|
||||
var value = !string.IsNullOrEmpty(format) ? format : "bytes";
|
||||
|
||||
|
|
@ -158,5 +180,15 @@ public partial class ImageCompletionProvider : IImageCompletion
|
|||
}
|
||||
return retCount;
|
||||
}
|
||||
|
||||
private string? VerifyImageParameter(string? curVal, string? defaultVal, IEnumerable<string>? options = null)
|
||||
{
|
||||
if (options.IsNullOrEmpty())
|
||||
{
|
||||
return curVal.IfNullOrEmptyAs(defaultVal);
|
||||
}
|
||||
|
||||
return options.Contains(curVal) ? curVal : defaultVal;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue