Skip to content

Commit 5091730

Browse files
committed
Fixed issue OkGoDoIt#207 - Error Deserializing ChatMessage
1 parent 5f7c23a commit 5091730

File tree

2 files changed

+74
-9
lines changed

2 files changed

+74
-9
lines changed

OpenAI_API/Chat/ChatMessage.cs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,12 @@ public string Text
159159

160160
set
161161
{
162-
text = value;
163-
image = null;
164-
Type = "text";
162+
if (value != null)
163+
{
164+
text = value;
165+
image = null;
166+
Type = "text";
167+
}
165168
}
166169
}
167170

@@ -181,9 +184,12 @@ public ImageInput Image
181184

182185
set
183186
{
184-
image = value;
185-
text = null;
186-
Type = "image_url";
187+
if (value != null)
188+
{
189+
image = value;
190+
text = null;
191+
Type = "image_url";
192+
}
187193
}
188194
}
189195

@@ -244,6 +250,11 @@ public ImageInput(string url, string detail = "auto")
244250
this.Detail = detail;
245251
}
246252

253+
/// <summary>
254+
/// Creates an empty <see cref="ImageInput"/>
255+
/// </summary>
256+
public ImageInput() { }
257+
247258
/// <summary>
248259
/// Instantiates a new ImageInput object with the given image data bytes
249260
/// </summary>
@@ -312,7 +323,7 @@ public override bool CanConvert(Type objectType)
312323
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
313324
{
314325
JToken token = JToken.Load(reader);
315-
if (token.Type == JTokenType.Object)
326+
if (token.Type == JTokenType.Object || token.Type == JTokenType.Array)
316327
{
317328
return token.ToObject<IList<ContentItem>>();
318329
}

OpenAI_Tests/ChatEndpointTests.cs

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void BasicCompletion()
2828

2929
Assert.IsNotNull(api.Chat);
3030

31-
var results = api.Chat.CreateChatCompletionAsync(new ChatRequest()
31+
var results = api.Chat.CreateChatCompletionAsync(new ChatRequest()
3232
{
3333
Model = Model.ChatGPTTurbo,
3434
Temperature = 0.1,
@@ -566,5 +566,59 @@ public async Task DifferentSeedShouldBeDifferentOutput()
566566
Assert.AreNotEqual(jokeA, jokeB);
567567
}
568568
}
569-
}
569+
570+
[Test]
571+
public void ChatMessageSerializationShouldDeserialzeAsExpected()
572+
{
573+
var msg = new ChatMessage()
574+
{
575+
Role = ChatMessageRole.User,
576+
TextContent = "This is a test"
577+
};
578+
var jmsg = JsonConvert.SerializeObject(msg);
579+
var deserializedMsg = JsonConvert.DeserializeObject<ChatMessage>(jmsg);
580+
581+
Assert.IsNotNull(deserializedMsg);
582+
Assert.IsTrue(msg.TextContent.Equals(deserializedMsg.TextContent));
583+
Assert.IsTrue(deserializedMsg.Images.Count == msg.Images.Count);
584+
}
585+
586+
[Test]
587+
public void ChatMessagesContentSerializationShouldDeserialzeAsExpected()
588+
{
589+
590+
var msg = new ChatMessage(ChatMessageRole.User, "What is this image about?", new ChatMessage.ImageInput[] { new ChatMessage.ImageInput("https://xyz.com/image.png") });
591+
592+
var jmsg = JsonConvert.SerializeObject(msg);
593+
var deserializedMsg = JsonConvert.DeserializeObject<ChatMessage>(jmsg);
594+
595+
Assert.IsNotNull(deserializedMsg);
596+
Assert.IsTrue(msg.TextContent.Equals(deserializedMsg.TextContent));
597+
Assert.IsTrue(deserializedMsg.Images.Count == msg.Images.Count);
598+
Assert.IsTrue(deserializedMsg.Images[0].Url.Equals(msg.Images[0].Url));
599+
}
600+
601+
[Test]
602+
public void ChatMessagesListSerializationShouldDeserialzeAsExpected()
603+
{
604+
var messages = new List<ChatMessage>();
605+
var msg1 = new ChatMessage(ChatMessageRole.User, "What is this image about?", new ChatMessage.ImageInput[] { new ChatMessage.ImageInput("https://xyz.com/image.png") });
606+
messages.Add(msg1);
607+
var msg2 = new ChatMessage(ChatMessageRole.User, "And what is this image about?", new ChatMessage.ImageInput[] { new ChatMessage.ImageInput("https://xyz.com/image2.png") });
608+
messages.Add(msg2);
609+
610+
var jmsgs = JsonConvert.SerializeObject(messages);
611+
var deserializedMessagesList = JsonConvert.DeserializeObject<List<ChatMessage>>(jmsgs);
612+
613+
Assert.IsNotNull(deserializedMessagesList);
614+
Assert.IsTrue(deserializedMessagesList.Count == messages.Count);
615+
Assert.IsTrue(deserializedMessagesList[0].TextContent.Equals(messages[0].TextContent));
616+
Assert.IsTrue(deserializedMessagesList[0].Images.Count == messages[0].Images.Count);
617+
Assert.IsTrue(deserializedMessagesList[0].Images[0].Url.Equals(messages[0].Images[0].Url));
618+
619+
Assert.IsTrue(deserializedMessagesList[1].TextContent.Equals(messages[1].TextContent));
620+
Assert.IsTrue(deserializedMessagesList[1].Images.Count == messages[1].Images.Count);
621+
Assert.IsTrue(deserializedMessagesList[1].Images[0].Url.Equals(messages[1].Images[0].Url));
622+
}
623+
}
570624
}

0 commit comments

Comments
 (0)