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;