From b5dc4ea20e373303baed746782601d78c00e26f1 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Fri, 25 Jul 2025 10:28:27 -0500 Subject: [PATCH 1/3] upgrade openai --- Directory.Packages.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index cec2ac88..de12d90c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -44,8 +44,8 @@ - - + + @@ -147,4 +147,4 @@ - + \ No newline at end of file From 77ac9d22cf9ddb02c0dc35839808ea4187b63546 Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Fri, 25 Jul 2025 12:54:58 -0500 Subject: [PATCH 2/3] gpt-image-1 --- .../Infrastructures/CompletionProvider.cs | 2 +- .../Image/ImageCompletionProvider.Generation.cs | 6 ++---- .../Providers/Image/ImageCompletionProvider.cs | 10 +++++----- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs b/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs index 4bf45d86..4409c8eb 100644 --- a/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs +++ b/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs @@ -213,7 +213,7 @@ public class CompletionProvider model = agentConfig?.Model ?? agentSetting.LlmConfig?.Model; if (state.ContainsState("model")) { - model = state.GetState("model", model ?? "dall-e-3"); + model = state.GetState("model", model ?? "gpt-image-1"); } else if (state.ContainsState("model_id") || !string.IsNullOrEmpty(modelId)) { diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.Generation.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.Generation.cs index 2f55d917..5747df2b 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.Generation.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.Generation.cs @@ -38,10 +38,8 @@ public partial class ImageCompletionProvider var options = new ImageGenerationOptions { - Size = size, - Quality = quality, - Style = style, - ResponseFormat = format + Quality = new GeneratedImageQuality("medium"), + Size = GeneratedImageSize.W1024xH1024 }; return (prompt, count, options); } diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.cs index 7cfda0f5..eaa03bb0 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Image/ImageCompletionProvider.cs @@ -44,7 +44,7 @@ public partial class ImageCompletionProvider : IImageCompletion { generatedImage.ImageUrl = image?.ImageUri?.AbsoluteUri ?? string.Empty; } - else if (format == GeneratedImageFormat.Bytes) + else { var base64Str = string.Empty; var bytes = image?.ImageBytes?.ToArray(); @@ -125,16 +125,16 @@ public partial class ImageCompletionProvider : IImageCompletion private GeneratedImageFormat GetImageFormat(string format) { - var value = !string.IsNullOrEmpty(format) ? format : "uri"; + var value = !string.IsNullOrEmpty(format) ? format : "bytes"; GeneratedImageFormat retFormat; switch (value) { - case "bytes": - retFormat = GeneratedImageFormat.Bytes; + case "url": + retFormat = GeneratedImageFormat.Uri; break; default: - retFormat = GeneratedImageFormat.Uri; + retFormat = GeneratedImageFormat.Bytes; break; } From b15f580930ae9ba0a8337974b290e196463d51fc Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Fri, 25 Jul 2025 15:13:52 -0500 Subject: [PATCH 3/3] add logging in twilio stream --- .../TwilioStreamMiddleware.cs | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.Twilio/TwilioStreamMiddleware.cs b/src/Plugins/BotSharp.Plugin.Twilio/TwilioStreamMiddleware.cs index ea4d5c50..3bcaf18b 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/TwilioStreamMiddleware.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/TwilioStreamMiddleware.cs @@ -3,6 +3,7 @@ using BotSharp.Abstraction.MLTasks; using BotSharp.Abstraction.Realtime; using BotSharp.Abstraction.Realtime.Models; using BotSharp.Abstraction.Routing; +using BotSharp.Abstraction.Utilities; using BotSharp.Plugin.Twilio.Interfaces; using BotSharp.Plugin.Twilio.Models.Stream; using Microsoft.AspNetCore.Http; @@ -88,10 +89,15 @@ public class TwilioStreamMiddleware continue; } - var (eventType, data) = MapEvents(conn, receivedText); + var (eventType, data) = MapEvents(conn, receivedText, conversationId); if (eventType == "user_connected") { +#if DEBUG + _logger.LogCritical($"Start twilio stream connection for conversation ({conversationId})"); +#else + _logger.LogInformation($"Start twilio stream connection for conversation ({conversationId})"); +#endif // Connect to model await ConnectToModel(hub, webSocket); } @@ -115,6 +121,11 @@ public class TwilioStreamMiddleware } else if (eventType == "user_disconnected") { +#if DEBUG + _logger.LogCritical($"Disconnecting twilio stream connection for conversation ({conversationId})"); +#else + _logger.LogInformation($"Disconnecting twilio stream connection for conversation ({conversationId})"); +#endif await hub.Completer.Disconnect(); await HandleUserDisconnected(); } @@ -131,9 +142,19 @@ public class TwilioStreamMiddleware }); } - private (string, string) MapEvents(RealtimeHubConnection conn, string receivedText) + private (string, string) MapEvents(RealtimeHubConnection conn, string receivedText, string conversationId) { - var response = JsonSerializer.Deserialize(receivedText); + StreamEventResponse? response = new(); + + try + { + response = JsonSerializer.Deserialize(receivedText); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Error when deserializing twilio stream event response for conversation ({conversationId}) (response: {receivedText?.SubstringMax(30)})"); + } + conn.StreamId = response.StreamSid; string eventType = response.Event; string data = string.Empty;