From 569ed1fd7e54ae51faf07fcc0ae7ff8548a71a57 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 28 Jan 2025 08:49:12 -0500 Subject: [PATCH 1/2] OpenAI-DotNet 8.5.3 - Fix JsonStringEnumConverter for ChatRequests --- .../Extensions/JsonStringEnumConverter.cs | 58 +++++++++---------- OpenAI-DotNet/OpenAI-DotNet.csproj | 4 +- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs b/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs index f59c2099..eff324e7 100644 --- a/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs +++ b/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs @@ -14,6 +14,7 @@ namespace OpenAI.Extensions /// internal sealed class JsonStringEnumConverter : JsonConverter where TEnum : struct, Enum { + private const string ValueField = "value__"; private readonly JsonNamingPolicy namingPolicy; private readonly Dictionary numberToEnum = new(); private readonly Dictionary enumToString = new(); @@ -31,59 +32,58 @@ public JsonStringEnumConverter() var attribute = enumMember.GetCustomAttributes(typeof(EnumMemberAttribute), false) .Cast() .FirstOrDefault(); - var index = Convert.ToInt32(type.GetField("value__")?.GetValue(value)); + var index = Convert.ToInt32(type.GetField(ValueField)?.GetValue(value)); if (attribute?.Value != null) { - numberToEnum.Add(index, value); - enumToString.Add(value, attribute.Value); - stringToEnum.Add(attribute.Value, value); + numberToEnum.TryAdd(index, value); + enumToString.TryAdd(value, attribute.Value); + stringToEnum.TryAdd(attribute.Value, value); } else { var convertedName = namingPolicy != null ? namingPolicy.ConvertName(value.ToString()) : value.ToString(); - numberToEnum.Add(index, value); - enumToString.Add(value, convertedName); - stringToEnum.Add(convertedName, value); + numberToEnum.TryAdd(index, value); + numberToEnum.TryAdd(index, value); + enumToString.TryAdd(value, convertedName); + stringToEnum.TryAdd(convertedName, value); } } } public override TEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - var type = reader.TokenType; - - switch (type) + switch (reader.TokenType) { case JsonTokenType.String: + { + var stringValue = reader.GetString(); + + if (stringValue != null) { - var stringValue = reader.GetString(); + var value = namingPolicy != null + ? namingPolicy.ConvertName(stringValue) + : stringValue; - if (stringValue != null) + if (stringToEnum.TryGetValue(value, out var enumValue)) { - var value = namingPolicy != null - ? namingPolicy.ConvertName(stringValue) - : stringValue; - - if (stringToEnum.TryGetValue(value, out var enumValue)) - { - return enumValue; - } + return enumValue; } - - break; } + + return default; + } case JsonTokenType.Number: - { - var numValue = reader.GetInt32(); - numberToEnum.TryGetValue(numValue, out var enumValue); - return enumValue; - } + { + var numValue = reader.GetInt32(); + numberToEnum.TryGetValue(numValue, out var enumValue); + return enumValue; + } + default: + return default; } - - return default; } public override void Write(Utf8JsonWriter writer, TEnum value, JsonSerializerOptions options) diff --git a/OpenAI-DotNet/OpenAI-DotNet.csproj b/OpenAI-DotNet/OpenAI-DotNet.csproj index 722cb633..829681b5 100644 --- a/OpenAI-DotNet/OpenAI-DotNet.csproj +++ b/OpenAI-DotNet/OpenAI-DotNet.csproj @@ -29,8 +29,10 @@ More context [on Roger Pincombe's blog](https://rogerpincombe.com/openai-dotnet- OpenAI-DotNet.pfx true true - 8.5.1 + 8.5.3 +Version 8.5.3 +- Fix JsonStringEnumConverter for ChatRequests Version 8.5.1 - Fix ChatRequest serialization for ReasoningEffort Version 8.5.0 From a7da39e5f1e3ca23df2e6b5ff22f83c2d204cd73 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 28 Jan 2025 09:15:44 -0500 Subject: [PATCH 2/2] remove dup line to add number enum to dict removed dup indexes for chat.role --- OpenAI-DotNet/Common/ReasoningEffort.cs | 5 +++++ OpenAI-DotNet/Common/Role.cs | 17 ++++++++++++----- .../Extensions/JsonStringEnumConverter.cs | 1 - 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/OpenAI-DotNet/Common/ReasoningEffort.cs b/OpenAI-DotNet/Common/ReasoningEffort.cs index 844d8e6b..9a4a262f 100644 --- a/OpenAI-DotNet/Common/ReasoningEffort.cs +++ b/OpenAI-DotNet/Common/ReasoningEffort.cs @@ -1,5 +1,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. +using System.Runtime.Serialization; + namespace OpenAI { /// @@ -11,8 +13,11 @@ namespace OpenAI /// public enum ReasoningEffort { + [EnumMember(Value = "low")] Low = 1, + [EnumMember(Value = "medium")] Medium, + [EnumMember(Value = "high")] High } } diff --git a/OpenAI-DotNet/Common/Role.cs b/OpenAI-DotNet/Common/Role.cs index 693c4886..187b5146 100644 --- a/OpenAI-DotNet/Common/Role.cs +++ b/OpenAI-DotNet/Common/Role.cs @@ -1,17 +1,24 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System; +using System.Runtime.Serialization; namespace OpenAI { public enum Role { + [EnumMember(Value = "system")] System = 1, - Developer = 1, - Assistant = 2, - User = 3, + [EnumMember(Value = "developer")] + Developer, + [EnumMember(Value = "assistant")] + Assistant, + [EnumMember(Value = "user")] + User, [Obsolete("Use Tool")] - Function = 4, - Tool = 4 + [EnumMember(Value = "function")] + Function, + [EnumMember(Value = "tool")] + Tool } } diff --git a/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs b/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs index eff324e7..c4cc9d2a 100644 --- a/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs +++ b/OpenAI-DotNet/Extensions/JsonStringEnumConverter.cs @@ -46,7 +46,6 @@ public JsonStringEnumConverter() ? namingPolicy.ConvertName(value.ToString()) : value.ToString(); numberToEnum.TryAdd(index, value); - numberToEnum.TryAdd(index, value); enumToString.TryAdd(value, convertedName); stringToEnum.TryAdd(convertedName, value); }