From 368bb4dd49600408ab8da9efe8b25b15c3ac03d3 Mon Sep 17 00:00:00 2001 From: Jose Arriaga Maldonado Date: Fri, 7 Nov 2025 11:22:58 -0800 Subject: [PATCH] Expose role-specific message items --- api/OpenAI.net8.0.cs | 62 +++++++++++++---- api/OpenAI.netstandard2.0.cs | 58 ++++++++++++---- specification/client/responses.client.tsp | 1 - .../Responses/Internal/GeneratorStubs.cs | 1 - .../Internal/InternalMessageRoleEx.cs | 6 ++ .../InternalResponsesAssistantMessage.cs | 11 --- .../InternalResponsesDeveloperMessage.cs | 11 --- .../InternalResponsesSystemMessage.cs | 11 --- .../Internal/InternalResponsesUserMessage.cs | 11 --- .../Message/AssistantMessageResponseItem.cs | 26 +++++++ .../Message/DeveloperMessageResponseItem.cs | 26 +++++++ .../Items/Message/MessageResponseItem.cs | 48 +++++++++---- .../Message/MessageRole.Serialization.cs | 36 ---------- .../Responses/Items/Message/MessageRole.cs | 8 +-- .../Message/SystemMessageResponseItem.cs | 26 +++++++ .../Items/Message/UserMessageResponseItem.cs | 26 +++++++ .../Items/Reasoning/ReasoningResponseItem.cs | 9 ++- src/Custom/Responses/Items/ResponseItem.cs | 53 ++++++--------- .../Responses/OpenAIResponsesModelFactory.cs | 52 ++------------ src/Generated/Models/OpenAIContext.cs | 8 +-- ...stantMessageResponseItem.Serialization.cs} | 44 ++++++------ ...age.cs => AssistantMessageResponseItem.cs} | 14 ++-- ...loperMessageResponseItem.Serialization.cs} | 44 ++++++------ ...age.cs => DeveloperMessageResponseItem.cs} | 14 ++-- .../Models/Responses/InternalMessageRoleEx.cs | 52 ++++++++++++++ ...AssistantMessageItemParam.Serialization.cs | 6 +- ...ernalResponsesAssistantMessageItemParam.cs | 4 +- ...DeveloperMessageItemParam.Serialization.cs | 6 +- ...ernalResponsesDeveloperMessageItemParam.cs | 4 +- .../InternalResponsesMessageItemParam.cs | 6 +- .../Responses/InternalResponsesMessageRole.cs | 52 -------------- ...sesSystemMessageItemParam.Serialization.cs | 6 +- ...InternalResponsesSystemMessageItemParam.cs | 4 +- ...onsesUserMessageItemParam.Serialization.cs | 6 +- .../InternalResponsesUserMessageItemParam.cs | 4 +- ...ponsesMessageItemResource.Serialization.cs | 6 +- ...rnalUnknownResponsesMessageItemResource.cs | 2 +- ...sageItemResourceItemParam.Serialization.cs | 4 +- ...wnResponsesMessageItemResourceItemParam.cs | 2 +- .../MessageResponseItem.Serialization.cs | 10 +-- .../Models/Responses/MessageResponseItem.cs | 8 +-- .../ReasoningResponseItem.Serialization.cs | 16 ++--- .../Models/Responses/ReasoningResponseItem.cs | 12 ++-- ...ystemMessageResponseItem.Serialization.cs} | 44 ++++++------ ...essage.cs => SystemMessageResponseItem.cs} | 14 ++-- ... UserMessageResponseItem.Serialization.cs} | 44 ++++++------ ...rMessage.cs => UserMessageResponseItem.cs} | 14 ++-- .../OpenAIResponsesModelFactoryTests.cs | 67 +------------------ tests/Responses/ResponsesSmokeTests.cs | 4 +- tests/Responses/ResponsesTests.cs | 2 +- tspCodeModel.json | 2 +- 51 files changed, 487 insertions(+), 520 deletions(-) create mode 100644 src/Custom/Responses/Internal/InternalMessageRoleEx.cs delete mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs delete mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs delete mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs delete mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs create mode 100644 src/Custom/Responses/Items/Message/AssistantMessageResponseItem.cs create mode 100644 src/Custom/Responses/Items/Message/DeveloperMessageResponseItem.cs delete mode 100644 src/Custom/Responses/Items/Message/MessageRole.Serialization.cs create mode 100644 src/Custom/Responses/Items/Message/SystemMessageResponseItem.cs create mode 100644 src/Custom/Responses/Items/Message/UserMessageResponseItem.cs rename src/Generated/Models/Responses/{InternalResponsesUserMessage.Serialization.cs => AssistantMessageResponseItem.Serialization.cs} (80%) rename src/Generated/Models/Responses/{InternalResponsesUserMessage.cs => AssistantMessageResponseItem.cs} (56%) rename src/Generated/Models/Responses/{InternalResponsesSystemMessage.Serialization.cs => DeveloperMessageResponseItem.Serialization.cs} (75%) rename src/Generated/Models/Responses/{InternalResponsesSystemMessage.cs => DeveloperMessageResponseItem.cs} (50%) create mode 100644 src/Generated/Models/Responses/InternalMessageRoleEx.cs delete mode 100644 src/Generated/Models/Responses/InternalResponsesMessageRole.cs rename src/Generated/Models/Responses/{InternalResponsesAssistantMessage.Serialization.cs => SystemMessageResponseItem.Serialization.cs} (74%) rename src/Generated/Models/Responses/{InternalResponsesAssistantMessage.cs => SystemMessageResponseItem.cs} (50%) rename src/Generated/Models/Responses/{InternalResponsesDeveloperMessage.Serialization.cs => UserMessageResponseItem.Serialization.cs} (74%) rename src/Generated/Models/Responses/{InternalResponsesDeveloperMessage.cs => UserMessageResponseItem.cs} (50%) diff --git a/api/OpenAI.net8.0.cs b/api/OpenAI.net8.0.cs index 400f5b51e..8cda3e6b7 100644 --- a/api/OpenAI.net8.0.cs +++ b/api/OpenAI.net8.0.cs @@ -4839,6 +4839,15 @@ public class TurnDetectionOptions : IJsonModel, IPersistab } } namespace OpenAI.Responses { + [Experimental("OPENAI001")] + public class AssistantMessageResponseItem : MessageResponseItem, IJsonModel, IPersistableModel { + public AssistantMessageResponseItem(IEnumerable content); + public AssistantMessageResponseItem(string outputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } [Experimental("OPENAI001")] public class AutomaticCodeInterpreterToolContainerConfiguration : CodeInterpreterToolContainerConfiguration, IJsonModel, IPersistableModel { public AutomaticCodeInterpreterToolContainerConfiguration(); @@ -5106,6 +5115,15 @@ public class CustomMcpToolCallApprovalPolicy : IJsonModel, IPersistableModel { + public DeveloperMessageResponseItem(IEnumerable content); + public DeveloperMessageResponseItem(string inputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] public class FileCitationMessageAnnotation : ResponseMessageAnnotation, IJsonModel, IPersistableModel { public FileCitationMessageAnnotation(string fileId, int index, string filename); public string FileId { get; set; } @@ -5669,19 +5687,17 @@ public class OpenAIResponseClient { } [Experimental("OPENAI001")] public static class OpenAIResponsesModelFactory { - public static MessageResponseItem MessageResponseItem(string id = null, MessageRole role = MessageRole.Assistant, MessageStatus? status = null); public static OpenAIResponse OpenAIResponse(string id = null, DateTimeOffset createdAt = default, ResponseStatus? status = null, ResponseError error = null, ResponseTokenUsage usage = null, string endUserId = null, ResponseReasoningOptions reasoningOptions = null, int? maxOutputTokenCount = null, ResponseTextOptions textOptions = null, ResponseTruncationMode? truncationMode = null, ResponseIncompleteStatusDetails incompleteStatusDetails = null, IEnumerable outputItems = null, bool parallelToolCallsEnabled = false, ResponseToolChoice toolChoice = null, string model = null, IDictionary metadata = null, float? temperature = null, float? topP = null, ResponseServiceTier? serviceTier = null, string previousResponseId = null, bool? backgroundModeEnabled = null, string instructions = null, IEnumerable tools = null); - public static ReasoningResponseItem ReasoningResponseItem(string id = null, string encryptedContent = null, ReasoningStatus? status = null, IEnumerable summaryParts = null); - public static ReasoningResponseItem ReasoningResponseItem(string id = null, string encryptedContent = null, ReasoningStatus? status = null, string summaryText = null); + public static ReasoningResponseItem ReasoningResponseItem(string id = null, string encryptedContent = null, ReasoningStatus? status = null, IEnumerable summary = null); public static ReferenceResponseItem ReferenceResponseItem(string id = null); } [Experimental("OPENAI001")] public class ReasoningResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public ReasoningResponseItem(IEnumerable summaryParts); + public ReasoningResponseItem(IEnumerable summary); public ReasoningResponseItem(string summaryText); public string EncryptedContent { get; set; } public ReasoningStatus? Status { get; } - public IList SummaryParts { get; } + public IList Summary { get; } public string GetSummaryText(); protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); @@ -5912,14 +5928,14 @@ public class ResponseItem : IJsonModel, IPersistableModel contentParts); - public static MessageResponseItem CreateAssistantMessageItem(string outputTextContent, IEnumerable annotations = null); + public static AssistantMessageResponseItem CreateAssistantMessageItem(IEnumerable content); + public static AssistantMessageResponseItem CreateAssistantMessageItem(string outputTextContent); [Experimental("OPENAICUA001")] public static ComputerCallResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); [Experimental("OPENAICUA001")] public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, ComputerCallOutput output); - public static MessageResponseItem CreateDeveloperMessageItem(IEnumerable contentParts); - public static MessageResponseItem CreateDeveloperMessageItem(string inputTextContent); + public static DeveloperMessageResponseItem CreateDeveloperMessageItem(IEnumerable content); + public static DeveloperMessageResponseItem CreateDeveloperMessageItem(string inputTextContent); public static FileSearchCallResponseItem CreateFileSearchCallItem(IEnumerable queries); public static FunctionCallResponseItem CreateFunctionCallItem(string callId, string functionName, BinaryData functionArguments); public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput); @@ -5927,13 +5943,13 @@ public class ResponseItem : IJsonModel, IPersistableModel toolDefinitions); - public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryParts); + public static ReasoningResponseItem CreateReasoningItem(IEnumerable summary); public static ReasoningResponseItem CreateReasoningItem(string summaryText); public static ReferenceResponseItem CreateReferenceItem(string id); - public static MessageResponseItem CreateSystemMessageItem(IEnumerable contentParts); - public static MessageResponseItem CreateSystemMessageItem(string inputTextContent); - public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts); - public static MessageResponseItem CreateUserMessageItem(string inputTextContent); + public static SystemMessageResponseItem CreateSystemMessageItem(IEnumerable content); + public static SystemMessageResponseItem CreateSystemMessageItem(string inputTextContent); + public static UserMessageResponseItem CreateUserMessageItem(IEnumerable content); + public static UserMessageResponseItem CreateUserMessageItem(string inputTextContent); public static WebSearchCallResponseItem CreateWebSearchCallItem(); protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); @@ -6655,6 +6671,15 @@ public class StreamingResponseWebSearchCallSearchingUpdate : StreamingResponseUp protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] + public class SystemMessageResponseItem : MessageResponseItem, IJsonModel, IPersistableModel { + public SystemMessageResponseItem(IEnumerable content); + public SystemMessageResponseItem(string inputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] public class UriCitationMessageAnnotation : ResponseMessageAnnotation, IJsonModel, IPersistableModel { public UriCitationMessageAnnotation(Uri uri, int startIndex, int endIndex, string title); public int EndIndex { get; set; } @@ -6667,6 +6692,15 @@ public class UriCitationMessageAnnotation : ResponseMessageAnnotation, IJsonMode protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] + public class UserMessageResponseItem : MessageResponseItem, IJsonModel, IPersistableModel { + public UserMessageResponseItem(IEnumerable content); + public UserMessageResponseItem(string inputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] public class WebSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { public WebSearchCallResponseItem(); public WebSearchCallStatus? Status { get; } diff --git a/api/OpenAI.netstandard2.0.cs b/api/OpenAI.netstandard2.0.cs index c715d602b..44eb86b64 100644 --- a/api/OpenAI.netstandard2.0.cs +++ b/api/OpenAI.netstandard2.0.cs @@ -4228,6 +4228,14 @@ public class TurnDetectionOptions : IJsonModel, IPersistab } } namespace OpenAI.Responses { + public class AssistantMessageResponseItem : MessageResponseItem, IJsonModel, IPersistableModel { + public AssistantMessageResponseItem(IEnumerable content); + public AssistantMessageResponseItem(string outputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class AutomaticCodeInterpreterToolContainerConfiguration : CodeInterpreterToolContainerConfiguration, IJsonModel, IPersistableModel { public AutomaticCodeInterpreterToolContainerConfiguration(); public IList FileIds { get; } @@ -4465,6 +4473,14 @@ public class CustomMcpToolCallApprovalPolicy : IJsonModel, IPersistableModel { + public DeveloperMessageResponseItem(IEnumerable content); + public DeveloperMessageResponseItem(string inputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class FileCitationMessageAnnotation : ResponseMessageAnnotation, IJsonModel, IPersistableModel { public FileCitationMessageAnnotation(string fileId, int index, string filename); public string FileId { get; set; } @@ -4980,18 +4996,16 @@ public class OpenAIResponseClient { public virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, IEnumerable include = null, int? startingAfter = null, bool? includeObfuscation = null, CancellationToken cancellationToken = default); } public static class OpenAIResponsesModelFactory { - public static MessageResponseItem MessageResponseItem(string id = null, MessageRole role = MessageRole.Assistant, MessageStatus? status = null); public static OpenAIResponse OpenAIResponse(string id = null, DateTimeOffset createdAt = default, ResponseStatus? status = null, ResponseError error = null, ResponseTokenUsage usage = null, string endUserId = null, ResponseReasoningOptions reasoningOptions = null, int? maxOutputTokenCount = null, ResponseTextOptions textOptions = null, ResponseTruncationMode? truncationMode = null, ResponseIncompleteStatusDetails incompleteStatusDetails = null, IEnumerable outputItems = null, bool parallelToolCallsEnabled = false, ResponseToolChoice toolChoice = null, string model = null, IDictionary metadata = null, float? temperature = null, float? topP = null, ResponseServiceTier? serviceTier = null, string previousResponseId = null, bool? backgroundModeEnabled = null, string instructions = null, IEnumerable tools = null); - public static ReasoningResponseItem ReasoningResponseItem(string id = null, string encryptedContent = null, ReasoningStatus? status = null, IEnumerable summaryParts = null); - public static ReasoningResponseItem ReasoningResponseItem(string id = null, string encryptedContent = null, ReasoningStatus? status = null, string summaryText = null); + public static ReasoningResponseItem ReasoningResponseItem(string id = null, string encryptedContent = null, ReasoningStatus? status = null, IEnumerable summary = null); public static ReferenceResponseItem ReferenceResponseItem(string id = null); } public class ReasoningResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public ReasoningResponseItem(IEnumerable summaryParts); + public ReasoningResponseItem(IEnumerable summary); public ReasoningResponseItem(string summaryText); public string EncryptedContent { get; set; } public ReasoningStatus? Status { get; } - public IList SummaryParts { get; } + public IList Summary { get; } public string GetSummaryText(); protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); @@ -5199,12 +5213,12 @@ public class ResponseItem : IJsonModel, IPersistableModel contentParts); - public static MessageResponseItem CreateAssistantMessageItem(string outputTextContent, IEnumerable annotations = null); + public static AssistantMessageResponseItem CreateAssistantMessageItem(IEnumerable content); + public static AssistantMessageResponseItem CreateAssistantMessageItem(string outputTextContent); public static ComputerCallResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, ComputerCallOutput output); - public static MessageResponseItem CreateDeveloperMessageItem(IEnumerable contentParts); - public static MessageResponseItem CreateDeveloperMessageItem(string inputTextContent); + public static DeveloperMessageResponseItem CreateDeveloperMessageItem(IEnumerable content); + public static DeveloperMessageResponseItem CreateDeveloperMessageItem(string inputTextContent); public static FileSearchCallResponseItem CreateFileSearchCallItem(IEnumerable queries); public static FunctionCallResponseItem CreateFunctionCallItem(string callId, string functionName, BinaryData functionArguments); public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput); @@ -5212,13 +5226,13 @@ public class ResponseItem : IJsonModel, IPersistableModel toolDefinitions); - public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryParts); + public static ReasoningResponseItem CreateReasoningItem(IEnumerable summary); public static ReasoningResponseItem CreateReasoningItem(string summaryText); public static ReferenceResponseItem CreateReferenceItem(string id); - public static MessageResponseItem CreateSystemMessageItem(IEnumerable contentParts); - public static MessageResponseItem CreateSystemMessageItem(string inputTextContent); - public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts); - public static MessageResponseItem CreateUserMessageItem(string inputTextContent); + public static SystemMessageResponseItem CreateSystemMessageItem(IEnumerable content); + public static SystemMessageResponseItem CreateSystemMessageItem(string inputTextContent); + public static UserMessageResponseItem CreateUserMessageItem(IEnumerable content); + public static UserMessageResponseItem CreateUserMessageItem(string inputTextContent); public static WebSearchCallResponseItem CreateWebSearchCallItem(); protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); @@ -5862,6 +5876,14 @@ public class StreamingResponseWebSearchCallSearchingUpdate : StreamingResponseUp protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + public class SystemMessageResponseItem : MessageResponseItem, IJsonModel, IPersistableModel { + public SystemMessageResponseItem(IEnumerable content); + public SystemMessageResponseItem(string inputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class UriCitationMessageAnnotation : ResponseMessageAnnotation, IJsonModel, IPersistableModel { public UriCitationMessageAnnotation(Uri uri, int startIndex, int endIndex, string title); public int EndIndex { get; set; } @@ -5873,6 +5895,14 @@ public class UriCitationMessageAnnotation : ResponseMessageAnnotation, IJsonMode protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + public class UserMessageResponseItem : MessageResponseItem, IJsonModel, IPersistableModel { + public UserMessageResponseItem(IEnumerable content); + public UserMessageResponseItem(string inputTextContent); + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class WebSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { public WebSearchCallResponseItem(); public WebSearchCallStatus? Status { get; } diff --git a/specification/client/responses.client.tsp b/specification/client/responses.client.tsp index 839fa9ef6..9dec5db9d 100644 --- a/specification/client/responses.client.tsp +++ b/specification/client/responses.client.tsp @@ -31,7 +31,6 @@ using TypeSpec.HttpClient.CSharp; @@clientName(FunctionToolCallOutputItemResource.output, "FunctionOutput"); @@visibility(ReasoningItemResource.status, Lifecycle.Read); -@@clientName(ReasoningItemResource.summary, "SummaryParts"); @@visibility(WebSearchToolCallItemResource.status, Lifecycle.Read); diff --git a/src/Custom/Responses/Internal/GeneratorStubs.cs b/src/Custom/Responses/Internal/GeneratorStubs.cs index 8d660e417..b3f88c5ae 100644 --- a/src/Custom/Responses/Internal/GeneratorStubs.cs +++ b/src/Custom/Responses/Internal/GeneratorStubs.cs @@ -55,7 +55,6 @@ namespace OpenAI.Responses; [CodeGenType("ResponsesAssistantMessageItemParam")] internal partial class InternalResponsesAssistantMessageItemParam {} [CodeGenType("ResponsesDeveloperMessageItemParam")] internal partial class InternalResponsesDeveloperMessageItemParam {} [CodeGenType("ResponsesMessageItemParam")] internal partial class InternalResponsesMessageItemParam {} -[CodeGenType("ResponsesMessageRole")] internal readonly partial struct InternalResponsesMessageRole {} [CodeGenType("ResponsesSystemMessageItemParam")] internal partial class InternalResponsesSystemMessageItemParam {} [CodeGenType("ResponseStreamEventType")] internal readonly partial struct InternalResponseStreamEventType {} [CodeGenType("ResponsesUserMessageItemParam")] internal partial class InternalResponsesUserMessageItemParam {} diff --git a/src/Custom/Responses/Internal/InternalMessageRoleEx.cs b/src/Custom/Responses/Internal/InternalMessageRoleEx.cs new file mode 100644 index 000000000..310165ad1 --- /dev/null +++ b/src/Custom/Responses/Internal/InternalMessageRoleEx.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesMessageRole")] +internal readonly partial struct InternalMessageRoleEx +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs deleted file mode 100644 index c1410a393..000000000 --- a/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; - -namespace OpenAI.Responses; - -[CodeGenType("ResponsesAssistantMessageItemResource")] -internal partial class InternalResponsesAssistantMessage -{ - // CUSTOM: Use generalized content type. - [CodeGenMember("Content")] - public IList InternalContent { get; } -} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs deleted file mode 100644 index d2798a91b..000000000 --- a/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; - -namespace OpenAI.Responses; - -[CodeGenType("ResponsesDeveloperMessageItemResource")] -internal partial class InternalResponsesDeveloperMessage -{ - // CUSTOM: Use generalized content type. - [CodeGenMember("Content")] - public IList InternalContent { get; } -} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs deleted file mode 100644 index 20c9199f4..000000000 --- a/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; - -namespace OpenAI.Responses; - -[CodeGenType("ResponsesSystemMessageItemResource")] -internal partial class InternalResponsesSystemMessage -{ - // CUSTOM: Use generalized content type. - [CodeGenMember("Content")] - public IList InternalContent { get; } -} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs deleted file mode 100644 index cfeee6cf2..000000000 --- a/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; - -namespace OpenAI.Responses; - -[CodeGenType("ResponsesUserMessageItemResource")] -internal partial class InternalResponsesUserMessage -{ - // CUSTOM: Use generalized content type. - [CodeGenMember("Content")] - public IList InternalContent { get; } -} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Message/AssistantMessageResponseItem.cs b/src/Custom/Responses/Items/Message/AssistantMessageResponseItem.cs new file mode 100644 index 000000000..ffb997298 --- /dev/null +++ b/src/Custom/Responses/Items/Message/AssistantMessageResponseItem.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesAssistantMessageItemResource")] +public partial class AssistantMessageResponseItem +{ + // CUSTOM: Made internal and renamed to expose it via the base class. + [CodeGenMember("Content")] + internal IList InternalContent { get; } + + // CUSTOM: Renamed parameter. + public AssistantMessageResponseItem(IEnumerable content) : base(InternalMessageRoleEx.Assistant) + { + Argument.AssertNotNull(content, nameof(content)); + + InternalContent = content.ToList(); + } + + // CUSTOM: Added as a convenience. + public AssistantMessageResponseItem(string outputTextContent) : this([ResponseContentPart.CreateOutputTextPart(outputTextContent, [])]) + { + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Message/DeveloperMessageResponseItem.cs b/src/Custom/Responses/Items/Message/DeveloperMessageResponseItem.cs new file mode 100644 index 000000000..dc016797b --- /dev/null +++ b/src/Custom/Responses/Items/Message/DeveloperMessageResponseItem.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesDeveloperMessageItemResource")] +public partial class DeveloperMessageResponseItem +{ + // CUSTOM: Made internal and renamed to expose it via the base class. + [CodeGenMember("Content")] + internal IList InternalContent { get; } + + // CUSTOM: Renamed parameter. + public DeveloperMessageResponseItem(IEnumerable content) : base(InternalMessageRoleEx.Developer) + { + Argument.AssertNotNull(content, nameof(content)); + + InternalContent = content.ToList(); + } + + // CUSTOM: Added as a convenience. + public DeveloperMessageResponseItem(string inputTextContent) : this([ResponseContentPart.CreateInputTextPart(inputTextContent)]) + { + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Message/MessageResponseItem.cs b/src/Custom/Responses/Items/Message/MessageResponseItem.cs index 42c0b601d..4683b21dc 100644 --- a/src/Custom/Responses/Items/Message/MessageResponseItem.cs +++ b/src/Custom/Responses/Items/Message/MessageResponseItem.cs @@ -6,24 +6,46 @@ namespace OpenAI.Responses; [CodeGenType("ResponsesMessageItemResource")] public partial class MessageResponseItem { + // CUSTOM: Made internal in favor of a CLR enum. + [CodeGenMember("Role")] + internal InternalMessageRoleEx InternalRoleEx { get; set; } + // CUSTOM: Made nullable since this is a read-only property. [CodeGenMember("Status")] public MessageStatus? Status { get; } - // CUSTOM: Expose public enum type with 'Unknown' using internal extensible role. - [CodeGenMember("Role")] - internal InternalResponsesMessageRole InternalRole { get; set; } + // CUSTOM: Added to expose the content from derived types in the base type. + public IList Content + => (this as UserMessageResponseItem)?.InternalContent + ?? (this as AssistantMessageResponseItem)?.InternalContent + ?? (this as DeveloperMessageResponseItem)?.InternalContent + ?? (this as SystemMessageResponseItem)?.InternalContent; + + // CUSTOM: Added to expose the message role as a CLR enum that can handle unknown values. public MessageRole Role { - get => InternalRole.ToString().ToMessageRole(); - private set => InternalRole = value.ToSerialString(); + get + { + if (InternalRoleEx == InternalMessageRoleEx.Assistant) + { + return MessageRole.Assistant; + } + else if (InternalRoleEx == InternalMessageRoleEx.Developer) + { + return MessageRole.Developer; + } + else if (InternalRoleEx == InternalMessageRoleEx.System) + { + return MessageRole.System; + } + else if (InternalRoleEx == InternalMessageRoleEx.User) + { + return MessageRole.User; + } + else + { + return MessageRole.Unknown; + } + } } - - // CUSTOM: Recombined content from derived types. - public IList Content - => (this as InternalResponsesUserMessage)?.InternalContent - ?? (this as InternalResponsesDeveloperMessage)?.InternalContent - ?? (this as InternalResponsesSystemMessage)?.InternalContent - ?? (this as InternalResponsesAssistantMessage)?.InternalContent - ?? []; } diff --git a/src/Custom/Responses/Items/Message/MessageRole.Serialization.cs b/src/Custom/Responses/Items/Message/MessageRole.Serialization.cs deleted file mode 100644 index e18816cc0..000000000 --- a/src/Custom/Responses/Items/Message/MessageRole.Serialization.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; - -namespace OpenAI.Responses; - -internal static partial class MessageRoleExtensions -{ - public static string ToSerialString(this MessageRole value) => value switch - { - MessageRole.Assistant => InternalResponsesMessageRole.Assistant.ToString(), - MessageRole.Developer => InternalResponsesMessageRole.Developer.ToString(), - MessageRole.System => InternalResponsesMessageRole.System.ToString(), - MessageRole.User => InternalResponsesMessageRole.User.ToString(), - _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown MessageRole value."), - }; - - public static MessageRole ToMessageRole(this string value) - { - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesMessageRole.Assistant.ToString())) - { - return MessageRole.Assistant; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesMessageRole.Developer.ToString())) - { - return MessageRole.Developer; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesMessageRole.System.ToString())) - { - return MessageRole.System; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesMessageRole.User.ToString())) - { - return MessageRole.User; - } - return MessageRole.Unknown; - } -} diff --git a/src/Custom/Responses/Items/Message/MessageRole.cs b/src/Custom/Responses/Items/Message/MessageRole.cs index 61d3958e3..052269e54 100644 --- a/src/Custom/Responses/Items/Message/MessageRole.cs +++ b/src/Custom/Responses/Items/Message/MessageRole.cs @@ -2,16 +2,16 @@ namespace OpenAI.Responses; -// CUSTOM: -// - Added Experimental attribute. -// - Renamed. -// - Plain enum type, with Unknown, to convert from an underlying extensible enum. [Experimental("OPENAI001")] public enum MessageRole { Unknown = 0, + Assistant = 1, + Developer = 2, + System = 3, + User = 4, } \ No newline at end of file diff --git a/src/Custom/Responses/Items/Message/SystemMessageResponseItem.cs b/src/Custom/Responses/Items/Message/SystemMessageResponseItem.cs new file mode 100644 index 000000000..2a21b5406 --- /dev/null +++ b/src/Custom/Responses/Items/Message/SystemMessageResponseItem.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesSystemMessageItemResource")] +public partial class SystemMessageResponseItem +{ + // CUSTOM: Made internal and renamed to expose it via the base class. + [CodeGenMember("Content")] + internal IList InternalContent { get; } + + // CUSTOM: Renamed parameter. + public SystemMessageResponseItem(IEnumerable content) : base(InternalMessageRoleEx.System) + { + Argument.AssertNotNull(content, nameof(content)); + + InternalContent = content.ToList(); + } + + // CUSTOM: Added as a convenience. + public SystemMessageResponseItem(string inputTextContent) : this([ResponseContentPart.CreateInputTextPart(inputTextContent)]) + { + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Message/UserMessageResponseItem.cs b/src/Custom/Responses/Items/Message/UserMessageResponseItem.cs new file mode 100644 index 000000000..d5a8cefd1 --- /dev/null +++ b/src/Custom/Responses/Items/Message/UserMessageResponseItem.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesUserMessageItemResource")] +public partial class UserMessageResponseItem +{ + // CUSTOM: Made internal and renamed to expose it via the base class. + [CodeGenMember("Content")] + internal IList InternalContent { get; } + + // CUSTOM: Renamed parameter. + public UserMessageResponseItem(IEnumerable content) : base(InternalMessageRoleEx.User) + { + Argument.AssertNotNull(content, nameof(content)); + + InternalContent = content.ToList(); + } + + // CUSTOM: Added as a convenience. + public UserMessageResponseItem(string inputTextContent) : this([ResponseContentPart.CreateInputTextPart(inputTextContent)]) + { + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Reasoning/ReasoningResponseItem.cs b/src/Custom/Responses/Items/Reasoning/ReasoningResponseItem.cs index d5396d48c..479766ce9 100644 --- a/src/Custom/Responses/Items/Reasoning/ReasoningResponseItem.cs +++ b/src/Custom/Responses/Items/Reasoning/ReasoningResponseItem.cs @@ -10,16 +10,15 @@ public partial class ReasoningResponseItem [CodeGenMember("Status")] public ReasoningStatus? Status { get; } - // CUSTOM: Added for convenience. - public ReasoningResponseItem(string summaryText) : this(summaryParts: [new ReasoningSummaryTextPart(summaryText)]) + // CUSTOM: Added as a convenience. + public ReasoningResponseItem(string summaryText) : this(summary: [new ReasoningSummaryTextPart(summaryText)]) { - Argument.AssertNotNull(summaryText, nameof(summaryText)); } - // CUSTOM: Added for convenience. + // CUSTOM: Added as a convenience. public string GetSummaryText() { return string.Concat( - values: SummaryParts.Select(part => (part as ReasoningSummaryTextPart)?.Text ?? string.Empty)); + values: Summary.Select(part => (part as ReasoningSummaryTextPart)?.Text ?? string.Empty)); } } diff --git a/src/Custom/Responses/Items/ResponseItem.cs b/src/Custom/Responses/Items/ResponseItem.cs index ab5b674c6..747204289 100644 --- a/src/Custom/Responses/Items/ResponseItem.cs +++ b/src/Custom/Responses/Items/ResponseItem.cs @@ -14,59 +14,44 @@ public partial class ResponseItem [CodeGenMember("Id")] public string Id { get; internal set; } - public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts) + public static UserMessageResponseItem CreateUserMessageItem(IEnumerable content) { - Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); - return new InternalResponsesUserMessage(contentParts); + return new UserMessageResponseItem(content); } - public static MessageResponseItem CreateUserMessageItem(string inputTextContent) + public static UserMessageResponseItem CreateUserMessageItem(string inputTextContent) { - Argument.AssertNotNull(inputTextContent, nameof(inputTextContent)); - return new InternalResponsesUserMessage( - internalContent: [ResponseContentPart.CreateInputTextPart(inputTextContent)]); + return new UserMessageResponseItem(inputTextContent); } - public static MessageResponseItem CreateDeveloperMessageItem(IEnumerable contentParts) + public static DeveloperMessageResponseItem CreateDeveloperMessageItem(IEnumerable content) { - Argument.AssertNotNull(contentParts, nameof(contentParts)); - return new InternalResponsesDeveloperMessage(contentParts); + return new DeveloperMessageResponseItem(content); } - public static MessageResponseItem CreateDeveloperMessageItem(string inputTextContent) - { - Argument.AssertNotNull(inputTextContent, nameof(inputTextContent)); - return new InternalResponsesDeveloperMessage( - internalContent: [ResponseContentPart.CreateInputTextPart(inputTextContent)]); + public static DeveloperMessageResponseItem CreateDeveloperMessageItem(string inputTextContent) + {; + return new DeveloperMessageResponseItem(inputTextContent); } - public static MessageResponseItem CreateSystemMessageItem(IEnumerable contentParts) + public static SystemMessageResponseItem CreateSystemMessageItem(IEnumerable content) { - Argument.AssertNotNull(contentParts, nameof(contentParts)); - return new InternalResponsesSystemMessage(contentParts); + return new SystemMessageResponseItem(content); } - public static MessageResponseItem CreateSystemMessageItem(string inputTextContent) + public static SystemMessageResponseItem CreateSystemMessageItem(string inputTextContent) { - Argument.AssertNotNull(inputTextContent, nameof(inputTextContent)); - return new InternalResponsesSystemMessage( - internalContent: [ResponseContentPart.CreateInputTextPart(inputTextContent)]); + return new SystemMessageResponseItem(inputTextContent); } - public static MessageResponseItem CreateAssistantMessageItem(IEnumerable contentParts) + public static AssistantMessageResponseItem CreateAssistantMessageItem(IEnumerable content) { - Argument.AssertNotNull(contentParts, nameof(contentParts)); - return new InternalResponsesAssistantMessage(contentParts); + return new AssistantMessageResponseItem(content); } - public static MessageResponseItem CreateAssistantMessageItem(string outputTextContent, IEnumerable annotations = null) + public static AssistantMessageResponseItem CreateAssistantMessageItem(string outputTextContent) { - Argument.AssertNotNull(outputTextContent, nameof(outputTextContent)); - return new InternalResponsesAssistantMessage( - internalContent: - [ - new InternalItemContentOutputText(outputTextContent, annotations ?? []), - ]); + return new AssistantMessageResponseItem(outputTextContent); } [Experimental("OPENAICUA001")] @@ -101,9 +86,9 @@ public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string return new FunctionCallOutputResponseItem(callId, functionOutput); } - public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryParts) + public static ReasoningResponseItem CreateReasoningItem(IEnumerable summary) { - return new ReasoningResponseItem(summaryParts); + return new ReasoningResponseItem(summary); } public static ReasoningResponseItem CreateReasoningItem(string summaryText) diff --git a/src/Custom/Responses/OpenAIResponsesModelFactory.cs b/src/Custom/Responses/OpenAIResponsesModelFactory.cs index fa96d3d3c..39668c6f2 100644 --- a/src/Custom/Responses/OpenAIResponsesModelFactory.cs +++ b/src/Custom/Responses/OpenAIResponsesModelFactory.cs @@ -68,63 +68,19 @@ public static OpenAIResponse OpenAIResponse( patch: default); } - /// Initializes a new instance of . - /// A new instance for mocking. - public static MessageResponseItem MessageResponseItem( - string id = null, - MessageRole role = MessageRole.Assistant, - MessageStatus? status = null) - { - MessageResponseItem item = new( - kind: InternalItemType.Message, - id: id, - patch: default, - status: status, - internalRole: role.ToString()); - - return item; - } - /// Initializes a new instance of . /// The ID of the reasoning response item. /// The encrypted reasoning content. /// The status of the reasoning response item. - /// The collection of summary parts. - /// A new instance for mocking. - public static ReasoningResponseItem ReasoningResponseItem( - string id = null, - string encryptedContent = null, - ReasoningStatus? status = null, - IEnumerable summaryParts = null) - { - summaryParts ??= new List(); - - var item = new ReasoningResponseItem( - kind: InternalItemType.Reasoning, - id: id, - patch: default, - encryptedContent: encryptedContent, - status: status, - summaryParts: summaryParts.ToList()); - - return item; - } - - /// Initializes a new instance of with summary text. - /// The ID of the reasoning response item. - /// The encrypted reasoning content. - /// The status of the reasoning response item. - /// The summary text to create a ReasoningSummaryTextPart from. + /// The collection of summary parts. /// A new instance for mocking. public static ReasoningResponseItem ReasoningResponseItem( string id = null, string encryptedContent = null, ReasoningStatus? status = null, - string summaryText = null) + IEnumerable summary = null) { - var summaryParts = !string.IsNullOrEmpty(summaryText) - ? new List { new ReasoningSummaryTextPart(summaryText) } - : new List(); + summary ??= new List(); var item = new ReasoningResponseItem( kind: InternalItemType.Reasoning, @@ -132,7 +88,7 @@ public static ReasoningResponseItem ReasoningResponseItem( patch: default, encryptedContent: encryptedContent, status: status, - summaryParts: summaryParts); + summary: summary.ToList()); return item; } diff --git a/src/Generated/Models/OpenAIContext.cs b/src/Generated/Models/OpenAIContext.cs index 5d1b262c2..d8a334ef4 100644 --- a/src/Generated/Models/OpenAIContext.cs +++ b/src/Generated/Models/OpenAIContext.cs @@ -31,6 +31,7 @@ namespace OpenAI [ModelReaderWriterBuildable(typeof(AssistantCollectionOptions))] [ModelReaderWriterBuildable(typeof(AssistantCreationOptions))] [ModelReaderWriterBuildable(typeof(AssistantDeletionResult))] + [ModelReaderWriterBuildable(typeof(AssistantMessageResponseItem))] [ModelReaderWriterBuildable(typeof(AssistantModificationOptions))] [ModelReaderWriterBuildable(typeof(AssistantResponseFormat))] [ModelReaderWriterBuildable(typeof(AssistantThread))] @@ -108,6 +109,7 @@ namespace OpenAI [ModelReaderWriterBuildable(typeof(DeleteContainerFileResponse))] [ModelReaderWriterBuildable(typeof(DeleteContainerResponse))] [ModelReaderWriterBuildable(typeof(DeveloperChatMessage))] + [ModelReaderWriterBuildable(typeof(DeveloperMessageResponseItem))] [ModelReaderWriterBuildable(typeof(EmbeddingGenerationOptions))] [ModelReaderWriterBuildable(typeof(EmbeddingTokenUsage))] [ModelReaderWriterBuildable(typeof(FileChunkingStrategy))] @@ -503,17 +505,13 @@ namespace OpenAI [ModelReaderWriterBuildable(typeof(InternalResponseReasoningDoneEvent))] [ModelReaderWriterBuildable(typeof(InternalResponseReasoningSummaryDeltaEvent))] [ModelReaderWriterBuildable(typeof(InternalResponseReasoningSummaryDoneEvent))] - [ModelReaderWriterBuildable(typeof(InternalResponsesAssistantMessage))] [ModelReaderWriterBuildable(typeof(InternalResponsesAssistantMessageItemParam))] - [ModelReaderWriterBuildable(typeof(InternalResponsesDeveloperMessage))] [ModelReaderWriterBuildable(typeof(InternalResponsesDeveloperMessageItemParam))] [ModelReaderWriterBuildable(typeof(InternalResponsesMessageItemParam))] - [ModelReaderWriterBuildable(typeof(InternalResponsesSystemMessage))] [ModelReaderWriterBuildable(typeof(InternalResponsesSystemMessageItemParam))] [ModelReaderWriterBuildable(typeof(InternalResponsesTextFormatJsonObject))] [ModelReaderWriterBuildable(typeof(InternalResponsesTextFormatJsonSchema))] [ModelReaderWriterBuildable(typeof(InternalResponsesTextFormatText))] - [ModelReaderWriterBuildable(typeof(InternalResponsesUserMessage))] [ModelReaderWriterBuildable(typeof(InternalResponsesUserMessageItemParam))] [ModelReaderWriterBuildable(typeof(InternalRunObjectRequiredActionSubmitToolOutputs))] [ModelReaderWriterBuildable(typeof(InternalRunRequiredAction))] @@ -762,6 +760,7 @@ namespace OpenAI [ModelReaderWriterBuildable(typeof(StreamingResponseWebSearchCallInProgressUpdate))] [ModelReaderWriterBuildable(typeof(StreamingResponseWebSearchCallSearchingUpdate))] [ModelReaderWriterBuildable(typeof(SystemChatMessage))] + [ModelReaderWriterBuildable(typeof(SystemMessageResponseItem))] [ModelReaderWriterBuildable(typeof(ThreadCreationOptions))] [ModelReaderWriterBuildable(typeof(ThreadDeletionResult))] [ModelReaderWriterBuildable(typeof(ThreadMessage))] @@ -802,6 +801,7 @@ namespace OpenAI [ModelReaderWriterBuildable(typeof(UnknownRunStepObjectStepDetails))] [ModelReaderWriterBuildable(typeof(UriCitationMessageAnnotation))] [ModelReaderWriterBuildable(typeof(UserChatMessage))] + [ModelReaderWriterBuildable(typeof(UserMessageResponseItem))] [ModelReaderWriterBuildable(typeof(ValidateGraderRequest))] [ModelReaderWriterBuildable(typeof(ValidateGraderResponse))] [ModelReaderWriterBuildable(typeof(VectorStore))] diff --git a/src/Generated/Models/Responses/InternalResponsesUserMessage.Serialization.cs b/src/Generated/Models/Responses/AssistantMessageResponseItem.Serialization.cs similarity index 80% rename from src/Generated/Models/Responses/InternalResponsesUserMessage.Serialization.cs rename to src/Generated/Models/Responses/AssistantMessageResponseItem.Serialization.cs index 88c069ee9..1fc49d992 100644 --- a/src/Generated/Models/Responses/InternalResponsesUserMessage.Serialization.cs +++ b/src/Generated/Models/Responses/AssistantMessageResponseItem.Serialization.cs @@ -11,13 +11,13 @@ namespace OpenAI.Responses { - internal partial class InternalResponsesUserMessage : MessageResponseItem, IJsonModel + public partial class AssistantMessageResponseItem : MessageResponseItem, IJsonModel { - internal InternalResponsesUserMessage() : this(default, null, default, default, default, null) + internal AssistantMessageResponseItem() : this(default, null, default, default, default, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. if (Patch.Contains("$"u8)) @@ -34,10 +34,10 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesUserMessage)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(AssistantMessageResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. @@ -69,20 +69,20 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. } - InternalResponsesUserMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesUserMessage)JsonModelCreateCore(ref reader, options); + AssistantMessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (AssistantMessageResponseItem)JsonModelCreateCore(ref reader, options); protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesUserMessage)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(AssistantMessageResponseItem)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesUserMessage(document.RootElement, null, options); + return DeserializeAssistantMessageResponseItem(document.RootElement, null, options); } - internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMessage(JsonElement element, BinaryData data, ModelReaderWriterOptions options) + internal static AssistantMessageResponseItem DeserializeAssistantMessageResponseItem(JsonElement element, BinaryData data, ModelReaderWriterOptions options) { if (element.ValueKind == JsonValueKind.Null) { @@ -94,7 +94,7 @@ internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMes JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. MessageStatus? status = default; - InternalResponsesMessageRole internalRole = default; + InternalMessageRoleEx internalRoleEx = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { @@ -115,7 +115,7 @@ internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMes } if (prop.NameEquals("role"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + internalRoleEx = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) @@ -130,47 +130,47 @@ internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMes } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); } - return new InternalResponsesUserMessage( + return new AssistantMessageResponseItem( kind, id, patch, status, - internalRole, + internalRoleEx, internalContent); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(InternalResponsesUserMessage)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(AssistantMessageResponseItem)} does not support writing '{options.Format}' format."); } } - InternalResponsesUserMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesUserMessage)PersistableModelCreateCore(data, options); + AssistantMessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (AssistantMessageResponseItem)PersistableModelCreateCore(data, options); protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": using (JsonDocument document = JsonDocument.Parse(data, ModelSerializationExtensions.JsonDocumentOptions)) { - return DeserializeInternalResponsesUserMessage(document.RootElement, data, options); + return DeserializeAssistantMessageResponseItem(document.RootElement, data, options); } default: - throw new FormatException($"The model {nameof(InternalResponsesUserMessage)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(AssistantMessageResponseItem)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. private bool PropagateGet(ReadOnlySpan jsonPath, out JsonPatch.EncodedValue value) diff --git a/src/Generated/Models/Responses/InternalResponsesUserMessage.cs b/src/Generated/Models/Responses/AssistantMessageResponseItem.cs similarity index 56% rename from src/Generated/Models/Responses/InternalResponsesUserMessage.cs rename to src/Generated/Models/Responses/AssistantMessageResponseItem.cs index c69c68ace..83b0fca89 100644 --- a/src/Generated/Models/Responses/InternalResponsesUserMessage.cs +++ b/src/Generated/Models/Responses/AssistantMessageResponseItem.cs @@ -4,22 +4,16 @@ using System.ClientModel.Primitives; using System.Collections.Generic; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using OpenAI; namespace OpenAI.Responses { - internal partial class InternalResponsesUserMessage : MessageResponseItem + [Experimental("OPENAI001")] + public partial class AssistantMessageResponseItem : MessageResponseItem { - public InternalResponsesUserMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.User) - { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - - InternalContent = internalContent.ToList(); - } - #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesUserMessage(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(kind, id, patch, status, internalRole) + internal AssistantMessageResponseItem(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalMessageRoleEx internalRoleEx, IList internalContent) : base(kind, id, patch, status, internalRoleEx) { // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalResponsesSystemMessage.Serialization.cs b/src/Generated/Models/Responses/DeveloperMessageResponseItem.Serialization.cs similarity index 75% rename from src/Generated/Models/Responses/InternalResponsesSystemMessage.Serialization.cs rename to src/Generated/Models/Responses/DeveloperMessageResponseItem.Serialization.cs index 1293fa162..563a811ba 100644 --- a/src/Generated/Models/Responses/InternalResponsesSystemMessage.Serialization.cs +++ b/src/Generated/Models/Responses/DeveloperMessageResponseItem.Serialization.cs @@ -11,13 +11,13 @@ namespace OpenAI.Responses { - internal partial class InternalResponsesSystemMessage : MessageResponseItem, IJsonModel + public partial class DeveloperMessageResponseItem : MessageResponseItem, IJsonModel { - internal InternalResponsesSystemMessage() : this(default, null, default, default, default, null) + internal DeveloperMessageResponseItem() : this(default, null, default, default, default, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. if (Patch.Contains("$"u8)) @@ -34,10 +34,10 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesSystemMessage)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(DeveloperMessageResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. @@ -69,20 +69,20 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. } - InternalResponsesSystemMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesSystemMessage)JsonModelCreateCore(ref reader, options); + DeveloperMessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (DeveloperMessageResponseItem)JsonModelCreateCore(ref reader, options); protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesSystemMessage)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(DeveloperMessageResponseItem)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesSystemMessage(document.RootElement, null, options); + return DeserializeDeveloperMessageResponseItem(document.RootElement, null, options); } - internal static InternalResponsesSystemMessage DeserializeInternalResponsesSystemMessage(JsonElement element, BinaryData data, ModelReaderWriterOptions options) + internal static DeveloperMessageResponseItem DeserializeDeveloperMessageResponseItem(JsonElement element, BinaryData data, ModelReaderWriterOptions options) { if (element.ValueKind == JsonValueKind.Null) { @@ -94,7 +94,7 @@ internal static InternalResponsesSystemMessage DeserializeInternalResponsesSyste JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. MessageStatus? status = default; - InternalResponsesMessageRole internalRole = default; + InternalMessageRoleEx internalRoleEx = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { @@ -115,7 +115,7 @@ internal static InternalResponsesSystemMessage DeserializeInternalResponsesSyste } if (prop.NameEquals("role"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + internalRoleEx = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) @@ -130,47 +130,47 @@ internal static InternalResponsesSystemMessage DeserializeInternalResponsesSyste } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); } - return new InternalResponsesSystemMessage( + return new DeveloperMessageResponseItem( kind, id, patch, status, - internalRole, + internalRoleEx, internalContent); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(InternalResponsesSystemMessage)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(DeveloperMessageResponseItem)} does not support writing '{options.Format}' format."); } } - InternalResponsesSystemMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesSystemMessage)PersistableModelCreateCore(data, options); + DeveloperMessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (DeveloperMessageResponseItem)PersistableModelCreateCore(data, options); protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": using (JsonDocument document = JsonDocument.Parse(data, ModelSerializationExtensions.JsonDocumentOptions)) { - return DeserializeInternalResponsesSystemMessage(document.RootElement, data, options); + return DeserializeDeveloperMessageResponseItem(document.RootElement, data, options); } default: - throw new FormatException($"The model {nameof(InternalResponsesSystemMessage)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(DeveloperMessageResponseItem)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. private bool PropagateGet(ReadOnlySpan jsonPath, out JsonPatch.EncodedValue value) diff --git a/src/Generated/Models/Responses/InternalResponsesSystemMessage.cs b/src/Generated/Models/Responses/DeveloperMessageResponseItem.cs similarity index 50% rename from src/Generated/Models/Responses/InternalResponsesSystemMessage.cs rename to src/Generated/Models/Responses/DeveloperMessageResponseItem.cs index 5097cec81..7ad829719 100644 --- a/src/Generated/Models/Responses/InternalResponsesSystemMessage.cs +++ b/src/Generated/Models/Responses/DeveloperMessageResponseItem.cs @@ -4,22 +4,16 @@ using System.ClientModel.Primitives; using System.Collections.Generic; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using OpenAI; namespace OpenAI.Responses { - internal partial class InternalResponsesSystemMessage : MessageResponseItem + [Experimental("OPENAI001")] + public partial class DeveloperMessageResponseItem : MessageResponseItem { - public InternalResponsesSystemMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.System) - { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - - InternalContent = internalContent.ToList(); - } - #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesSystemMessage(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(kind, id, patch, status, internalRole) + internal DeveloperMessageResponseItem(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalMessageRoleEx internalRoleEx, IList internalContent) : base(kind, id, patch, status, internalRoleEx) { // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalMessageRoleEx.cs b/src/Generated/Models/Responses/InternalMessageRoleEx.cs new file mode 100644 index 000000000..7b9b1abfc --- /dev/null +++ b/src/Generated/Models/Responses/InternalMessageRoleEx.cs @@ -0,0 +1,52 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalMessageRoleEx : IEquatable + { + private readonly string _value; + private const string SystemValue = "system"; + private const string DeveloperValue = "developer"; + private const string UserValue = "user"; + private const string AssistantValue = "assistant"; + + public InternalMessageRoleEx(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalMessageRoleEx System { get; } = new InternalMessageRoleEx(SystemValue); + + internal static InternalMessageRoleEx Developer { get; } = new InternalMessageRoleEx(DeveloperValue); + + internal static InternalMessageRoleEx User { get; } = new InternalMessageRoleEx(UserValue); + + internal static InternalMessageRoleEx Assistant { get; } = new InternalMessageRoleEx(AssistantValue); + + public static bool operator ==(InternalMessageRoleEx left, InternalMessageRoleEx right) => left.Equals(right); + + public static bool operator !=(InternalMessageRoleEx left, InternalMessageRoleEx right) => !left.Equals(right); + + public static implicit operator InternalMessageRoleEx(string value) => new InternalMessageRoleEx(value); + + public static implicit operator InternalMessageRoleEx?(string value) => value == null ? null : new InternalMessageRoleEx(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalMessageRoleEx other && Equals(other); + + public bool Equals(InternalMessageRoleEx other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0; + + public override string ToString() => _value; + } +} diff --git a/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.Serialization.cs b/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.Serialization.cs index 373ddcf89..b39c71734 100644 --- a/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.Serialization.cs +++ b/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.Serialization.cs @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesAssistantMessageItemParam : InternalResponsesMessageItemParam, IJsonModel { - internal InternalResponsesAssistantMessageItemParam() : this(default, default, InternalResponsesMessageRole.Assistant, null) + internal InternalResponsesAssistantMessageItemParam() : this(default, default, InternalMessageRoleEx.Assistant, null) { } @@ -92,7 +92,7 @@ internal static InternalResponsesAssistantMessageItemParam DeserializeInternalRe #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - InternalResponsesMessageRole role = default; + InternalMessageRoleEx role = default; IList content = default; foreach (var prop in element.EnumerateObject()) { @@ -103,7 +103,7 @@ internal static InternalResponsesAssistantMessageItemParam DeserializeInternalRe } if (prop.NameEquals("role"u8)) { - role = new InternalResponsesMessageRole(prop.Value.GetString()); + role = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) diff --git a/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.cs b/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.cs index 48565ec86..4242fb37a 100644 --- a/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.cs +++ b/src/Generated/Models/Responses/InternalResponsesAssistantMessageItemParam.cs @@ -11,7 +11,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesAssistantMessageItemParam : InternalResponsesMessageItemParam { - public InternalResponsesAssistantMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.Assistant) + public InternalResponsesAssistantMessageItemParam(IEnumerable content) : base(InternalMessageRoleEx.Assistant) { Argument.AssertNotNull(content, nameof(content)); @@ -19,7 +19,7 @@ public InternalResponsesAssistantMessageItemParam(IEnumerable content) : base(kind, patch, role) + internal InternalResponsesAssistantMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalMessageRoleEx role, IList content) : base(kind, patch, role) { // Plugin customization: ensure initialization of collections Content = content ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.Serialization.cs b/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.Serialization.cs index 5539edfa3..d6fc4d788 100644 --- a/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.Serialization.cs +++ b/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.Serialization.cs @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesDeveloperMessageItemParam : InternalResponsesMessageItemParam, IJsonModel { - internal InternalResponsesDeveloperMessageItemParam() : this(default, default, InternalResponsesMessageRole.Developer, null) + internal InternalResponsesDeveloperMessageItemParam() : this(default, default, InternalMessageRoleEx.Developer, null) { } @@ -92,7 +92,7 @@ internal static InternalResponsesDeveloperMessageItemParam DeserializeInternalRe #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - InternalResponsesMessageRole role = default; + InternalMessageRoleEx role = default; IList content = default; foreach (var prop in element.EnumerateObject()) { @@ -103,7 +103,7 @@ internal static InternalResponsesDeveloperMessageItemParam DeserializeInternalRe } if (prop.NameEquals("role"u8)) { - role = new InternalResponsesMessageRole(prop.Value.GetString()); + role = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) diff --git a/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.cs b/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.cs index eb9f61be0..c80d3d6fb 100644 --- a/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.cs +++ b/src/Generated/Models/Responses/InternalResponsesDeveloperMessageItemParam.cs @@ -11,7 +11,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesDeveloperMessageItemParam : InternalResponsesMessageItemParam { - public InternalResponsesDeveloperMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.Developer) + public InternalResponsesDeveloperMessageItemParam(IEnumerable content) : base(InternalMessageRoleEx.Developer) { Argument.AssertNotNull(content, nameof(content)); @@ -19,7 +19,7 @@ public InternalResponsesDeveloperMessageItemParam(IEnumerable content) : base(kind, patch, role) + internal InternalResponsesDeveloperMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalMessageRoleEx role, IList content) : base(kind, patch, role) { // Plugin customization: ensure initialization of collections Content = content ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalResponsesMessageItemParam.cs b/src/Generated/Models/Responses/InternalResponsesMessageItemParam.cs index e8d420930..1446b3f0b 100644 --- a/src/Generated/Models/Responses/InternalResponsesMessageItemParam.cs +++ b/src/Generated/Models/Responses/InternalResponsesMessageItemParam.cs @@ -8,18 +8,18 @@ namespace OpenAI.Responses { internal partial class InternalResponsesMessageItemParam : InternalItemParam { - internal InternalResponsesMessageItemParam(InternalResponsesMessageRole role) : base(InternalItemType.Message) + internal InternalResponsesMessageItemParam(InternalMessageRoleEx role) : base(InternalItemType.Message) { Role = role; } #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalResponsesMessageRole role) : base(kind, patch) + internal InternalResponsesMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalMessageRoleEx role) : base(kind, patch) { Role = role; } #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesMessageRole Role { get; set; } + internal InternalMessageRoleEx Role { get; set; } } } diff --git a/src/Generated/Models/Responses/InternalResponsesMessageRole.cs b/src/Generated/Models/Responses/InternalResponsesMessageRole.cs deleted file mode 100644 index 971b3abf9..000000000 --- a/src/Generated/Models/Responses/InternalResponsesMessageRole.cs +++ /dev/null @@ -1,52 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesMessageRole : IEquatable - { - private readonly string _value; - private const string SystemValue = "system"; - private const string DeveloperValue = "developer"; - private const string UserValue = "user"; - private const string AssistantValue = "assistant"; - - public InternalResponsesMessageRole(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - internal static InternalResponsesMessageRole System { get; } = new InternalResponsesMessageRole(SystemValue); - - internal static InternalResponsesMessageRole Developer { get; } = new InternalResponsesMessageRole(DeveloperValue); - - internal static InternalResponsesMessageRole User { get; } = new InternalResponsesMessageRole(UserValue); - - internal static InternalResponsesMessageRole Assistant { get; } = new InternalResponsesMessageRole(AssistantValue); - - public static bool operator ==(InternalResponsesMessageRole left, InternalResponsesMessageRole right) => left.Equals(right); - - public static bool operator !=(InternalResponsesMessageRole left, InternalResponsesMessageRole right) => !left.Equals(right); - - public static implicit operator InternalResponsesMessageRole(string value) => new InternalResponsesMessageRole(value); - - public static implicit operator InternalResponsesMessageRole?(string value) => value == null ? null : new InternalResponsesMessageRole(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesMessageRole other && Equals(other); - - public bool Equals(InternalResponsesMessageRole other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0; - - public override string ToString() => _value; - } -} diff --git a/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.Serialization.cs b/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.Serialization.cs index cee546c85..1d7ae67f2 100644 --- a/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.Serialization.cs +++ b/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.Serialization.cs @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesSystemMessageItemParam : InternalResponsesMessageItemParam, IJsonModel { - internal InternalResponsesSystemMessageItemParam() : this(default, default, InternalResponsesMessageRole.System, null) + internal InternalResponsesSystemMessageItemParam() : this(default, default, InternalMessageRoleEx.System, null) { } @@ -92,7 +92,7 @@ internal static InternalResponsesSystemMessageItemParam DeserializeInternalRespo #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - InternalResponsesMessageRole role = default; + InternalMessageRoleEx role = default; IList content = default; foreach (var prop in element.EnumerateObject()) { @@ -103,7 +103,7 @@ internal static InternalResponsesSystemMessageItemParam DeserializeInternalRespo } if (prop.NameEquals("role"u8)) { - role = new InternalResponsesMessageRole(prop.Value.GetString()); + role = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) diff --git a/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.cs b/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.cs index f7ca25b96..001688157 100644 --- a/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.cs +++ b/src/Generated/Models/Responses/InternalResponsesSystemMessageItemParam.cs @@ -11,7 +11,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesSystemMessageItemParam : InternalResponsesMessageItemParam { - public InternalResponsesSystemMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.System) + public InternalResponsesSystemMessageItemParam(IEnumerable content) : base(InternalMessageRoleEx.System) { Argument.AssertNotNull(content, nameof(content)); @@ -19,7 +19,7 @@ public InternalResponsesSystemMessageItemParam(IEnumerable } #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesSystemMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalResponsesMessageRole role, IList content) : base(kind, patch, role) + internal InternalResponsesSystemMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalMessageRoleEx role, IList content) : base(kind, patch, role) { // Plugin customization: ensure initialization of collections Content = content ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.Serialization.cs b/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.Serialization.cs index 0c39a9ee7..f8884bb5e 100644 --- a/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.Serialization.cs +++ b/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.Serialization.cs @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesUserMessageItemParam : InternalResponsesMessageItemParam, IJsonModel { - internal InternalResponsesUserMessageItemParam() : this(default, default, InternalResponsesMessageRole.User, null) + internal InternalResponsesUserMessageItemParam() : this(default, default, InternalMessageRoleEx.User, null) { } @@ -92,7 +92,7 @@ internal static InternalResponsesUserMessageItemParam DeserializeInternalRespons #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - InternalResponsesMessageRole role = default; + InternalMessageRoleEx role = default; IList content = default; foreach (var prop in element.EnumerateObject()) { @@ -103,7 +103,7 @@ internal static InternalResponsesUserMessageItemParam DeserializeInternalRespons } if (prop.NameEquals("role"u8)) { - role = new InternalResponsesMessageRole(prop.Value.GetString()); + role = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) diff --git a/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.cs b/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.cs index a2c30ced3..2d1aae718 100644 --- a/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.cs +++ b/src/Generated/Models/Responses/InternalResponsesUserMessageItemParam.cs @@ -11,7 +11,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesUserMessageItemParam : InternalResponsesMessageItemParam { - public InternalResponsesUserMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.User) + public InternalResponsesUserMessageItemParam(IEnumerable content) : base(InternalMessageRoleEx.User) { Argument.AssertNotNull(content, nameof(content)); @@ -19,7 +19,7 @@ public InternalResponsesUserMessageItemParam(IEnumerable co } #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesUserMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalResponsesMessageRole role, IList content) : base(kind, patch, role) + internal InternalResponsesUserMessageItemParam(InternalItemType kind, in JsonPatch patch, InternalMessageRoleEx role, IList content) : base(kind, patch, role) { // Plugin customization: ensure initialization of collections Content = content ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.Serialization.cs b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.Serialization.cs index d6d73d5d0..5b97f1fd7 100644 --- a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.Serialization.cs +++ b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.Serialization.cs @@ -70,7 +70,7 @@ internal static InternalUnknownResponsesMessageItemResource DeserializeInternalU JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. MessageStatus? status = default; - InternalResponsesMessageRole internalRole = default; + InternalMessageRoleEx internalRoleEx = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) @@ -90,12 +90,12 @@ internal static InternalUnknownResponsesMessageItemResource DeserializeInternalU } if (prop.NameEquals("role"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + internalRoleEx = new InternalMessageRoleEx(prop.Value.GetString()); continue; } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); } - return new InternalUnknownResponsesMessageItemResource(kind, id, patch, status, internalRole); + return new InternalUnknownResponsesMessageItemResource(kind, id, patch, status, internalRoleEx); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.cs b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.cs index 5ffe51da8..2f72531ed 100644 --- a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.cs +++ b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResource.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses internal partial class InternalUnknownResponsesMessageItemResource : MessageResponseItem { #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalUnknownResponsesMessageItemResource(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalResponsesMessageRole internalRole) : base(kind != default ? kind : "unknown", id, patch, status, internalRole != default ? internalRole : "unknown") + internal InternalUnknownResponsesMessageItemResource(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalMessageRoleEx internalRoleEx) : base(kind != default ? kind : "unknown", id, patch, status, internalRoleEx != default ? internalRoleEx : "unknown") { } #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. diff --git a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs index 66dcbc6d5..ae88fa1d4 100644 --- a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs +++ b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs @@ -68,7 +68,7 @@ internal static InternalUnknownResponsesMessageItemResourceItemParam Deserialize #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - InternalResponsesMessageRole role = default; + InternalMessageRoleEx role = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) @@ -78,7 +78,7 @@ internal static InternalUnknownResponsesMessageItemResourceItemParam Deserialize } if (prop.NameEquals("role"u8)) { - role = new InternalResponsesMessageRole(prop.Value.GetString()); + role = new InternalMessageRoleEx(prop.Value.GetString()); continue; } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); diff --git a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.cs b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.cs index 0c437a07b..1a956ce2e 100644 --- a/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.cs +++ b/src/Generated/Models/Responses/InternalUnknownResponsesMessageItemResourceItemParam.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses internal partial class InternalUnknownResponsesMessageItemResourceItemParam : InternalResponsesMessageItemParam { #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalUnknownResponsesMessageItemResourceItemParam(InternalItemType kind, in JsonPatch patch, InternalResponsesMessageRole role) : base(kind != default ? kind : "unknown", patch, role != default ? role : "unknown") + internal InternalUnknownResponsesMessageItemResourceItemParam(InternalItemType kind, in JsonPatch patch, InternalMessageRoleEx role) : base(kind != default ? kind : "unknown", patch, role != default ? role : "unknown") { } #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. diff --git a/src/Generated/Models/Responses/MessageResponseItem.Serialization.cs b/src/Generated/Models/Responses/MessageResponseItem.Serialization.cs index 1e5ab7654..14c86409c 100644 --- a/src/Generated/Models/Responses/MessageResponseItem.Serialization.cs +++ b/src/Generated/Models/Responses/MessageResponseItem.Serialization.cs @@ -49,7 +49,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (!Patch.Contains("$.role"u8)) { writer.WritePropertyName("role"u8); - writer.WriteStringValue(InternalRole.ToString()); + writer.WriteStringValue(InternalRoleEx.ToString()); } #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. } @@ -78,13 +78,13 @@ internal static MessageResponseItem DeserializeMessageResponseItem(JsonElement e switch (discriminator.GetString()) { case "user": - return InternalResponsesUserMessage.DeserializeInternalResponsesUserMessage(element, data, options); + return UserMessageResponseItem.DeserializeUserMessageResponseItem(element, data, options); case "system": - return InternalResponsesSystemMessage.DeserializeInternalResponsesSystemMessage(element, data, options); + return SystemMessageResponseItem.DeserializeSystemMessageResponseItem(element, data, options); case "developer": - return InternalResponsesDeveloperMessage.DeserializeInternalResponsesDeveloperMessage(element, data, options); + return DeveloperMessageResponseItem.DeserializeDeveloperMessageResponseItem(element, data, options); case "assistant": - return InternalResponsesAssistantMessage.DeserializeInternalResponsesAssistantMessage(element, data, options); + return AssistantMessageResponseItem.DeserializeAssistantMessageResponseItem(element, data, options); } } return InternalUnknownResponsesMessageItemResource.DeserializeInternalUnknownResponsesMessageItemResource(element, data, options); diff --git a/src/Generated/Models/Responses/MessageResponseItem.cs b/src/Generated/Models/Responses/MessageResponseItem.cs index bbd052e57..2be2b1d6f 100644 --- a/src/Generated/Models/Responses/MessageResponseItem.cs +++ b/src/Generated/Models/Responses/MessageResponseItem.cs @@ -10,16 +10,16 @@ namespace OpenAI.Responses [Experimental("OPENAI001")] public partial class MessageResponseItem : ResponseItem { - internal MessageResponseItem(InternalResponsesMessageRole internalRole) : base(InternalItemType.Message) + internal MessageResponseItem(InternalMessageRoleEx internalRoleEx) : base(InternalItemType.Message) { - InternalRole = internalRole; + InternalRoleEx = internalRoleEx; } #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal MessageResponseItem(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalResponsesMessageRole internalRole) : base(kind, id, patch) + internal MessageResponseItem(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalMessageRoleEx internalRoleEx) : base(kind, id, patch) { Status = status; - InternalRole = internalRole; + InternalRoleEx = internalRoleEx; } #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. } diff --git a/src/Generated/Models/Responses/ReasoningResponseItem.Serialization.cs b/src/Generated/Models/Responses/ReasoningResponseItem.Serialization.cs index 364e816ac..3d6e6e8c7 100644 --- a/src/Generated/Models/Responses/ReasoningResponseItem.Serialization.cs +++ b/src/Generated/Models/Responses/ReasoningResponseItem.Serialization.cs @@ -65,13 +65,13 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri { writer.WritePropertyName("summary"u8); writer.WriteStartArray(); - for (int i = 0; i < SummaryParts.Count; i++) + for (int i = 0; i < Summary.Count; i++) { - if (SummaryParts[i].Patch.IsRemoved("$"u8)) + if (Summary[i].Patch.IsRemoved("$"u8)) { continue; } - writer.WriteObjectValue(SummaryParts[i], options); + writer.WriteObjectValue(Summary[i], options); } Patch.WriteTo(writer, "$.summary"u8); writer.WriteEndArray(); @@ -107,7 +107,7 @@ internal static ReasoningResponseItem DeserializeReasoningResponseItem(JsonEleme #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. ReasoningStatus? status = default; string encryptedContent = default; - IList summaryParts = default; + IList summary = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) @@ -142,7 +142,7 @@ internal static ReasoningResponseItem DeserializeReasoningResponseItem(JsonEleme { array.Add(ReasoningSummaryPart.DeserializeReasoningSummaryPart(item, item.GetUtf8Bytes(), options)); } - summaryParts = array; + summary = array; continue; } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); @@ -153,7 +153,7 @@ internal static ReasoningResponseItem DeserializeReasoningResponseItem(JsonEleme patch, status, encryptedContent, - summaryParts); + summary); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -203,7 +203,7 @@ private bool PropagateGet(ReadOnlySpan jsonPath, out JsonPatch.EncodedValu { return false; } - return SummaryParts[index].Patch.TryGetEncodedValue([.. "$"u8, .. currentSlice.Slice(bytesConsumed)], out value); + return Summary[index].Patch.TryGetEncodedValue([.. "$"u8, .. currentSlice.Slice(bytesConsumed)], out value); } return false; } @@ -222,7 +222,7 @@ private bool PropagateSet(ReadOnlySpan jsonPath, JsonPatch.EncodedValue va { return false; } - SummaryParts[index].Patch.Set([.. "$"u8, .. currentSlice.Slice(bytesConsumed)], value); + Summary[index].Patch.Set([.. "$"u8, .. currentSlice.Slice(bytesConsumed)], value); return true; } return false; diff --git a/src/Generated/Models/Responses/ReasoningResponseItem.cs b/src/Generated/Models/Responses/ReasoningResponseItem.cs index 573f731a0..76cecd6e5 100644 --- a/src/Generated/Models/Responses/ReasoningResponseItem.cs +++ b/src/Generated/Models/Responses/ReasoningResponseItem.cs @@ -13,26 +13,26 @@ namespace OpenAI.Responses [Experimental("OPENAI001")] public partial class ReasoningResponseItem : ResponseItem { - public ReasoningResponseItem(IEnumerable summaryParts) : base(InternalItemType.Reasoning) + public ReasoningResponseItem(IEnumerable summary) : base(InternalItemType.Reasoning) { - Argument.AssertNotNull(summaryParts, nameof(summaryParts)); + Argument.AssertNotNull(summary, nameof(summary)); - SummaryParts = summaryParts.ToList(); + Summary = summary.ToList(); } #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal ReasoningResponseItem(InternalItemType kind, string id, in JsonPatch patch, ReasoningStatus? status, string encryptedContent, IList summaryParts) : base(kind, id, patch) + internal ReasoningResponseItem(InternalItemType kind, string id, in JsonPatch patch, ReasoningStatus? status, string encryptedContent, IList summary) : base(kind, id, patch) { // Plugin customization: ensure initialization of collections Status = status; EncryptedContent = encryptedContent; - SummaryParts = summaryParts ?? new ChangeTrackingList(); + Summary = summary ?? new ChangeTrackingList(); Patch.SetPropagators(PropagateSet, PropagateGet); } #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. public string EncryptedContent { get; set; } - public IList SummaryParts { get; } + public IList Summary { get; } } } diff --git a/src/Generated/Models/Responses/InternalResponsesAssistantMessage.Serialization.cs b/src/Generated/Models/Responses/SystemMessageResponseItem.Serialization.cs similarity index 74% rename from src/Generated/Models/Responses/InternalResponsesAssistantMessage.Serialization.cs rename to src/Generated/Models/Responses/SystemMessageResponseItem.Serialization.cs index 370009f3e..0b1a14c43 100644 --- a/src/Generated/Models/Responses/InternalResponsesAssistantMessage.Serialization.cs +++ b/src/Generated/Models/Responses/SystemMessageResponseItem.Serialization.cs @@ -11,13 +11,13 @@ namespace OpenAI.Responses { - internal partial class InternalResponsesAssistantMessage : MessageResponseItem, IJsonModel + public partial class SystemMessageResponseItem : MessageResponseItem, IJsonModel { - internal InternalResponsesAssistantMessage() : this(default, null, default, default, default, null) + internal SystemMessageResponseItem() : this(default, null, default, default, default, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. if (Patch.Contains("$"u8)) @@ -34,10 +34,10 @@ void IJsonModel.Write(Utf8JsonWriter writer, protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesAssistantMessage)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(SystemMessageResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. @@ -69,20 +69,20 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. } - InternalResponsesAssistantMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessage)JsonModelCreateCore(ref reader, options); + SystemMessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (SystemMessageResponseItem)JsonModelCreateCore(ref reader, options); protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesAssistantMessage)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(SystemMessageResponseItem)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesAssistantMessage(document.RootElement, null, options); + return DeserializeSystemMessageResponseItem(document.RootElement, null, options); } - internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAssistantMessage(JsonElement element, BinaryData data, ModelReaderWriterOptions options) + internal static SystemMessageResponseItem DeserializeSystemMessageResponseItem(JsonElement element, BinaryData data, ModelReaderWriterOptions options) { if (element.ValueKind == JsonValueKind.Null) { @@ -94,7 +94,7 @@ internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAs JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. MessageStatus? status = default; - InternalResponsesMessageRole internalRole = default; + InternalMessageRoleEx internalRoleEx = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { @@ -115,7 +115,7 @@ internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAs } if (prop.NameEquals("role"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + internalRoleEx = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) @@ -130,47 +130,47 @@ internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAs } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); } - return new InternalResponsesAssistantMessage( + return new SystemMessageResponseItem( kind, id, patch, status, - internalRole, + internalRoleEx, internalContent); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(InternalResponsesAssistantMessage)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(SystemMessageResponseItem)} does not support writing '{options.Format}' format."); } } - InternalResponsesAssistantMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessage)PersistableModelCreateCore(data, options); + SystemMessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (SystemMessageResponseItem)PersistableModelCreateCore(data, options); protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": using (JsonDocument document = JsonDocument.Parse(data, ModelSerializationExtensions.JsonDocumentOptions)) { - return DeserializeInternalResponsesAssistantMessage(document.RootElement, data, options); + return DeserializeSystemMessageResponseItem(document.RootElement, data, options); } default: - throw new FormatException($"The model {nameof(InternalResponsesAssistantMessage)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(SystemMessageResponseItem)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. private bool PropagateGet(ReadOnlySpan jsonPath, out JsonPatch.EncodedValue value) diff --git a/src/Generated/Models/Responses/InternalResponsesAssistantMessage.cs b/src/Generated/Models/Responses/SystemMessageResponseItem.cs similarity index 50% rename from src/Generated/Models/Responses/InternalResponsesAssistantMessage.cs rename to src/Generated/Models/Responses/SystemMessageResponseItem.cs index cd83b1c12..c0d658922 100644 --- a/src/Generated/Models/Responses/InternalResponsesAssistantMessage.cs +++ b/src/Generated/Models/Responses/SystemMessageResponseItem.cs @@ -4,22 +4,16 @@ using System.ClientModel.Primitives; using System.Collections.Generic; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using OpenAI; namespace OpenAI.Responses { - internal partial class InternalResponsesAssistantMessage : MessageResponseItem + [Experimental("OPENAI001")] + public partial class SystemMessageResponseItem : MessageResponseItem { - public InternalResponsesAssistantMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.Assistant) - { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - - InternalContent = internalContent.ToList(); - } - #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesAssistantMessage(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(kind, id, patch, status, internalRole) + internal SystemMessageResponseItem(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalMessageRoleEx internalRoleEx, IList internalContent) : base(kind, id, patch, status, internalRoleEx) { // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); diff --git a/src/Generated/Models/Responses/InternalResponsesDeveloperMessage.Serialization.cs b/src/Generated/Models/Responses/UserMessageResponseItem.Serialization.cs similarity index 74% rename from src/Generated/Models/Responses/InternalResponsesDeveloperMessage.Serialization.cs rename to src/Generated/Models/Responses/UserMessageResponseItem.Serialization.cs index d2dc627de..574d01b6d 100644 --- a/src/Generated/Models/Responses/InternalResponsesDeveloperMessage.Serialization.cs +++ b/src/Generated/Models/Responses/UserMessageResponseItem.Serialization.cs @@ -11,13 +11,13 @@ namespace OpenAI.Responses { - internal partial class InternalResponsesDeveloperMessage : MessageResponseItem, IJsonModel + public partial class UserMessageResponseItem : MessageResponseItem, IJsonModel { - internal InternalResponsesDeveloperMessage() : this(default, null, default, default, default, null) + internal UserMessageResponseItem() : this(default, null, default, default, default, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. if (Patch.Contains("$"u8)) @@ -34,10 +34,10 @@ void IJsonModel.Write(Utf8JsonWriter writer, protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessage)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(UserMessageResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. @@ -69,20 +69,20 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. } - InternalResponsesDeveloperMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessage)JsonModelCreateCore(ref reader, options); + UserMessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (UserMessageResponseItem)JsonModelCreateCore(ref reader, options); protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { - throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessage)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(UserMessageResponseItem)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesDeveloperMessage(document.RootElement, null, options); + return DeserializeUserMessageResponseItem(document.RootElement, null, options); } - internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDeveloperMessage(JsonElement element, BinaryData data, ModelReaderWriterOptions options) + internal static UserMessageResponseItem DeserializeUserMessageResponseItem(JsonElement element, BinaryData data, ModelReaderWriterOptions options) { if (element.ValueKind == JsonValueKind.Null) { @@ -94,7 +94,7 @@ internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDe JsonPatch patch = new JsonPatch(data is null ? ReadOnlyMemory.Empty : data.ToMemory()); #pragma warning restore SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. MessageStatus? status = default; - InternalResponsesMessageRole internalRole = default; + InternalMessageRoleEx internalRoleEx = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { @@ -115,7 +115,7 @@ internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDe } if (prop.NameEquals("role"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + internalRoleEx = new InternalMessageRoleEx(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) @@ -130,47 +130,47 @@ internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDe } patch.Set([.. "$."u8, .. Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes()); } - return new InternalResponsesDeveloperMessage( + return new UserMessageResponseItem( kind, id, patch, status, - internalRole, + internalRoleEx, internalContent); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessage)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(UserMessageResponseItem)} does not support writing '{options.Format}' format."); } } - InternalResponsesDeveloperMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessage)PersistableModelCreateCore(data, options); + UserMessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (UserMessageResponseItem)PersistableModelCreateCore(data, options); protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": using (JsonDocument document = JsonDocument.Parse(data, ModelSerializationExtensions.JsonDocumentOptions)) { - return DeserializeInternalResponsesDeveloperMessage(document.RootElement, data, options); + return DeserializeUserMessageResponseItem(document.RootElement, data, options); } default: - throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessage)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(UserMessageResponseItem)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. private bool PropagateGet(ReadOnlySpan jsonPath, out JsonPatch.EncodedValue value) diff --git a/src/Generated/Models/Responses/InternalResponsesDeveloperMessage.cs b/src/Generated/Models/Responses/UserMessageResponseItem.cs similarity index 50% rename from src/Generated/Models/Responses/InternalResponsesDeveloperMessage.cs rename to src/Generated/Models/Responses/UserMessageResponseItem.cs index d9b39d616..525e7f00e 100644 --- a/src/Generated/Models/Responses/InternalResponsesDeveloperMessage.cs +++ b/src/Generated/Models/Responses/UserMessageResponseItem.cs @@ -4,22 +4,16 @@ using System.ClientModel.Primitives; using System.Collections.Generic; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using OpenAI; namespace OpenAI.Responses { - internal partial class InternalResponsesDeveloperMessage : MessageResponseItem + [Experimental("OPENAI001")] + public partial class UserMessageResponseItem : MessageResponseItem { - public InternalResponsesDeveloperMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.Developer) - { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - - InternalContent = internalContent.ToList(); - } - #pragma warning disable SCME0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. - internal InternalResponsesDeveloperMessage(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(kind, id, patch, status, internalRole) + internal UserMessageResponseItem(InternalItemType kind, string id, in JsonPatch patch, MessageStatus? status, InternalMessageRoleEx internalRoleEx, IList internalContent) : base(kind, id, patch, status, internalRoleEx) { // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); diff --git a/tests/Responses/OpenAIResponsesModelFactoryTests.cs b/tests/Responses/OpenAIResponsesModelFactoryTests.cs index b1951358a..524475442 100644 --- a/tests/Responses/OpenAIResponsesModelFactoryTests.cs +++ b/tests/Responses/OpenAIResponsesModelFactoryTests.cs @@ -11,49 +11,6 @@ namespace OpenAI.Tests.Responses; [Category("Smoke")] public partial class OpenAIResponsesModelFactoryTests { - [Test] - public void OpenAIResponseWorks() - { - string id = "response_123"; - DateTimeOffset createdAt = DateTimeOffset.UtcNow; - ResponseStatus status = ResponseStatus.Completed; - string model = "gpt-4o"; - IEnumerable outputItems = [ - OpenAIResponsesModelFactory.MessageResponseItem(id: "msg_1", role: MessageRole.User, status: MessageStatus.Completed), - OpenAIResponsesModelFactory.ReasoningResponseItem(id: "reason_1", encryptedContent: "encrypted", status: ReasoningStatus.InProgress, summaryText: "summary") - ]; - - OpenAIResponse response = OpenAIResponsesModelFactory.OpenAIResponse( - id: id, - createdAt: createdAt, - status: status, - model: model, - outputItems: outputItems); - - Assert.That(response.Id, Is.EqualTo(id)); - Assert.That(response.CreatedAt, Is.EqualTo(createdAt)); - Assert.That(response.Status, Is.EqualTo(status)); - Assert.That(response.Model, Is.EqualTo(model)); - Assert.That(response.OutputItems.SequenceEqual(outputItems), Is.True); - } - - [Test] - public void MessageResponseItemWorks() - { - string id = "message_123"; - MessageRole role = MessageRole.Developer; - MessageStatus status = MessageStatus.InProgress; - - MessageResponseItem messageItem = OpenAIResponsesModelFactory.MessageResponseItem( - id: id, - role: role, - status: status); - - Assert.That(messageItem.Id, Is.EqualTo(id)); - Assert.That(messageItem.Role, Is.EqualTo(role)); - Assert.That(messageItem.Status, Is.EqualTo(status)); - } - [Test] public void ReasoningResponseItemWorks() { @@ -66,32 +23,12 @@ public void ReasoningResponseItemWorks() id: id, encryptedContent: encryptedContent, status: status, - summaryParts: summaryParts); - - Assert.That(reasoningItem.Id, Is.EqualTo(id)); - Assert.That(reasoningItem.EncryptedContent, Is.EqualTo(encryptedContent)); - Assert.That(reasoningItem.Status, Is.EqualTo(status)); - Assert.That(reasoningItem.SummaryParts.SequenceEqual(summaryParts), Is.True); - } - - [Test] - public void ReasoningResponseItemWithSummaryTextWorks() - { - string id = "reasoning_456"; - string encryptedContent = "encrypted_data"; - ReasoningStatus status = ReasoningStatus.InProgress; - string summaryText = "This is a reasoning summary"; - - ReasoningResponseItem reasoningItem = OpenAIResponsesModelFactory.ReasoningResponseItem( - id: id, - encryptedContent: encryptedContent, - status: status, - summaryText: summaryText); + summary: summaryParts); Assert.That(reasoningItem.Id, Is.EqualTo(id)); Assert.That(reasoningItem.EncryptedContent, Is.EqualTo(encryptedContent)); Assert.That(reasoningItem.Status, Is.EqualTo(status)); - Assert.That(reasoningItem.GetSummaryText(), Is.EqualTo(summaryText)); + Assert.That(reasoningItem.Summary.SequenceEqual(summaryParts), Is.True); } [Test] diff --git a/tests/Responses/ResponsesSmokeTests.cs b/tests/Responses/ResponsesSmokeTests.cs index 89db6edd1..9e7a329a1 100644 --- a/tests/Responses/ResponsesSmokeTests.cs +++ b/tests/Responses/ResponsesSmokeTests.cs @@ -44,7 +44,7 @@ public void ItemSerialization() ResponseItem.CreateFunctionCallOutputItem("call_abcd", "functionOutput"), ResponseItem.CreateReasoningItem("summary goes here"), ResponseItem.CreateReferenceItem("msg_1234"), - ResponseItem.CreateAssistantMessageItem("Goodbye!", []), + ResponseItem.CreateAssistantMessageItem("Goodbye!"), ResponseItem.CreateDeveloperMessageItem("Talk like a pirate"), ResponseItem.CreateSystemMessageItem("Talk like a ninja"), ResponseItem.CreateUserMessageItem("Hello, world"), @@ -64,7 +64,7 @@ public void ItemSerialization() potatoMessage => { Assert.That(potatoMessage.Role, Is.EqualTo(MessageRole.Unknown)); - Assert.That(potatoMessage.Content, Has.Count.EqualTo(0)); + Assert.That(potatoMessage.Content, Is.Null); }); } diff --git a/tests/Responses/ResponsesTests.cs b/tests/Responses/ResponsesTests.cs index 6a284af8e..01459f143 100644 --- a/tests/Responses/ResponsesTests.cs +++ b/tests/Responses/ResponsesTests.cs @@ -427,7 +427,7 @@ public async Task ResponsesWithReasoning() Assert.That(response.OutputItems, Has.Count.EqualTo(2)); ReasoningResponseItem reasoningItem = response.OutputItems[0] as ReasoningResponseItem; MessageResponseItem messageItem = response.OutputItems[1] as MessageResponseItem; - Assert.That(reasoningItem.SummaryParts, Has.Count.GreaterThan(0)); + Assert.That(reasoningItem.Summary, Has.Count.GreaterThan(0)); Assert.That(reasoningItem.GetSummaryText(), Is.Not.Null.And.Not.Empty); Assert.That(reasoningItem.Id, Is.Not.Null.And.Not.Empty); Assert.That(messageItem.Content?.FirstOrDefault().Text, Has.Length.GreaterThan(0)); diff --git a/tspCodeModel.json b/tspCodeModel.json index 20a4405c2..97a331a23 100644 --- a/tspCodeModel.json +++ b/tspCodeModel.json @@ -66688,7 +66688,7 @@ { "$id": "5276", "kind": "property", - "name": "SummaryParts", + "name": "summary", "serializedName": "summary", "doc": "Reasoning text contents.", "type": {