upgrade openai package

This commit is contained in:
Jicheng Lu 2025-09-11 14:22:26 -05:00
parent 1ed0846bbe
commit b20347fc0d
7 changed files with 60 additions and 7 deletions

View file

@ -46,7 +46,7 @@
<PackageVersion Include="Whisper.net.Runtime" Version="1.8.1" />
<PackageVersion Include="NCrontab" Version="3.3.3" />
<PackageVersion Include="Azure.AI.OpenAI" Version="2.2.0-beta.5" />
<PackageVersion Include="OpenAI" Version="2.3.0" />
<PackageVersion Include="OpenAI" Version="2.4.0" />
<PackageVersion Include="MailKit" Version="4.11.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.8" />
<PackageVersion Include="MySql.Data" Version="9.0.0" />

View file

@ -111,12 +111,14 @@ public class ImageGenerationSetting
public ModelSettingBase? Size { get; set; }
public ModelSettingBase? Quality { get; set; }
public ModelSettingBase? ResponseFormat { get; set; }
public ModelSettingBase? Background { get; set; }
}
public class ImageEditSetting
{
public ModelSettingBase? Size { get; set; }
public ModelSettingBase? ResponseFormat { get; set; }
public ModelSettingBase? Background { get; set; }
}
public class ImageVariationSetting

View file

@ -61,19 +61,34 @@ public class PlotChartFn : IFunctionCallback
});
var response = await GetChatCompletion(innerAgent, dialogs);
var obj = response.JsonContent<LlmContextOut>();
message.Content = obj?.GreetingMessage ?? "Here is the chart you ask for:";
LlmContextOut? ret = null;
var errorMsg = "Error when deserializing ai chart response";
try
{
ret = response.JsonContent<LlmContextOut>();
}
catch (Exception ex)
{
_logger.LogError(ex, errorMsg);
ret = new LlmContextOut
{
GreetingMessage = errorMsg
};
}
message.Content = ret?.GreetingMessage ?? "Here is the chart you ask for:";
message.RichContent = new RichContent<IRichMessage>
{
Recipient = new Recipient { Id = convService.ConversationId },
Message = new ProgramCodeTemplateMessage
{
Text = obj?.JsCode ?? string.Empty,
Text = ret?.JsCode ?? string.Empty,
Language = "javascript"
}
};
if (!string.IsNullOrEmpty(obj?.ReportSummary))
if (!string.IsNullOrEmpty(ret?.ReportSummary))
{
message.AdditionalMessageWrapper = new()
{
@ -81,7 +96,7 @@ public class PlotChartFn : IFunctionCallback
SaveToDb = true,
Messages = new List<RoleDialogModel>
{
new(AgentRole.Assistant, obj.ReportSummary)
new(AgentRole.Assistant, ret.ReportSummary)
{
MessageId = message.MessageId,
MessageLabel = "chart_report_summary",

View file

@ -57,6 +57,7 @@ public class GenerateImageFn : IFunctionCallback
var state = _services.GetRequiredService<IConversationStateService>();
state.SetState("image_count", "1");
state.SetState("image_quality", "medium");
state.SetState("image_response_format", "bytes");
}
private async Task<string> GetImageGeneration(Agent agent, RoleDialogModel message, string? description)
@ -69,7 +70,7 @@ public class GenerateImageFn : IFunctionCallback
var dialog = RoleDialogModel.From(message, AgentRole.User, text);
var result = await completion.GetImageGeneration(agent, dialog);
SaveGeneratedImages(result?.GeneratedImages);
return result?.Content ?? string.Empty;
return !string.IsNullOrWhiteSpace(result?.Content) ? result.Content : "Here is the image you asked for";
}
catch (Exception ex)
{

View file

@ -1,3 +1,4 @@
#pragma warning disable OPENAI001
using OpenAI.Images;
namespace BotSharp.Plugin.OpenAI.Providers.Image;
@ -58,9 +59,11 @@ public partial class ImageCompletionProvider
var size = state.GetState("image_size");
var responseFormat = state.GetState("image_response_format");
var background = state.GetState("image_background");
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;
background = settings?.Background != null ? VerifyImageParameter(background, settings.Background.Default, settings.Background.Options) : null;
var options = new ImageEditOptions();
if (!string.IsNullOrEmpty(size))
@ -71,6 +74,10 @@ public partial class ImageCompletionProvider
{
options.ResponseFormat = GetImageResponseFormat(responseFormat);
}
if (!string.IsNullOrEmpty(background))
{
options.Background = GetImageBackground(background);
}
var count = GetImageCount(state.GetState("image_count"));
return (prompt, count, options);

View file

@ -1,3 +1,4 @@
#pragma warning disable OPENAI001
using OpenAI.Images;
namespace BotSharp.Plugin.OpenAI.Providers.Image;
@ -38,11 +39,13 @@ public partial class ImageCompletionProvider
var quality = state.GetState("image_quality");
var style = state.GetState("image_style");
var responseFormat = state.GetState("image_response_format");
var background = state.GetState("image_background");
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;
background = settings?.Background != null ? VerifyImageParameter(background, settings.Background.Default, settings.Background.Options) : null;
var options = new ImageGenerationOptions();
if (!string.IsNullOrEmpty(size))
@ -61,6 +64,10 @@ public partial class ImageCompletionProvider
{
options.ResponseFormat = GetImageResponseFormat(responseFormat);
}
if (!string.IsNullOrEmpty(background))
{
options.Background = GetImageBackground(background);
}
var count = GetImageCount(state.GetState("image_count"));
return (prompt, count, options);

View file

@ -163,6 +163,27 @@ public partial class ImageCompletionProvider : IImageCompletion
return retFormat;
}
private GeneratedImageBackground GetImageBackground(string? background)
{
var value = !string.IsNullOrEmpty(background) ? background : "auto";
GeneratedImageBackground retBackground;
switch (value)
{
case "transparent":
retBackground = GeneratedImageBackground.Transparent;
break;
case "opaque":
retBackground = GeneratedImageBackground.Opaque;
break;
default:
retBackground = GeneratedImageBackground.Auto;
break;
}
return retBackground;
}
private int GetImageCount(string count)
{
if (!int.TryParse(count, out var retCount))