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="Whisper.net.Runtime" Version="1.8.1" />
<PackageVersion Include="NCrontab" Version="3.3.3" /> <PackageVersion Include="NCrontab" Version="3.3.3" />
<PackageVersion Include="Azure.AI.OpenAI" Version="2.2.0-beta.5" /> <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="MailKit" Version="4.11.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.8" /> <PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.8" />
<PackageVersion Include="MySql.Data" Version="9.0.0" /> <PackageVersion Include="MySql.Data" Version="9.0.0" />

View file

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

View file

@ -61,19 +61,34 @@ public class PlotChartFn : IFunctionCallback
}); });
var response = await GetChatCompletion(innerAgent, dialogs); 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> message.RichContent = new RichContent<IRichMessage>
{ {
Recipient = new Recipient { Id = convService.ConversationId }, Recipient = new Recipient { Id = convService.ConversationId },
Message = new ProgramCodeTemplateMessage Message = new ProgramCodeTemplateMessage
{ {
Text = obj?.JsCode ?? string.Empty, Text = ret?.JsCode ?? string.Empty,
Language = "javascript" Language = "javascript"
} }
}; };
if (!string.IsNullOrEmpty(obj?.ReportSummary)) if (!string.IsNullOrEmpty(ret?.ReportSummary))
{ {
message.AdditionalMessageWrapper = new() message.AdditionalMessageWrapper = new()
{ {
@ -81,7 +96,7 @@ public class PlotChartFn : IFunctionCallback
SaveToDb = true, SaveToDb = true,
Messages = new List<RoleDialogModel> Messages = new List<RoleDialogModel>
{ {
new(AgentRole.Assistant, obj.ReportSummary) new(AgentRole.Assistant, ret.ReportSummary)
{ {
MessageId = message.MessageId, MessageId = message.MessageId,
MessageLabel = "chart_report_summary", MessageLabel = "chart_report_summary",

View file

@ -57,6 +57,7 @@ public class GenerateImageFn : IFunctionCallback
var state = _services.GetRequiredService<IConversationStateService>(); var state = _services.GetRequiredService<IConversationStateService>();
state.SetState("image_count", "1"); state.SetState("image_count", "1");
state.SetState("image_quality", "medium"); state.SetState("image_quality", "medium");
state.SetState("image_response_format", "bytes");
} }
private async Task<string> GetImageGeneration(Agent agent, RoleDialogModel message, string? description) 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 dialog = RoleDialogModel.From(message, AgentRole.User, text);
var result = await completion.GetImageGeneration(agent, dialog); var result = await completion.GetImageGeneration(agent, dialog);
SaveGeneratedImages(result?.GeneratedImages); 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) catch (Exception ex)
{ {

View file

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

View file

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

View file

@ -163,6 +163,27 @@ public partial class ImageCompletionProvider : IImageCompletion
return retFormat; 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) private int GetImageCount(string count)
{ {
if (!int.TryParse(count, out var retCount)) if (!int.TryParse(count, out var retCount))